Ë
    *�£j·*  ã                  ó€  — d dl mZ d dlZd dlmZmZ d dlZd dlm	Z	 d dl
mZ erd dlmZ d dlmZ ej                   	 	 	 	 	 	 	 	 dd„«       Zej                   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	„«       Zej                   	 	 	 	 	 	 	 	 dd
„«       Zej                   d„ «       Zej                   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAny)Úimport_optional_dependency)Újit_user_function)ÚCallable)ÚScalarc                ó    ‡‡— t        | «      Št        rddlŠnt        d«      Š‰j	                  |||¬«      	 	 	 	 	 	 	 	 	 	 	 	 dˆˆfd„«       }|S )a’  
    Generate a numba jitted apply function specified by values from engine_kwargs.

    1. jit the user's function
    2. Return a rolling apply function with the jitted function inline

    Configurations specified in engine_kwargs apply to both the user's
    function _AND_ the rolling apply function.

    Parameters
    ----------
    func : function
        function to be applied to each window and will be JITed
    nopython : bool
        nopython to be passed into numba.jit
    nogil : bool
        nogil to be passed into numba.jit
    parallel : bool
        parallel to be passed into numba.jit

    Returns
    -------
    Numba function
    r   NÚnumba©ÚnopythonÚnogilÚparallelc                óR  •— t        j                  t        |«      «      }‰j                  t        |«      «      D ]j  }||   }||   }| || }	t        j                  t        j
                  |	«      «      }
t        |	«      |
z
  |k\  r ‰|	g|¢­Ž ||<   ŒXt         j                  ||<   Œl |S )N)ÚnpÚemptyÚlenÚprangeÚsumÚisnanÚnan)ÚvaluesÚbeginÚendÚminimum_periodsÚargsÚresultÚiÚstartÚstopÚwindowÚ	count_nanr   Ú
numba_funcs              €€ú;C:\FundamentalWorkbench\vendor\pandas\core\window\numba_.pyÚ
roll_applyz-generate_numba_apply_func.<locals>.roll_apply:   s›   ø€ ô —‘œ#˜e›*Ó%ˆØ—‘œc &›kÖ*ˆAØ˜!‘HˆEØ�q‘6ˆDØ˜E $Ð'ˆFÜŸ™œrŸx™x¨Ó/Ó0ˆIÜ�6‹{˜YÑ&¨/Ò9Ù& vÐ5°Ò5��q’	äŸF™F��q’	ð +ð ˆó    )r   ú
np.ndarrayr   r'   r   r'   r   Úintr   r   Úreturnr'   ©r   r   r   r   Újit)Úfuncr   r   r   r%   r   r#   s        @@r$   Úgenerate_numba_apply_funcr-      s�   ù€ ô> # 4Ó(€JÝÜä*¨7Ó3ˆà
‡Y�Y˜¨¸€YÓAðØðàðð ðð ð	ð
 ðð 
õó Bðð& Ðr&   c                ó–   ‡‡‡‡‡‡	— t         rddlŠ	nt        d«      Š	‰	j                  | ||¬«      	 	 	 	 	 	 	 	 	 	 dˆˆˆˆˆˆ	fd„«       }|S )aÍ  
    Generate a numba jitted ewm mean or sum function specified by values
    from engine_kwargs.

    Parameters
    ----------
    nopython : bool
        nopython to be passed into numba.jit
    nogil : bool
        nogil to be passed into numba.jit
    parallel : bool
        parallel to be passed into numba.jit
    com : float
    adjust : bool
    ignore_na : bool
    deltas : tuple
    normalize : bool

    Returns
    -------
    Numba function
    r   Nr   r   c                ó  •— t        j                  t        | «      «      }dd‰z   z  }d|z
  }‰rdn|}‰j                  t        |«      «      D �]:  }||   }	||   }
