
    eiTB                    @   d dl mZ d dlZd dlmZmZmZ d dlmZ d dl	m
Z
mZ d dlmZmZ d dlmZ d dlmZ d d	lmZ er4d d
lmZ d dlmZ d dlmZmZmZmZ d dlmZ d dl m!Z! d dlm"Z"m#Z#m$Z$ d dl%m&Z& ddddddddddddddddZ'	 	 	 	 	 	 d#dZ( G d  d!ed"ef         Z)y)$    )annotationsN)TYPE_CHECKINGAnycast)	EagerExpr)evaluate_nodes!evaluate_output_names_and_aliases)_REMAP_ORDERED_INDEXPandasLikeGroupBy)PandasLikeSeries)make_group_by_kwargs)generate_temporary_column_name)Sequence)Self)
AliasNames	EvalNames
EvalSeriesNarwhalsAggregation)PandasLikeDataFramePandasLikeNamespace)ImplementationVersion_LimitedContext)PythonLiteralcumsumcummincummaxcumprodsummeanstdvarshiftrankdifffillnaquantile)cum_sumcum_mincum_maxcum_prod	cum_countrolling_sumrolling_meanrolling_stdrolling_varr$   r%   r&   	fill_nullr(   ewm_meanc                   | dk(  rd|v sJ d|d   i}|S | dk(  r%d|v sJ d|v sJ |d   }|dk(  rdn||d    d	d
d}|S | j                  d      rddi}|S | dk(  rdd
i}|S | j                  d      r#d|v sJ d|v sJ d|v sJ |d   |d   |d   d}|S | dv rd|v sJ d|d   i}|S | dk(  rd|v sJ d|v sJ |d   |d   d}|S | dk(  rd|v sJ d|v sJ |d   |d   d}|S | j                  d      rKd |v sJ d!|v sJ d"|v sJ d#|v sJ d$|v sJ d|v sJ d%|v sJ |d    |d!   |d"   |d#   |d$   |d   |d%   d&}|S | d'v r5|j                  d%      rd(}t        |      dt        t	        d)|          i}|S i }|S )*Nr$   nperiodsr%   method
descendingordinalfirstkeepF)r7   	ascending	na_optionpctcum_skipnaTn_uniquedropnarolling_min_sampleswindow_sizecenter)min_periodswindowrF   >   r"   r#   ddofr2   strategylimit)rJ   rK   r(   interpolation)qrL   ewm_comspan	half_lifealphaadjustignore_nulls)rO   rP   halfliferR   rS   rG   	ignore_na>   lastr:   	any_valueza`Expr.any_value(ignore_nulls=True)` is not supported in a `over` context for pandas-like backend.r   )
startswithgetNotImplementedErrorr
   r   )function_namekwargspandas_kwargs_methodmsgs        \/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/narwhals/_pandas_like/expr.py"window_kwargs_to_pandas_equivalentrb   3   s    f}}3<fSk2JH G 
&	 6!!!v%%%"!(I!5g7#L11	
~ s 
	!	!&	)!4(p o 
*	$!5)l k 
	!	!*	-&&&&&&6!!!!-0]+X&
