
    Wh9                    (   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ er:d 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 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")$    )annotations)TYPE_CHECKING)	EagerExpr)!evaluate_output_names_and_aliases)PandasLikeGroupBy)PandasLikeSeries)generate_temporary_column_name)Sequence)Self)
AliasNames	EvalNames
EvalSeriesScalarKwargs)ExprMetadata)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                r   | 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 | 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 i }|S )%Nr    nperiodsr!   method
descendingordinalfirstkeepF)r3   	ascending	na_optionpctcum_skipnaTrolling_min_sampleswindow_sizecenter)min_periodswindowr@   >   r   r   ddofr.   strategylimit)rD   rE   r$   interpolation)qrF   ewm_comspan	half_lifealphaadjustignore_nulls)rI   rJ   halfliferL   rM   rA   	ignore_na)
startswith)function_namekwargspandas_kwargs_methods       T/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_pandas_like/expr.py"window_kwargs_to_pandas_equivalentrW   -   s    f}}3<fSk2Jp o 
&	 6!!!v%%%"!(I!5g7#L11	
f [ 
	!	!&	)!4(X W 
	!	!*	-&&&&&&6!!!!-0]+X&
N E 
.	(0@ ? 
+	%V###&   %+J%7&/R8 7 
*	$V###&(((
##O4
0 ) 
	!	!&	)f$$$&   6!!!&&&''' %=6N{+G_X&!-0/
      c                      e Zd Zdd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZedd	 	 	 	 	 	 	 	 	 dd       Zedd       Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	Z	 	 	 	 	 	 dd
Z	y)PandasLikeExprNscalar_kwargsc                   || _         || _        || _        || _        || _        || _        || _        |xs i | _        d | _        y )N)	_call_depth_function_name_evaluate_output_names_alias_output_names_implementation_version_scalar_kwargs	_metadata)	selfcalldepthrR   evaluate_output_namesalias_output_namesimplementationversionr\   s	            rV   __init__zPandasLikeExpr.__init__n   sM     
+&;##5 -+1r.2rX   c                J    ddl m}  || j                  | j                        S )Nr   r   )rm   )narwhals._pandas_like.namespacer   rc   rd   )rg   r   s     rV   __narwhals_namespace__z%PandasLikeExpr.__narwhals_namespace__   s    G"4#7#7OOrX    )rR   c         	     V    dfd} | |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)rl   rm   )r   _native_framerc   rd   KeyError_check_columns_exist)dfcolumn_nameeerrorevaluate_column_namess       rV   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r   ri   rR   rj   rk   rl   rm   rx   r   returnzlist[PandasLikeSeries])rc   rd   )clsr|   contextrR   r}   s    `   rV   from_column_namesz PandasLikeExpr.from_column_names   s8    	 '"7#"22$$
 	
rX   c          	     t    dfd} | |d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)rx   r   icolumn_indicess      rV   r}   z0PandasLikeExpr.from_column_indices.<locals>.func   sH    YYF ( !,,V[[A->K  s   /Ar   nthr~   r   )_eval_names_indicesrc   rd   )r   r   r   r}   s     ` rV   from_column_indicesz"PandasLikeExpr.from_column_indices   sC    	 "%"9"9."I#"22$$
 	
rX   c               8    | j                  d|||||||d      S )Nr/   )rI   rJ   rK   rL   rM   r>   rN   r[   )_reuse_series)rg   rI   rJ   rK   rL   rM   r>   rN   s           rV   r/   zPandasLikeExpr.ewm_mean   s9     !!& * , " 
 	
rX   c           	     |    ssJ d fd}nω j                         sd}t        |      t        j                         t        j                  t        j                  j                              Gd ddj                  t               ddj                  t        j                         d}t        |      t         j                        d fd} j                  | j                  d	z    j                  d
z    j                   j                   j                   j                         S )Nc                   t        d| j                        } | j                  |d       j                  ddd}  | j	                  |gd            }| j                  |      }|D ]  }|j                  ||        |S )N   order_byFr4   
nulls_lastT)strict)r	   columnswith_row_indexsortdrop
get_column_scatter_in_place)rx   tokenresultssorting_indicessr   rg   s        rV   r}   z!PandasLikeExpr.over.<locals>.func   s    6q"**EAR&&ut&<AA%E rwwwtw<="$--"6  <A'';<rX   zOnly elementary expressions are supported for `.over` in pandas-like backends.

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

Supported functions are z, z
and .c           
        t        | g       \  }}dk(  r=j                         }| j                   |j                  | j	                                } j                  d      r dj                  v sJ j                  d   }ndj                  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            } | j"                  j%                        }j                  d	      rk |t        |         j&                  di }	J d
v r2dj                  v sJ  t)        |	      j                  d         }
n t)        |	             }
nj                  d      rj*                  j-                         rFj*                  j/                         dk  r)dj*                  j/                          d}t1        |       |t        |         j2                  di }J  t)        |             }
ndk(  rdj                  v sJ dj                  v sJ |t        |         }j                  d   dk(  r |j5                  j                  d         }
nj                  d   dk(  r |j7                  j                  d         }
npd}t1        |      dk(  r?t9        |      dk7  rd}t;        |      |j=                  d      j?                  |d         }
n |t        |         j<                  fi }
| jA                  |
      jC                  tE        tG        ||                  }|D cg c]  }|j                  |       }}r|D ]  }|jI                  |        |S |r*|D cg c]  }|j                  t!        d d d              c}S |S c c}w c c}w )Nr)   r;   reverseFr   r   r   rolling>   r   r   rC   )rC   ewm)      zpExponentially weighted calculation is not available in over context for pandas versions older than 1.2.0, found r   r.   rD   rE   forward)rE   backwardzF`fill_null` with `over` without `strategy` specified is not supported.lenr   z)Safety check failed, please report a bug.sizer    )%r   rq   with_columnscolis_nullrQ   re   listsetunionr	   simple_selectr   r   r   _gather_slicesliceru   groupbyr   getattrrc   	is_pandas_backend_versionNotImplementedErrorr   ffillbfillr   AssertionError	transformto_frame_with_nativerenamedictzipr   )rx   output_namesaliasesplxr   r   r   r   groupedr   
res_nativemsgr   
df_groupedresult_framenamer   r   rR   r   pandas_function_namerT   partition_byrg   s                     rV   r}   z!PandasLikeExpr.over.<locals>.func   s{   (I$PRTV(W%g K/557C'#''<*@*H*H*J)JKB ++F3$(;(;;;;"11)<G$D,?,????#G"3|#4#:#:<#H#N#Nx#XYG:1gFE((('2'=xGQ 
 ')mmE&:O"3|#4#:#:<#HIG)))73AA%dTVBWXB**22<@ ++I6Agd<&89AARMRG/;;;+~=%)<)<<<<%KWW6J%K!%!4!4V!<&
 &LWW6J%K%M
"--e4++557,,==?=SSWSgSgSxSxSzR{{|~  2#669'$|"4599JMJC/;;;!C.B!C!EJ"k1%)<)<<<<"d&9&9999!(l);!<J**:6)C%/%5%5D<O<OPW<X%5%Y
,,Z8JF%/%5%5D<O<OPW<X%5%Y
 g1#66"e+<(A-I,S11!(!2!26!:!C!CGAJ!OJ!Fl);!<!F!F,"0="J  "z:AA\734  FMMT<2248MM$ @++OQ?@"NLSTqAOOE$b,ABTT N Us   #Q #Qr   z->overr~   )rx   r   r   zSequence[PandasLikeSeries])_is_elementaryr   r   
_leaf_name%WINDOW_FUNCTIONS_TO_PANDAS_EQUIVALENTget_REMAP_AGGSjoinrW   re   	__class__r_   r`   ra   rb   rc   rd   )rg   r   r   r}   r   rR   r   rT   s   ```  @@@rV   overzPandasLikeExpr.over   sF     O8	 $$&_ 
 &c**-88>M#H#L#L0<<@@O$  $+,]O <//3yy9^/_.` a99%6%B%BCDAG 
 *#..>t22MP Pd ~~++/--8"&"="=#77//MM  
 	
rX   )rh   z1EvalSeries[PandasLikeDataFrame, PandasLikeSeries]ri   intrR   strrj   EvalNames[PandasLikeDataFrame]rk   zAliasNames | Nonerl   r   rm   r   r\   zScalarKwargs | Noner   None)r   r   )
r   z
type[Self]r|   r   r   r   rR   r   r   r   )r   r   r   r   r   r   )rI   float | NonerJ   r   rK   r   rL   r   rM   boolr>   r   rN   r   r   r   )r   Sequence[str]r   r   r   r   )
__name__
__module____qualname__rn   rq   classmethodr   r   r/   r   r   rX   rV   rZ   rZ   m   s<    .23?3 	3
 3  >3 .3 '3 3 +3 
3,P
   

=

 !
 
 

 
B 
 
$
 
 	

  
 
 
 
 
 

0C
)C
5BC
	C
rX   rZ   r   N)rR   r   rS   r   r   zdict[str, PythonLiteral])$
__future__r   typingr   narwhals._compliantr   narwhals._expression_parsingr   narwhals._pandas_like.group_byr   narwhals._pandas_like.seriesr   narwhals._utilsr	   collections.abcr
   typing_extensionsr   narwhals._compliant.typingr   r   r   r   r   narwhals._pandas_like.dataframer   rp   r   r   r   r   narwhals.typingr   r   rW   rZ   r   rX   rV   <module>r      s    "   ) J < 9 :(&ZZ9CCHH-  %) %,== ,==@l
Y46FFG l
rX   