
    `Vg                    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           	     l   t        j                  | j                        }| d   }	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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                  Z/var/www/html/hubwallet-dev/venv/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,OF1I1	P4 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_funcr0   
   s    , *73
YYYA/// / 	/
 / / / / B/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    r4   r   alphas          r(   __init__zEWMMeanState.__init__[   sk    sSy!	
"#c 5[ggdjjQ78r*   c           
          ||||| j                   | j                  | j                  | j                  | j                        \  }}|| _        |d   | _        |S )N)r   r   r   r   r    r6   )r7   r"   r   min_periodsewm_funcr!   r   s          r(   run_ewmzEWMMeanState.run_ewmf   sW    !KKKKKKNN	
 r
r*   c                z    t        j                  | j                  | j                  dz
           | _        d | _        y )Nr   )r   r5   r   r4   r   r6   )r7   s    r(   resetzEWMMeanState.resetu   s*    ggdjjQ78r*   N)returnNone)__name__
__module____qualname__r:   r?   rA    r*   r(   r2   r2   Z   s    	r*   r2   )r   r.   r	   r.   r
   r.   )

__future__r   typingr   numpyr   pandas.compat._optionalr   r0   r2   rG   r*   r(   <module>rL      s?    "    >MMM M` r*   