b Y 
.	(0T S 
+	%V###&   %+J%7&/RL K 
*	$V###&(((
##O4
D = 
	!	!&	)f$$$&   6!!!&&&''' %=6N{+G_X&!-0/
*  
8	8::n%3  &c**%d+@-&PQ

      c                      e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 d	dZd
dZe	 	 	 	 	 	 	 	 dd       Zedd       Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ		 	 	 	 	 	 ddZ
y)PandasLikeExprc               J    || _         || _        || _        || _        || _        y )N)_call_evaluate_output_names_alias_output_names_implementation_version)selfcallevaluate_output_namesalias_output_namesimplementationversions         ra   __init__zPandasLikeExpr.__init__   s*     
&;##5 -rc   c                J    ddl m}  || j                  | j                        S )Nr   r   )rq   )narwhals._pandas_like.namespacer   rj   rk   )rl   r   s     ra   __narwhals_namespace__z%PandasLikeExpr.__narwhals_namespace__   s    G"4#7#7OOrc   c              R    dfd} | |d |j                   |j                        S )Nc                    	  |       D cg c]1  }t        | j                  |   | j                  | j                        3 c}S c c}w # t        $ r"}| j                   |             x}r|| d }~ww xY w)N)rp   rq   )r   _native_framerj   rk   KeyError_check_columns_exist)dfcolumn_nameeerrorevaluate_column_namess       ra   funcz.PandasLikeExpr.from_column_names.<locals>.func   s     (=R'@ $ %((5')'9'9 "    334I"4MNN5NQ&s(   
A 6AA A 	A6A11A6rn   ro   rp   rq   r{   r   returnzlist[PandasLikeSeries])rj   rk   )clsr   contextr   s    `  ra   from_column_namesz PandasLikeExpr.from_column_names   s2    	 "7#"22$$
 	
rc   c               p    dfd} | || j                        d |j                  |j                        S )Nc                    | j                   }D cg c]*  }t        j                  |j                  d d |f   |       , c}S c c}w )N)r   )nativer   from_nativeiloc)r{   r   icolumn_indicess      ra   r   z0PandasLikeExpr.from_column_indices.<locals>.func   sH    YYF ( !,,V[[A->K  s   /Ar   r   )_eval_names_indicesrj   rk   )r   r   r   r   s     ` ra   from_column_indicesz"PandasLikeExpr.from_column_indices   s=    	 "%"9"9."I#"22$$
 	
rc   c          
     4    | j                  d|||||||      S )Nr3   )rO   rP   rQ   rR   rS   rD   rT   )_reuse_series)rl   rO   rP   rQ   rR   rS   rD   rT   s           ra   r3   zPandasLikeExpr.ewm_mean   s4     !!#% " 	
 		
rc   c                     d fd} j                  | j                   j                   j                   j                        S )Nc           
     4   t        d| j                        } | j                  |d       j                  ddd}  	| j	                  |gd            }	j
                  }||j                  ry| j                  j                  }	j                  j                         }|D cg c]=  }|j                  |j                  |j                         ||j                              ? c}S | j                  |      }|D ]  }|j!                  ||        |S c c}w )N   order_byFr8   
nulls_lastT)strict)indexname)r   columnswith_row_indexsortdrop	_metadatais_scalar_liker   r   rj   to_native_namespace_with_nativeSeriesitemr   
get_column_scatter_in_place)
r{   tokenresultsmetar   nsssorting_indicesr   rl   s
           ra   r   z7PandasLikeExpr._over_without_partition_by.<locals>.func   s	   21bjjAE=""54"8==eB 277E74789G>>DD$7$7 		))==? % NN299QVVXU9#PQ 
 !mmE2O 8##OQ78Ns   $ADr   r{   r   r   zSequence[PandasLikeSeries])	__class__rh   ri   rj   rk   )rl   r   r   s   `` ra   _over_without_partition_byz)PandasLikeExpr._over_without_partition_by   sE    	, ~~"&"="=#77//MM  
 	
rc   c           
         	
 ssJ  j                        S  j                  r/j                  #j                  j                  sd}t	        |      t        t        t         j                  j                                           		d   }|j                  t        j                  j                  t        d            }t        j                  |      

Gd ddj                  t               ddj                  t        j                         d}t	        |      |j                  t!              d	
 f	d	} j#                  | j$                   j&                   j(                   j*                  
      S )NzOnly elementary expressions are supported for `.over` in pandas-like backends when `partition_by` is specified.

Please see: https://narwhals-dev.github.io/narwhals/concepts/improve_group_by_operation/r   zUnsupported function: z- in `over` context.

Supported functions are z, z
and .c           
     	  	 J j                         }j                  (| j                  t        dt	        d d |                  } t        | g       \  }}dk(  r-| j                   |j                  | j                                } j                  d      rdv sJ d   }ndvsJ d}rt        t              j                  |      j                              }t        d|      }  | j                  | j                  |d       j                  ||d	} | j!                  |      }nN|rLt        t              j                  |            } | j                  | j#                  t%        d d d            } t'        d
      } | j(                  j*                  fi |}	j                  d      rS |	t        |         j,                  d&i }
dv rdv sJ  t/        |
      d         }n" t/        |
             }nj                  d      rj0                  j3                         rFj0                  j5                         dk  r)dj0                  j5                          d}t7        |       |	t        |         j8                  d&i }J  t/        |             }nidk(  redv sJ dv sJ |	t        |         }d   dk(  r|j;                  d         }n+d   dk(  r|j=                  d         }nd}t7        |      dk(  r?t?        |      dk7  rd}tA        |      |	jC                  d      jE                  |d         }ndv rtG        jH                         5  tG        jJ                  d d!"        t/        |	g |         d&i }d d d        jM                  d#d#$       t              }| jN                  |   jQ                  ||%      t        |         }n |	t        |         jB                  fi }| jS                  |      }|D cg c]  }|j!                  |       }}rPtG        jH                         5  tG        jJ                  d d!"       |D ]  }|jU                  |        |cd d d        S |r*|D cg c]  }|j#                  t%        d d d              c}S |S # 1 sw Y   #xY wc c}w # 1 sw Y   IxY wc c}w )'Nre   r   r-   r?   reverseFr   r   r   )drop_null_keysrolling>   r"   r#   rI   )rI   ewm)      zpExponentially weighted calculation is not available in over context for pandas versions older than 1.2.0, found r   r2   rJ   rK   forward)rK   backwardzF`fill_null` with `over` without `strategy` specified is not supported.lenr   z)Safety check failed, please report a bug.sizer   >   rW   r:   rX   ignorez
.*copy of a slice)messageT)r   inplace)on )+ru   prevwith_columnsr   r   r	   colis_nullrY   listsetunionr   simple_selectr   r   r   _gather_sliceslicer   rx   groupbyr   getattrrj   	is_pandas_backend_versionr[   r   ffillbfillr   AssertionError	transformto_framewarningscatch_warningsfilterwarningsreset_indexr   merger   r   )r{   plx_aliasesr   r   r   r   group_by_kwargsgroupedr   
res_nativer`   r   
df_grouped_aggkeysresult_framer   r   r   r\   r   nodesr   pandas_function_namer^   partition_byscalar_kwargsrl   s                        ra   r   z!PandasLikeExpr.over.<locals>.func'  s:   '333--/Cyy$__)>%*c+JK ;4RHJAw+__gcggw&7&?&?&A%AB''/ M111'	2 555s<066w?EEhOP6q'B$B$$g.#^ED^9T8GM 
 #%--"6s<066w?@%R%%w/==eD$PR>ST2%HO.b&&..|OOG''	28'$w-088I=I'>9!]222!G2F!G*62"J "H2F!G!IJ))%0''113((99;9OOSOcOcOtOtOvNwwxz  .c220gd7m,00A=A+777?WS*>?A
+-!]222-///$T']3
 ,	9!+!1!1g8N!1!OJ":.*<!+!1!1g8N!1!OJ cC-c22%'w<1$EC(--$..v6??
K
"@@,,. '++H>ST7 9, 9 9:<P '%'D'   dD 9L)YYt_224D2A$w-P
=WT']3==(,9
 ??:6LAHI|..t4IGI,,. #++H>ST$ @++OQ?@"# # HOP1dD"(=>PPN1' ' J# # Qs$   ;1S3S#2S%#S+SS(r   r   )r   r   r   is_elementwiser[   r   reversediter_nodes_reversedr   r   _REMAP_AGGSrZ   r   %WINDOW_FUNCTIONS_TO_PANDAS_EQUIVALENTjoinr]   rb   r   rh   ri   rj   rk   )rl   r   r   r`   	leaf_node
pandas_aggr   r\   r   r   r   r^   r   s   ```    @@@@@@ra   overzPandasLikeExpr.over   s    O8228<< ~~TYY2499;S;S_  &c**Xd4>>#E#E#GHIJ"I	!&2266&6

  EHH: 
  '( 8++/995Z+[*\ ]yy!2!>!>?@C 
 &c**!((:=-X`	 `	D ~~"&"="=#77//MM  
 	
rc   N)rm   z1EvalSeries[PandasLikeDataFrame, PandasLikeSeries]rn   EvalNames[PandasLikeDataFrame]ro   zAliasNames | Nonerp   r   rq   r   r   None)r   r   )r   z
type[Self]r   r   r   r   r   r   )r   intr   r   r   r   )rO   float | NonerP   r   rQ   r   rR   r   rS   boolrD   r   rT   r   r   r   )r   Sequence[str]r   r   )r   r   r   r   r   r   )__name__
__module____qualname__rr   ru   classmethodr   r   r3   r   r   r   rc   ra   re   re      s    ?   >	 
 .  '    
 P
 

=

 !
 

 
< 
 
 
 
 	

  
 
 
 
 
 

, 
DS
)S
5BS
	S
rc   re   r   )r\   strr]   zdict[str, Any]r   zdict[str, PythonLiteral])*
__future__r   r   typingr   r   r   narwhals._compliantr   narwhals._expression_parsingr   r	   narwhals._pandas_like.group_byr
   r   narwhals._pandas_like.seriesr   narwhals._pandas_like.utilsr   narwhals._utilsr   collections.abcr   typing_extensionsr   narwhals._compliant.typingr   r   r   r   narwhals._pandas_like.dataframer   rt   r   r   r   r   narwhals.typingr   r   rb   re   r   rc   ra   <module>r     s    "  + + ) Z R 9 < :(&  DCHH-  %) %,II .IIXP
Y46FFG P
rc   