| |	|
 }t        j                  t        |«      «      }|d   }t	        t        j
                  |«       «      }||k\  r|nt         j                  |d<   d}t        dt        |«      «      D ]­  }||   }t        j
                  |«       }||z  }t        j
                  |«      sX|s‰sX‰r||‰|	|z   dz
     z  z  }‰s‰dk(  rd|z
  }n||z  }|r1‰r%||k7  r||z  ||z  z   }‰r|||z   z  }‰r||z  }nd}n
||z  }n|r|}||k\  r|nt         j                  ||<   Œ¯ |||	|
 �Œ= |S )Nç      ð?r   é   )r   r   r   r   r(   r   r   Úrange)r   r   r   r   r   ÚalphaÚold_wt_factorÚnew_wtr   r   r    r!   Ú
sub_resultÚweightedÚnobsÚold_wtÚjÚcurÚis_observationÚadjustÚcomÚdeltasÚ	ignore_naÚ	normalizer   s                      €€€€€€r$   Úewmz$generate_numba_ewm_func.<locals>.ewmw   sÀ  ø€ ô —‘œ#˜f›+Ó&ˆØ�s˜S‘yÑ!ˆØ˜e™ˆÙ‘ Eˆà—‘œc %›j×)ˆAØ˜!‘HˆEØ�q‘6ˆDØ˜E $Ð'ˆFÜŸ™¤# f£+Ó.ˆJà˜a‘yˆHÜœ2Ÿ8™8 HÓ-Ð-Ó.ˆDØ(,°Ò(?™HÄRÇVÁVˆJ�q‰MØˆFä˜1œc &›kÖ*�Ø˜Q‘i�Ü%'§X¡X¨c£]Ð!2�Ø˜Ñ&�Ü—x‘x Ô)Ù%©YÙ$ð # m°v¸eÀa¹iÈ!¹mÑ7LÑ&LÑL˜FÙ#)¨c°Qªhà),¨v©¡à'4°xÑ'?˜HÙ)Ù(à#+¨s¢?Ø/5¸Ñ/@À6ÈCÁ<Ñ/O HÙ'0Ø3;¸vÈ¹Ñ3O¨Ù#)Ø$*¨fÑ$4¡Fà-0¡Fà (¨C¡¡Ù#Ø"�Hà,0°OÒ,C¡ÌÏÉ�
˜1’ð? +ðB ",ˆF�5˜ÒðY *ð\ ˆr&   ©
r   r'   r   r'   r   r'   r   r(   r)   r'   ©r   r   r   r+   )
r   r   r   r>   r=   r@   r?   rA   rB   r   s
      ````` @r$   Úgenerate_numba_ewm_funcrE   Q   ss   ý€ õB Üä*¨7Ó3ˆà
‡Y�Y˜¨¸€YÓAð9Øð9àð9ð ð9ð ð	9ð
 
÷9ñ 9ó Bð9ðv €Jr&   c                óœ   ‡‡— t        | «      Št        rddlŠnt        d«      Š‰j	                  |||¬«      	 	 	 	 	 	 	 	 	 	 dˆˆfd„«       }|S )a’  
    Generate a numba jitted function to apply window calculations table-wise.

    Func will be passed an M window size x N number of columns array, and
    must return a 1 x N number of columns array.

    1. jit the user's function
    2. Return a rolling apply function with the jitted function inline

    Parameters
    ----------
    func : function
        function to be applied to each window and will be JITed
    nopython : bool
        nopython to be passed into numba.jit
    nogil : bool
        nogil to be passed into numba.jit
    parallel : bool
        parallel to be passed into numba.jit

    Returns
    -------
    Numba function
    r   Nr   r   c                ó  •— t        j                  t        |«      | j                  d   f«      }t        j                  |j                  «      }‰j	                  t        |«      «      D ]u  }||   }||   }	| ||	 }
t        j
                  t        j                  |
«      d¬«      }t        |
«      |z
  |k\  }|j                  «       r ‰|
g|¢­Ž ||d d …f<   |||d d …f<   Œw t        j                  ||t         j                  «      }|S )Nr1   r   )Úaxis)
r   r   r   Úshaper   r   r   ÚanyÚwherer   )r   r   r   r   r   r   Úmin_periods_maskr   r   r    r!   r"   Únan_maskr   r#   s                €€r$   Ú
roll_tablez-generate_numba_table_func.<locals>.roll_tableÛ   så   ø€ ô —‘œ3˜u›: v§|¡|°A¡Ð7Ó8ˆÜŸ8™8 F§L¡LÓ1ÐØ—‘œc &›kÖ*ˆAØ˜!‘HˆEØ�q‘6ˆDØ˜E $Ð'ˆFÜŸ™œrŸx™x¨Ó/°aÔ8ˆIÜ˜6“{ YÑ.°/ÑAˆHØ�|‰|Œ~Ù)¨&Ð8°4Ò8��qš!�t‘Ø%-Ð˜Q¢˜TÒ"ð +ô —‘Ð*¨F´B·F±FÓ;ˆØˆr&   )
r   r'   r   r'   r   r'   r   r(   r   r   r*   )r,   r   r   r   rN   r   r#   s        @@r$   Úgenerate_numba_table_funcrO   ¶   sw   ù€ ô> # 4Ó(€JÝÜä*¨7Ó3ˆà
‡Y�Y˜¨¸€YÓAðØðàðð ðð ð	ð
 õó Bðð* Ðr&   c                óp   ‡ ‡— t         rdd lŠnt        d«      Š‰j                  ddd¬«      ˆ ˆfd„«       }|S )Nr   r   Tr   c                óº   •— t        j                  | j                  d   «      }‰j                  | j                  d   «      D ]  }| d d …|f   } ‰|«      ||<   Œ |S )Nr1   )r   r   rI   r   )Útabler   r   Ú	partitionÚnan_funcr   s       €€r$   Únan_agg_with_axiszBgenerate_manual_numpy_nan_agg_with_axis.<locals>.nan_agg_with_axisþ   sV   ø€ ä—‘˜%Ÿ+™+ a™.Ó)ˆØ—‘˜eŸk™k¨!™nÖ-ˆAØša ˜d™ˆIÙ  Ó+ˆF�1ŠIð .ð ˆr&   rD   )rT   rU   r   s   ` @r$   Ú'generate_manual_numpy_nan_agg_with_axisrV   ÷   s<   ù€ åÜä*¨7Ó3ˆà
