o
    5c                     @  sH   d dl mZ d dlmZ d dlZd dlmZ dd	d
ZG dd dZ	dS )    )annotations)TYPE_CHECKINGN)import_optional_dependencynopythonboolnogilparallelc                   s8   t rddl ntd  j| ||dd fdd}|S )ak  
    Generate a numba jitted groupby ewma 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

    Returns
    -------
    Numba function
    r   Nnumba)r   r   r   values
np.ndarraydeltasminimum_periodsintold_wt_factorfloatnew_wtold_wtadjustr   	ignore_nac              	     sZ  t | j}| d }	t |	 t j}
t |
|k|	t j|d< tdt	| D ]}| | }t | }|
|t j7 }
 
t	|D ]Y}t |	| s|| sQ|s||  |||d   9  < || r|	| || kr|| |	|  |||   || |  |	|< |r||  |7  < qBd||< qB|| r|| |	|< qBt |
|k|	t j||< q'||fS )z
        Compute online exponentially weighted mean per column over 2D values.

        Takes the first observation as is, then computes the subsequent
        exponentially weighted mean accounting minimum periods.
        r            ?)npemptyshapeisnanastypeint64wherenanrangelenprange)r
   r   r   r   r   r   r   r   resultweighted_avgnobsicuris_observationsjr	    O/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/core/window/online.pyonline_ewma%   s4   
z4generate_online_numba_ewma_func.<locals>.online_ewma)r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r	   r   jit)r   r   r   r,   r*   r)   r+   generate_online_numba_ewma_func
   s   
1r.   c                   @  s(   e Zd Zd
ddZdd Zd
ddZd	S )EWMMeanStatereturnNonec                 C  s^   dd|  }|| _ || _|| _|| _|rdn|| _d| | _t| j| j d  | _d | _	d S )Nr   r   )
axisr   r   r   r   r   r   onesr   last_ewm)selfcomr   r   r2   r   alphar*   r*   r+   __init__[   s   

zEWMMeanState.__init__c              	   C  s8   ||||| j | j| j| j| j\}}|| _|d | _|S )N)r   r   r   r   r   r4   )r5   r#   r   min_periodsewm_funcr"   r   r*   r*   r+   run_ewmf   s   

zEWMMeanState.run_ewmc                 C  s"   t | j| jd  | _d | _d S )Nr   )r   r3   r   r2   r   r4   )r5   r*   r*   r+   resetu   s   
zEWMMeanState.resetN)r0   r1   )__name__
__module____qualname__r8   r<   r=   r*   r*   r*   r+   r/   Z   s    
r/   )r   r   r   r   r   r   )

__future__r   typingr   numpyr   pandas.compat._optionalr   r.   r/   r*   r*   r*   r+   <module>   s    
P