
    Owg                    X    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	y)	    )annotations)TYPE_CHECKINGN)import_optional_dependencyc                    t         rddlnt        d      j                  | ||      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 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)nopythonnogilparallelc           	        t        j                  | j                        }| d   j                         }	t        j                  |	       j                  t         j                        }
t        j                  |
|k\  |	t         j                        |d<   t        dt        |             D ]  }| |   }t        j                  |       }|
|j                  t         j                        z  }
j                  t        |            D ]  }t        j                  |	|         se||   s|r#||xx   |||dz
     z  z  cc<   ||   s?|	|   ||   k7  r ||   |	|   z  |||   z  z   ||   |z   z  |	|<   |r||xx   |z  cc<   zd||<   ||   s||   |	|<    t        j                  |
|k\  |	t         j                        ||<    ||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)valuesdeltasminimum_periodsold_wt_factornew_wtold_wtadjust	ignore_naresultweighted_avgnobsicuris_observationsjr   s                  P/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/core/window/online.pyonline_ewmaz4generate_online_numba_ewma_func.<locals>.online_ewma%   s   " &,,'ay~~',''//9HHT_4lBFFKq	q#f+& 	PA)C!xx}nOO**28844D\\#c(+ -xxQ0&q) q	]fQUm%CC	*1-+A#a&8%+AYa%@VcRSf_$U%+AY%739Q  & &q	V 3	,/q	$Q'&)!fLO#-& !8,OF1I/	P2 v~    )r   
np.ndarrayr   r,   r   intr   floatr   r.   r   r,   r    boolr!   r/   )r   r   r   jit)r   r	   r
   r*   r   s       @r)   generate_online_numba_ewma_funcr1   
   s    , *73
YYYA... . 	.
 . . . . B.` r+   c                  "    e Zd ZddZd ZddZy)EWMMeanStatec                    dd|z   z  }|| _         || _        || _        || _        |rdn|| _        d|z
  | _        t        j                  | j                  | j                   dz
           | _        d | _	        y )Nr   r   )
axisr   r    r!   r   r   r   onesr   last_ewm)selfcomr    r!   r5   r   alphas          r)   __init__zEWMMeanState.__init__Z   sk    sSy!	
"#c 5[ggdjjQ78r+   c           
          ||||| j                   | j                  | j                  | j                  | j                        \  }}|| _        |d   | _        |S )N)r   r   r   r    r!   r7   )r8   r#   r   min_periodsewm_funcr"   r   s          r)   run_ewmzEWMMeanState.run_ewme   sW    !KKKKKKNN	
 r
r+   c                z    t        j                  | j                  | j                  dz
           | _        d | _        y )Nr   )r   r6   r   r5   r   r7   )r8   s    r)   resetzEWMMeanState.resett   s*    ggdjjQ78r+   N)returnNone)__name__
__module____qualname__r;   r@   rB    r+   r)   r3   r3   Y   s    	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+   