‡Y�Y˜ D°4€YÓ8ôó 9ðð Ðr&   c                ó–   ‡‡‡‡‡‡	— t         rddlŠ	nt        d«      Š	‰	j                  | ||¬«      	 	 	 	 	 	 	 	 	 	 dˆˆˆˆˆˆ	fd„«       }|S )aß  
    Generate a numba jitted ewm mean or sum function applied table wise specified
    by values from engine_kwargs.

    Parameters
    ----------
    nopython : bool
        nopython to be passed into numba.jit
    nogil : bool
        nogil to be passed into numba.jit
    parallel : bool
        parallel to be passed into numba.jit
    com : float
    adjust : bool
    ignore_na : bool
    deltas : tuple
    normalize: bool

    Returns
    -------
    Numba function
    r   Nr   r   c           	     ób  •— dd‰z   z  }d|z
  }‰rdn|}t        j                  | j                  d   «      }t        j                  | j                  «      }| d   j	                  «       }	t        j
                  |	«       j                  t         j                  «      }
t        j                  |
|k\  |	t         j                  «      |d<   t        dt        | «      «      D �]O  }| |   }t        j
                  |«       }|
|j                  t         j                  «      z  }
‰j                  t        |«      «      D ]Ç  }t        j
                  |	|   «      sŸ||   s‰rŒ#‰r&||xx   |‰|dz
     z  z  cc<   ‰s‰dk(  rd||   z
  }n||	|   z  |	|<   ||   sŒ\‰rK|	|   ||   k7  r*||   |	|   z  |||   z  z   |	|<   ‰r|	|   ||   |z   z  |	|<   ‰r||xx   |z  cc<   Œ£d||<   Œ©|	|xx   ||   z  cc<   Œº||   sŒÀ||   |	|<   ŒÉ t        j                  |
