
    bi$                       d dl mZ d dlZd dlmZ d dlmZ d dlZd dl	m
Z d dlmZ d dlmZmZmZmZmZmZ d dlmZ  ed	d
g      Z	 	 d/dZ G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d d e      Z" G d! d"e      Z# G d# d$e      Z$ G d% d&e      Z% G d' d(e      Z& G d) d*e      Z' G d+ d,e      Z( G d- d.      Z
y)0    )annotationsN)
namedtuple)Integral)Rolling)new_collection)	BlockwiseExpr
MapOverlap
Projectiondetermine_column_projection	make_meta)derived_fromBlockwiseDepiterable)typenamefield_namesc                    | | j                   di |} |r| |   }  | j                  |fi |} t        ||      |i |xs i }	||	j                  d      S |	S )N)level )groupbyrollinggetattr
sort_index)
framewindowkwargshowhow_args
how_kwargsgroupby_kwargsgroupby_slicer   results
             \/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/dask_expr/_rolling.py_rolling_aggr%      s{     !//-(EemmF-f-G"WWc"HC1ArCF!  r **M    c                      e Zd ZU g dZddddddZdZded<   ej                  d        Z	d Z
ej                  d	        Zej                  d
        Zd Zed        Zd Zy)RollingReduction)r   r   r   r   r    r!   r"   Nr   r   r   r    r!   r"   z
str | Noner   c                .    | j                   j                  S N)r   npartitionsselfs    r$   r,   zRollingReduction.npartitions@   s    zz%%%r&   c                .    | j                   j                  S r+   )r   	divisionsr-   s    r$   
_divisionszRollingReduction._divisionsD   s    zz###r&   c           
         t        | j                  j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                        }t        |      S )Nr   r   r   r   r    r!   r"   )r%   r   _metar   r   r   r   r    r!   r"   r   )r.   metas     r$   r4   zRollingReduction._metaG   sZ    JJ;;;;]]..,,	
 r&   c                J    | j                  d      i S | j                  d      S )Nr   )operandr-   s    r$   r   zRollingReduction.kwargsU   s$    \\(+3rOh9OOr&   c                t   t        |t              r"| j                  r| j                  j                  dg       ng }t        |t              s|ng }t        | |||      }| j                  j                  D cg c]	  }||v s| }}|| j                  j                  k(  ry | j                  I t        |       t        |       | j                  |   g| j                  dd   g|j                  dd   S t        |      dk(  r|d   } t        |       | j                  |   g| j                  dd   S y c c}w )Nby   r   )
isinstancer   r!   getr	   r   r   columnstypeoperandslen)r.   parent
dependentsr9   
by_columnsr=   cols          r$   _simplify_upzRollingReduction._simplify_upY   s+   fj)6:6I6I$$((r2rB#-b$#7RJ1$
JWG&*jj&8&8KsC7NsKGK$**,,,"".#tF|DJtzz'2GT]]125FG__QR(  7|q !!*4:djj1FDMM!"4EFF * Ls   6	D5 D5c                    | j                   j                  d      dv xsF t        | j                  t              xr | j                  dk  xs | j
                  j                  dk(  S )Naxis)r:   r=   r:   )r   r<   r;   r   r   r   r,   r-   s    r$   _is_blockwise_opz!RollingReduction._is_blockwise_opj   sV     KKOOF#~5 +4;;1FdkkQ6F+zz%%*	
r&   c                   | j                   rlt        | j                  | j                  | j                  | j
                  t        | j                        | j                  | j                  | j                        S | j                  j                  d      r"| j                  dz  }| j                  |z
  dz
  }nMt        | j                  t              s"t        j                  | j                        }d}n| j                  dz
  }d}t!        | j                  t"        ||| j$                  dt'        | j                  | j                  | j
                  | j                  | j                  | j                  | j                              S )	N)r!   r"   center   r:   r   Tr3   )r   funcbeforeafterr5   enforce_metadatar   )rH   RollingAggregationr   r   r   r   listr   r    r!   r"   r<   r;   intpd	Timedeltar
   r%   r4   dict)r.   rM   rN   s      r$   _lowerzRollingReduction._lowerr   s'     %

T]]##22"00	 	 ;;??8$[[A%FKK&(1,EDKK-\\$++.FE[[1_FE**!{{{{HH??#22"00
 	
