
     jn)                       d dl mZ d dlZd dlmZ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 ej        dd            Zej        dd            Zej        dd            Zej        d             Zej        dd            ZdS )    )annotationsN)TYPE_CHECKINGAnyCallable)import_optional_dependency)jit_user_function)ScalarfuncCallable[..., Scalar]nopythonboolnogilparallelc                    t          |           t          rddlnt          d                              |||          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r   r   r   values
np.ndarraybeginendminimum_periodsintargsr   returnc                x   t          j        t          |                    }                    t          |                    D ]t}||         }||         }| ||         }	t          j        t          j        |	                    }
t          |	          |
z
  |k    r |	g|R  ||<   et           j        ||<   u|S )N)npemptylenprangesumisnannan)r   r   r   r   r   resultistartstopwindow	count_nanr   
numba_funcs              mC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\pandas/core/window/numba_.py
roll_applyz-generate_numba_apply_func.<locals>.roll_apply9   s     #e**%%c&kk** 	# 	#A!HEq6DE$J'Frx//00I6{{Y&/9 #&Jv5555q		Fq		    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   jit)r
   r   r   r   r+   r   r)   s        @@r*   generate_numba_apply_funcr/      s|    > #4((J 4*733
YYYAA      BA& r,   comfloatadjust	ignore_nadeltastuple	normalizec                   	 t           rddl	nt          d          		                    | ||          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   r   r   r   r   r   r   r   c                J   t          j        t          |                     }ddz   z  }d|z
  }rdn|}                    t          |                    D ]I}||         }	||         }
| |	|
         }t          j        t          |                    }|d         }t	          t          j        |                     }||k    r|nt           j        |d<   d}t          dt          |                    D ]}||         }t          j        |           }||z  }t          j        |          sP|ssKr|||	|z   dz
           z  z  }n||z  }|r-r&||k    r||z  ||z  z   }r|||z   z  }r||z  }nd}n
||z  }n|r|}||k    r|nt           j        ||<   |||	|
<   K|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_observationr2   r0   r4   r3   r6   r   s                      r*   ewmz$generate_numba_ewm_func.<locals>.ewmv   s    #f++&&sSy!e)Ec%jj)) )	, )	,A!HEq6DE$J'F#f++..JayH28H---..D(,(?KHHRVJqMF1c&kk** P PQi%'Xc]]!2&x)) #% 0Y 0$ @ #mveai!m7L&LLFF'4x'?H) 0( 0#+s? !P/5/@6C</OH'0 %P3;v3O#) !1$*f$4FF-0FF (C# #"H,0O,C O
1!+F5:r,   
r   r   r   r   r   r   r   r   r   r   r   r   r   r.   )
r   r   r   r0   r2   r3   r4   r6   rF   r   s
      ````` @r*   generate_numba_ewm_funcrI   P   s    B  4*733
YYYAA6 6 6 6 6 6 6 6 6 6 BA6p Jr,   Callable[..., np.ndarray]c                    t          |           t          rddlnt          d                              |||          dfd            }|S )a  
    Generate a numba jitted function to apply window calculations table-wise.

    Func will be passed a M window size x N number of columns array, and
    must return a 1 x N number of columns array. Func is intended to operate
    row-wise, but the result will be transposed for axis=1.

    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   r   r   r   r   r   r   r   r   c                   t          j        t          |          | j        d         f          }t          j        |j                  }                    t          |                    D ]u}||         }||         }	| ||	         }
t          j        t          j        |
          d          } |
g|R  }t          |
          |z
  |k    }|||d d f<   |||d d f<   vt          j        ||t           j                  }|S )Nr:   r   )axis)	r   r   r   shaper   r    r!   wherer"   )r   r   r   r   r   r#   min_periods_maskr$   r%   r&   r'   r(   r?   nan_maskr   r)   s                 r*   
roll_tablez-generate_numba_table_func.<locals>.roll_table   s    3u::v|A7888FL11c&kk** 	& 	&A!HEq6DE$J'Frx//a888I#F2T222J6{{Y./AH%-QT"%F1aaa4LL*FBF;;r,   )
r   r   r   r   r   r   r   r   r   r   r-   )r
   r   r   r   rR   r   r)   s        @@r*   generate_numba_table_funcrS      s}    @ #4((J 4*733
YYYAA      BA* r,   c                     t           rdd lnt          d                              ddd           fd            }|S )Nr   r   Tr   c                    t          j        | j        d                   }                    | j        d                   D ]}| d d |f         } |          ||<   |S )Nr:   )r   r   rN   r   )tabler#   r$   	partitionnan_funcr   s       r*   nan_agg_with_axiszBgenerate_manual_numpy_nan_agg_with_axis.<locals>.nan_agg_with_axis   sd    %+a.))ek!n-- 	, 	,AaaadI ++F1IIr,   rH   )rX   rY   r   s   ` @r*   'generate_manual_numpy_nan_agg_with_axisrZ      sg     4*733
YYD4Y88     98 r,   c                   	 t           rddl	nt          d          		                    | ||          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   r   r   r   r   r   r   r   c           	        ddz   z  }d|z
  }rdn|}t          j        | j        d                   }t          j        | j                  }| d                                         }	t          j        |	                               t           j                  }
t          j        |
|k    |	t           j	                  |d<   t          dt          |                     D ]w}| |         }t          j        |           }|
|                    t           j                  z  }
                    t          |                    D ]}t          j        |	|                   s||         ssr||xx         ||dz
           z  z  cc<   n||	|         z  |	|<   ||         r|rd|	|         ||         k    r9||         |	|         z  |||         z  z   |	|<   r|	|         ||         |z   z  |	|<   r||xx         |z  cc<   d||<   |	|xx         ||         z  cc<   ||         r||         |	|<   t          j        |
|k    |	t           j	                  ||<   y|S )Nr9   r:   r   )r   onesrN   r   copyr!   astypeint64rO   r"   r;   r   r   )r   r   r   r   r<   r=   r>   rB   r#   r@   rA   r$   rD   is_observationsrC   r2   r0   r4   r3   r6   r   s                  r*   	ewm_tablez0generate_numba_ewm_table_func.<locals>.ewm_table,  s    sSy!e)Ea))&,''!9>>##(###++BH55HT_4hGGq	q#f++&& 	L 	LA)C!x}}nOO**28444D\\#c((++ ) )x,, )&q) 6 6$ F #1III&Q-)GGIIII*7(1+*EHQK*1- 6( 6#+A;#a&#8 !Y(.q	HQK(?&3q6/(Q %-QK (1 %Y6>qkVAYQWEW6X#) !4$*1III$7IIII03F1II (s1v 5$Q' )"%a&HQK!8(BFKKF1IIr,   rG   rH   )
r   r   r   r0   r2   r3   r4   r6   rb   r   s
      ````` @r*   generate_numba_ewm_table_funcrc     s    B  4*733
YYYAA0 0 0 0 0 0 0 0 0 0 BA0d r,   )r
   r   r   r   r   r   r   r   )r   r   r   r   r   r   r0   r1   r2   r   r3   r   r4   r5   r6   r   )r
   rJ   r   r   r   r   r   r   )
__future__r   	functoolstypingr   r   r   numpyr   pandas.compat._optionalr   pandas.core.util.numba_r   pandas._typingr	   cacher/   rI   rS   rZ   rc    r,   r*   <module>rm      s]   " " " " " "                  > > > > > > 5 5 5 5 5 5 &%%%%%% 8 8 8 8v ^ ^ ^ ^B ; ; ; ;B   " X X X X X Xr,   