|k\  |	t         j                  «      ||<   �ŒR |S )Nr0   r1   r   )r   ÚonesrI   r   Úcopyr   ÚastypeÚint64rK   r   r2   r   r   )r   r   r   r   r3   r4   r5   r9   r   r7   r8   r   r;   Úis_observationsr:   r=   r>   r?   r@   rA   r   s                  €€€€€€r$   Ú	ewm_tablez0generate_numba_ewm_table_func.<locals>.ewm_table/  s(  ø€ ð �s˜S‘yÑ!ˆØ˜e™ˆÙ‘ EˆÜ—‘˜Ÿ™ a™Ó)ˆä—‘˜&Ÿ,™,Ó'ˆØ˜!‘9—>‘>Ó#ˆÜ—‘˜(Ó#Ð#×+Ñ+¬B¯H©HÓ5ˆÜ—H‘H˜T _Ñ4°hÄÇÁÓGˆˆq‰	Ü�qœ#˜f›+×&ˆAØ˜‘)ˆCÜ!Ÿx™x¨›}˜nˆOØ�O×*Ñ*¬2¯8©8Ó4Ñ4ˆDØ—\‘\¤# c£(Ö+�Ü—x‘x ¨¡Ô,Ø& qÒ)²Ù$ð # 1›I¨¸&ÀÀQÁ¹-Ñ)GÑG›IÙ#)¨c°Qªhà),¨v°a©y©¡à*7¸(À1¹+Ñ*E˜H Q™KØ*¨1Ó-Ù(à#+¨A¡;°#°a±&Ò#8à(.¨q©	°H¸Q±KÑ(?À&È3ÈqÉ6Á/Ñ(Qð %-¨Q¡Kñ (1Ø6>¸q±kÀVÈAÁYÐQWÑEWÑ6X¨°©Ù#)Ø$*¨1£I°Ñ$7¤Ià03 F¨1¢Ià (¨£¨s°1©vÑ 5¤Ø$ QÓ'Ø"% a¡&�H˜Q’Kð9 ,ô< Ÿ™ ¨Ñ!8¸(ÄBÇFÁFÓKˆF�1‹IðE 'ðH ˆr&   rC   rD   )
r   r   r   r>   r=   r@   r?   rA   r^   r   s
      ````` @r$   Úgenerate_numba_ewm_table_funcr_   	  st   ý€ õB Üä*¨7Ó3ˆà
‡Y�Y˜¨¸€YÓAð3Øð3àð3ð ð3ð ð	3ð
 
÷3ñ 3ó Bð3ðj Ðr&   )r,   zCallable[..., Scalar]r   Úboolr   r`   r   r`   )r   r`   r   r`   r   r`   r>   Úfloatr=   r`   r@   r`   r?   ÚtuplerA   r`   )r,   zCallable[..., np.ndarray]r   r`   r   r`   r   r`   )Ú
__future__r   Ú	functoolsÚtypingr   r   Únumpyr   Úpandas.compat._optionalr   Úpandas.core.util.numba_r   Úcollections.abcr   Úpandas._typingr	   Úcacher-   rE   rO   rV   r_   © r&   r$   Ú<module>rm      s“  ðÝ "ã ÷ó
 å >å 5áÝ(å%ð ‡�ð8Ø
ð8àð8ð ð8ð ò	8ó ð8ðv ‡�ðaØðaàðað ðað 
ð	að
 ðað ðað ðað òaó ðaðH ‡�ð:Ø
#ð:àð:ð ð:ð ò	:ó ð:ð@ ‡�ñó ðð" ‡�ð[Øð[àð[ð ð[ð 
ð	[ð
 ð[ð ð[ð ð[ð ò[ó ñ[r&   