o
    ŀg                     @  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              	     s^  t | j}| d  }	t |	 t j}
t |
|k|	t j|d< t	dt
| D ]}| | }t | }|
|t j7 }
 t
|D ]Y}t |	| s|| sS|s||  |||d   9  < || r|	| || kr|| |	|  |||   || |  |	|< |r||  |7  < qDd||< qD|| r|| |	|< qDt |
|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copy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	    M/var/www/html/myenv/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   
0r/   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   r3   r   alphar+   r+   r,   __init__Z   s   

zEWMMeanState.__init__c              	   C  s8   ||||| j | j| j| j| j\}}|| _|d | _|S )N)r   r   r   r   r   r5   )r6   r$   r   min_periodsewm_funcr#   r   r+   r+   r,   run_ewme   s   

zEWMMeanState.run_ewmc                 C  s"   t | j| jd  | _d | _d S )Nr   )r   r4   r   r3   r   r5   )r6   r+   r+   r,   resett   s   
zEWMMeanState.resetN)r1   r2   )__name__
__module____qualname__r9   r=   r>   r+   r+   r+   r,   r0   Y   s    
r0   )r   r   r   r   r   r   )

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