r&   )__name__
__module____qualname___parameters	_defaultsr   __annotations__	functoolscached_propertyr,   r1   r4   r   rE   propertyrH   rV   r   r&   r$   r(   r(   -   s    K I C& &$   P PG" 
 
'
r&   r(   c                  H    e Zd Zg dZ ee      Zej                  d        Z	y)rP   )r   r   r   r   r   r    r!   r"   c                .    | j                   j                  S r+   )r   r4   r-   s    r$   r4   zRollingAggregation._meta   s    zzr&   N)
rW   rX   rY   rZ   staticmethodr%   	operationr]   r^   r4   r   r&   r$   rP   rP      s-    	K \*I   r&   rP   c                      e Zd ZdZy)RollingCountcountNrW   rX   rY   r   r   r&   r$   re   re          
Cr&   re   c                      e Zd ZdZy)
RollingSumsumNrg   r   r&   r$   rj   rj          
Cr&   rj   c                      e Zd ZdZy)RollingMeanmeanNrg   r   r&   r$   rn   rn          
Cr&   rn   c                      e Zd ZdZy)
RollingMinminNrg   r   r&   r$   rr   rr      rl   r&   rr   c                      e Zd ZdZy)
RollingMaxmaxNrg   r   r&   r$   ru   ru      rl   r&   ru   c                      e Zd ZdZy)
RollingVarvarNrg   r   r&   r$   rx   rx      rl   r&   rx   c                      e Zd ZdZy)
RollingStdstdNrg   r   r&   r$   r{   r{      rl   r&   r{   c                      e Zd ZdZy)RollingMedianmedianNrg   r   r&   r$   r~   r~      s    
Cr&   r~   c                      e Zd ZdZy)RollingQuantilequantileNrg   r   r&   r$   r   r      s    
Cr&   r   c                      e Zd ZdZy)RollingSkewskewNrg   r   r&   r$   r   r      rp   r&   r   c                      e Zd ZdZy)RollingKurtkurtNrg   r   r&   r$   r   r      rp   r&   r   c                      e Zd ZdZd Zy)
RollingAggaggc                     y r+   r   )r.   rA   rB   s      r$   rE   zRollingAgg._simplify_up   s    r&   N)rW   rX   rY   r   rE   r   r&   r$   r   r      s    
Cr&   r   c                      e Zd ZdZy)RollingApplyapplyNrg   r   r&   r$   r   r      rh   r&   r   c                      e Zd ZdZy)
RollingCovcovNrg   r   r&   r$   r   r      rl   r&   r   c                     e Zd ZdZ	 	 	 	 	 ddZej                  d        ZddZ e	e
      d        Z e	e
      d        Z e	e
      d        Z e	e
      d	        Z e	e
      d
        Z e	e
      d        Z e	e
      d        Z e	e
      d        Z e	e
      d        Z e	e
      d        Z e	e
      d        Z e	e
      d        Z e	e
      d        Z e	e
      d        Zy)r   zAggregate using one or more operations

    The purpose of this class is to expose an API similar
    to Pandas' `Rolling` for dask-expr
    Nc                   |j                   d   %t        |j                         dkD  rd}t        |      || _        || _        || _        || _        || _        || _        || _	         |j                  j                  |fi | j                   y )Nr   rK   zCan only rolling dataframes with known divisions
See https://docs.dask.org/en/latest/dataframe-design.html#partitions
for more information.)r0   r@   
ValueErrorobjr   r!   r"   min_periodsrJ   win_typer4   r   r   )	r.   r   r   r!   r"   r   rJ   r   msgs	            r$   __init__zRolling.__init__   s     ==#CMM(:Q(>( 
 S/!,*&  			&0DKK0r&   c                Z    t        | j                  | j                  | j                        S )N)r   rJ   r   )rU   r   rJ   r   r-   s    r$   r   zRolling.kwargs  s$    ((t}}
 	
r&   c                    t         || j                  | j                  | j                  ||| j                  | j
                              S )Nr)   )r   r   r   r   r!   r"   )r.   expr_clsr   r    s       r$   _single_aggzRolling._single_agg  sD    {{!%#22"00

 
	
r&   c                2    | j                  t        ||      S N)r   r    )r   r   r.   argsr   s      r$   r   zRolling.cov!      
TfMMr&   c                :    | j                  t        |g||      S r   )r   r   r.   rL   r   r   s       r$   r   zRolling.apply%  s!    }t}QWXXr&   c                2    | j                  t        ||      S r   )r   re   r   s      r$   rf   zRolling.count)  s    tOOr&   c                2    | j                  t        ||      S r   )r   rj   r   s      r$   rk   zRolling.sum-  r   r&   c                2    | j                  t        ||      S r   )r   rn   r   s      r$   ro   zRolling.mean1      dvNNr&   c                2    | j                  t        ||      S r   )r   rr   r   s      r$   rs   zRolling.min5  r   r&   c                2    | j                  t        ||      S r   )r   ru   r   s      r$   rv   zRolling.max9  r   r&   c                2    | j                  t        ||      S r   )r   rx   r   s      r$   ry   zRolling.var=  r   r&   c                2    | j                  t        ||      S r   )r   r{   r   s      r$   r|   zRolling.stdA  r   r&   c                2    | j                  t        ||      S r   )r   r~   r   s      r$   r   zRolling.medianE  s    PPr&   c                :    | j                  t        |g||      S r   )r   r   )r.   qr   r   s       r$   r   zRolling.quantileI  s!    1*t*QWXXr&   c                2    | j                  t        ||      S r   )r   r   r   s      r$   r   zRolling.skewM  r   r&   c                2    | j                  t        ||      S r   )r   r   r   s      r$   r   zRolling.kurtQ  r   r&   c                :    | j                  t        |g||      S r   )r   r   r   s       r$   r   zRolling.aggU  s     
d]T]vVVr&   )NNNFN)r   N)rW   rX   rY   __doc__r   r]   r^   r   r   r   
pd_Rollingr   r   rf   rk   ro   rs   rv   ry   r|   r   r   r   r   r   r   r&   r$   r   r      s    18 
 


 *N N *Y Y *P P *N N *O O *N N *N N *N N *N N *Q Q *Y Y *O O *O O *W Wr&   r   )NN))
__future__r   r]   collectionsr   numbersr   pandasrS   pandas.core.windowr   r   $dask.dataframe.dask_expr._collectionr   dask.dataframe.dask_expr._exprr   r	   r
   r   r   r   
dask.utilsr   r   r%   r(   rP   re   rj   rn   rr   ru   rx   r{   r~   r   r   r   r   r   r   r   r&   r$   <module>r      s#   "  "   4 ?  $>
|L *l
t l
^   &# ! " ! ! ! ! $ & " " ! # ! lW lWr&   