
    Eg                    T    d dl mZ d dlmZ d dlZd dlmZ dd	Z G d
 d          Z	dS )    )annotations)TYPE_CHECKINGN)import_optional_dependencynopythonboolnogilparallelc                    t           rddlnt          d                              | ||          df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           	        t          j        | j                  }| d                                         }	t          j        |	                               t           j                  }
t          j        |
|k    |	t           j                  |d<   t          dt          |                     D ]@}| |         }t          j        |           }|
|                    t           j                  z  }
                    t          |                    D ]}t          j        |	|                   s||         s|sz||xx         |||dz
           z  z  cc<   ||         rV|	|         ||         k    r,||         |	|         z  |||         z  z   ||         |z   z  |	|<   |r||xx         |z  cc<   d||<   ||         r||         |	|<   t          j        |
|k    |	t           j                  ||<   B||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jr   s                  N/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/window/online.pyonline_ewmaz4generate_online_numba_ewma_func.<locals>.online_ewma%   s   " &,''ay~~'','''//99HT_4lBFKKq	q#f++&& 	P 	PA)C!x}}nOO**28444D\\#c((++ - -xQ00 -&q) 0 0 q			]fQUm%CC			*1- 	0+A#a&88%+AYa%@VcRSf_$U%+AY%739Q  & 0 &q			V 3				,/q	$Q' -&)!fLO!8,OOF1IIv~    )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   s       @r-   generate_online_numba_ewma_funcr1   
   sj    ,  4*733
YYYAA. . . . . BA.` r/   c                  $    e Zd ZddZd ZddZdS )EWMMeanStatereturnNonec                    dd|z   z  }|| _         || _        || _        || _        |rdn|| _        d|z
  | _        t          j        | j        | j         dz
                     | _        d | _	        d S )Nr   r   )
axisr   r   r   r   r   r   onesr   last_ewm)selfcomr   r   r7   r   alphas          r-   __init__zEWMMeanState.__init__Z   sq    sSy!	
"#.cc 5[gdjQ788r/   c           
          ||||| j         | j        | j        | j        | j                  \  }}|| _        |d         | _        |S )N)r   r   r   r   r   r9   )r:   r'   r   min_periodsewm_funcr&   r   s          r-   run_ewmzEWMMeanState.run_ewme   sS    !KKKN	
 	
 r
r/   c                l    t          j        | j        | j        dz
                     | _        d | _        d S )Nr   )r   r8   r   r7   r   r9   )r:   s    r-   resetzEWMMeanState.resett   s+    gdjQ788r/   N)r4   r5   )__name__
__module____qualname__r=   rB   rD    r/   r-   r3   r3   Y   sK        	 	 	 	       r/   r3   )r   r   r   r   r	   r   )

__future__r   typingr   numpyr   pandas.compat._optionalr   r1   r3   rH   r/   r-   <module>rM      s    " " " " " "                 > > > > > >L L L L^         r/   