
    -Ph>                    *   d dl mZ d dlmZ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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m Z m!Z!m"Z" 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%d&S )(    )annotations)TYPE_CHECKINGSequence)	EagerExpr)!evaluate_output_names_and_aliases)PandasLikeGroupBy)PandasLikeSeries)generate_temporary_column_name)Self)
AliasNames	EvalNames
EvalSeriesScalarKwargs)ExprMetadata)PandasLikeDataFramePandasLikeNamespace)ImplementationVersion_FullContext)FillNullStrategyNonNestedLiteralPythonLiteral
RankMethodcumsumcummincummaxcumprodsummeanstdvarshiftrankdifffillna)cum_sumcum_mincum_maxcum_prod	cum_countrolling_sumrolling_meanrolling_stdrolling_varr#   r$   r%   	fill_nullfunction_namestrkwargsr   returndict[str, PythonLiteral]c                   | dk    rd|v sJ d|d         i}n| dk    r+d|v sJ d|v sJ |d         }|dk    rdn||d          d	d
d}n|                      d          rddi}n{|                      d          r+d|v sJ d|v sJ d|v sJ |d         |d         |d         d}n;| dv rd|v sJ d|d         i}n&| dk    rd|v sJ d|v sJ |d         |d         d}ni }|S )Nr#   nperiodsr$   method
descendingordinalfirstkeepF)r9   	ascending	na_optionpctcum_skipnaTrolling_min_sampleswindow_sizecenter)min_periodswindowrF   >   r!   r"   ddofr0   strategylimitrJ   rK   )
startswith)r1   r3   pandas_kwargs_methods       Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_pandas_like/expr.py"window_kwargs_to_pandas_equivalentrQ   .   s    f}}}}3<fSk2J	&	 	 6!!!!v%%%%"!(I!5!5gg7#L11	
 
 
	!	!&	)	) !4(		!	!*	-	- &&&&&&&&6!!!!!-0]+X&
 

 
.	(	(0	+	%	%V####&    %+J%7&/RR    c                      e Zd ZdddRdZdSdZdTdZedddUd#            ZedVd%            ZdWd/Z	dXd1Z
dYd3ZdZd7ZdXd8ZdXd9ZdXd:ZdXd;Zd[dBZd\dEZd\dFZd]dHZd]dIZd^dMZd_dPZd`dQZdS )aPandasLikeExprNscalar_kwargscall1EvalSeries[PandasLikeDataFrame, PandasLikeSeries]depthintr1   r2   evaluate_output_namesEvalNames[PandasLikeDataFrame]alias_output_namesAliasNames | Noneimplementationr   backend_versiontuple[int, ...]versionr   rV   ScalarKwargs | Noner4   Nonec                   || _         || _        || _        || _        || _        || _        || _        || _        |	pi | _        d | _	        d S N)
_call_depth_function_name_evaluate_output_names_alias_output_names_implementation_backend_version_version_scalar_kwargs	_metadata)
selfrW   rY   r1   r[   r]   r_   r`   rb   rV   s
             rP   __init__zPandasLikeExpr.__init__V   sY     
+&;##5 - /+1r.2rR   r   c                H    ddl m}  || j        | j        | j                  S )Nr   r   )rb   )narwhals._pandas_like.namespacer   rl   rm   rn   )rq   r   s     rP   __narwhals_namespace__z%PandasLikeExpr.__narwhals_namespace__n   s=    GGGGGG"" $"7
 
 
 	
rR   c                    d S rf    rq   s    rP   __narwhals_expr__z PandasLikeExpr.__narwhals_expr__u   s      rR    )r1   cls
type[Self]evaluate_column_namescontextr   r   c         
     T    dfd} | |d|d |j         |j        |j                  S )	Ndfr   r4   list[PandasLikeSeries]c                     	  fd            D             S # t           $ r)}                                           x}r|| d }~ww xY w)Nc                j    g | ]/}t          j        |         j        j        j                   0S ))r_   r`   rb   )r	   _native_framerl   rm   rn   ).0column_namer   s     rP   
<listcomp>zBPandasLikeExpr.from_column_names.<locals>.func.<locals>.<listcomp>   sV        $ %(5')'9(*(; "	    rR   )KeyError_check_columns_exist)r   eerrorr}   s   `  rP   funcz.PandasLikeExpr.from_column_names.<locals>.func   s        (='<R'@'@       334I4I"4M4MNNN5 'Q&s    
A$A		Ar   rY   r1   r[   r]   r_   r`   rb   r   r   r4   r   )rl   rm   rn   )r{   r}   r~   r1   r   s    `   rP   from_column_namesz PandasLikeExpr.from_column_namesw   s]    	 	 	 	 	 	  s'"7#"2#4$	
 	
 	
 		
rR   column_indicesc          
     z    d	fd} | |dd|                                d |j        |j        |j                  S )
Nr   r   r4   r   c                4      j          fdD             S )Nc                Z    g | ]'}t          j        j        d d |f                   (S )N)r~   )r	   from_nativeiloc)r   ir   natives     rP   r   zDPandasLikeExpr.from_column_indices.<locals>.func.<locals>.<listcomp>   sH        !,V[A->KKK  rR   )r   )r   r   r   s   `@rP   r   z0PandasLikeExpr.from_column_indices.<locals>.func   s<    YF    '   rR   r   nthr   r   )_eval_names_indicesrl   rm   rn   )r{   r~   r   r   s     ` rP   from_column_indicesz"PandasLikeExpr.from_column_indices   sk    	 	 	 	 	 	 s"%"9"9."I"I#"2#4$	
 	
 	
 		
rR   comfloat | Nonespan	half_lifealphaadjustboolrD   ignore_nullsc          
     <    |                      d|||||||          S )Newm_mean)r   r   r   r   r   rD   r   _reuse_series)rq   r   r   r   r   r   rD   r   s           rP   r   zPandasLikeExpr.ewm_mean   s9     !!#% " 	
 	
 		
rR   reversec               4    |                      dd|i          S )Nr'   r   rU   r   rq   r   s     rP   r'   zPandasLikeExpr.cum_sum        !!)Iw;O!PPPrR   r7   c                4    |                      dd|i          S )Nr#   r7   rU   r   )rq   r7   s     rP   r#   zPandasLikeExpr.shift   s    !!'#q!BBBrR   partition_bySequence[str]order_byc           
     |    ssJ d fd}n                                  sd}t          |          t          j                   t                              t          j                                                Pd dd	                    t                     d
d	                    t          j                   d}t          |          t           j	                  d fd} 
                    | j        dz    j        dz    j         j         j         j         j                  S )Nr   r   r4   Sequence[PandasLikeSeries]c                   t          d| j                  } |                     |          j        ddd}  |                     |gd                    }|                     |          }|D ]}|                    ||           |S )N   Fr:   
nulls_lastT)strict)r
   columnswith_row_indexsortdrop
get_column_scatter_in_place)r   tokenresultssorting_indicessr   rq   s        rP   r   z!PandasLikeExpr.over.<locals>.func   s    6q"*EE2R&&u--2%E   $rwwwtw<<=="$--"6"6  < <A'';;;;rR   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    rD                                }|                      |j        |                                            }                     d          rdj        v sJ j        d         }ndj        vsJ d}rt          t                    	                    |          	                                        }t          d|          }  | j        |                     |          j        ||d} |                     |          }n]|r[t          t                    	                    |                    } | j        |                     t!          d d d                    } | j                                      }                    d          rt |t          |                   j        di }	J d	v r2d
j        v sJ  t)          |	          j        d
                   }
n< t)          |	                      }
n"dk    rdj        v sJ dj        v sJ |t          |                   }j        d         dk    r"|                    j        d                   }
nj        d         dk    r"|                    j        d                   }
nd}t/          |          dk    rSt1          |          dk    rd}t3          |          |                    d                              |d                   }
n! |t          |                   j        fi }
|                     |
                              t=          t?          ||                              fd|D             }r|D ]}|                     ||           |S |rd |D             S |S )Nr+   rA   r   Fr   r   rolling>   r!   r"   rI   )rI   r0   rJ   rK   forward)rK   backwardzF`fill_null` with `over` without `strategy` specified is not supported.len   z)Safety check failed, please report a bug.sizer   c                :    g | ]}                     |          S rw   )r   )r   nameresult_frames     rP   r   z5PandasLikeExpr.over.<locals>.func.<locals>.<listcomp>1  s'    MMMT<22488MMMrR   c           	     V    g | ]&}|                     t          d d d                    'S )Nr   )_gather_sliceslice)r   r   s     rP   r   z5PandasLikeExpr.over.<locals>.func.<locals>.<listcomp>7  s0    TTTqAOOE$b,A,ABBTTTrR   rw   )!r   ru   with_columnscolis_nullrM   ro   listsetunionr
   simple_selectr   r   r   r   r   r   groupbyr   getattrffillbfillNotImplementedErrorr   AssertionError	transformto_frame_with_nativerenamedictzipr   )r   output_namesaliasesplxr   r   r   r   groupedr   
res_native
df_groupedmsgr   r   r   r1   r   pandas_function_namerN   r   rq   s                  @rP   r   z!PandasLikeExpr.over.<locals>.func   sf   (I$PRTV(W(W%g K//5577C'#'<*@*H*H*J*J)JKKB ++F33 $$(;;;;;"1)<GG$D,?????#G Y"3|#4#4#:#:<#H#H#N#Nx#X#XYYG:1gFFE(('2'..xGQ Q Q 
 ')mmE&:&:OO Y"3|#4#4#:#:<#H#HIIG))73AA%dTVBWBWXXB*22<@@ ++I66 Agd<&8&89ARRMRRG/;;;+~==%)<<<<<%KWW6J%K%K!%!4V!<& & &

 &LWW6J%K%K%M%M

"k11%)<<<<<"d&99999!(l););!<J*:6)CC%/%5%5D<OPW<X%5%Y%Y

,Z8JFF%/%5%5D<OPW<X%5%Y%Y

 g1#666"e++<((A--I,S111!(!2!26!:!:!C!CGAJ!O!OJJ!Fl););!<!F," "0=" "J  "z::AA\73344    NMMMWMMM #$ @ @++OQ????"N UTTGTTTTrR   r   z->overr   )r   r   r4   r   )_is_elementaryr   r   
_leaf_name%WINDOW_FUNCTIONS_TO_PANDAS_EQUIVALENTget_REMAP_AGGSjoinrQ   ro   	__class__rh   ri   rj   rk   rl   rm   rn   )rq   r   r   r   r   r1   r   rN   s   ```  @@@rP   overzPandasLikeExpr.over   s     j	 OOO	 	 	 	 	 	 	 	 $$&& [	_ 
 &c***-8>>M#H#L#L0<@@OO$ $  $+G] G G/3yy9^/_/_G G99%6%BCCG G G 
 *#...>t2 MD D D D D D D D D D DL ~~+/-8"&"=#7/ 1M  	
 	
 		
rR   c               4    |                      dd|i          S )Nr+   r   rU   r   r   s     rP   r+   zPandasLikeExpr.cum_countE  s     !!+i=Q!RRRrR   c               4    |                      dd|i          S )Nr(   r   rU   r   r   s     rP   r(   zPandasLikeExpr.cum_minH  r   rR   c               4    |                      dd|i          S )Nr)   r   rU   r   r   s     rP   r)   zPandasLikeExpr.cum_maxK  r   rR   c               4    |                      dd|i          S )Nr*   r   rU   r   r   s     rP   r*   zPandasLikeExpr.cum_prodN  s     !!*Y<P!QQQrR   valueSelf | NonNestedLiteralrJ   FillNullStrategy | NonerK   
int | Nonec                8    |                      d||d|          S )Nr0   rL   )rV   r   r   )rq   r   rJ   rK   s       rP   r0   zPandasLikeExpr.fill_nullQ  s1     !!Hu'M'MUZ " 
 
 	
rR   rE   rF   c               8    |                      d|||d          S )Nr,   rE   rD   rF   rU   r   rq   rE   rD   rF   s       rP   r,   zPandasLikeExpr.rolling_sum[  s5    !!**   " 
 
 	
rR   c               8    |                      d|||d          S )Nr-   r   rU   r   r   s       rP   r-   zPandasLikeExpr.rolling_meane  s5    !!**   " 
 
 	
rR   rI   c               :    |                      d||||d          S )Nr.   rE   rD   rF   rI   rU   r   rq   rE   rD   rF   rI   s        rP   r.   zPandasLikeExpr.rolling_stdo  :     !!** 	  " 
 
 	
rR   c               :    |                      d||||d          S )Nr/   r   rU   r   r  s        rP   r/   zPandasLikeExpr.rolling_var|  r  rR   r9   r   r:   c               6    |                      d||d          S )Nr$   )r9   r:   rU   r   )rq   r9   r:   s      rP   r$   zPandasLikeExpr.rank  s,    !!V:"N"N " 
 
 	
rR   basefloatc                0    |                      d|          S )Nlog)r  r   )rq   r  s     rP   r  zPandasLikeExpr.log  s    !!%d!333rR   c                ,    |                      d          S )Nexpr   rx   s    rP   r
  zPandasLikeExpr.exp  s    !!%(((rR   )rW   rX   rY   rZ   r1   r2   r[   r\   r]   r^   r_   r   r`   ra   rb   r   rV   rc   r4   rd   )r4   r   )r4   rd   )
r{   r|   r}   r\   r~   r   r1   r2   r4   r   )r   rZ   r~   r   r4   r   )r   r   r   r   r   r   r   r   r   r   rD   rZ   r   r   r4   r   )r   r   r4   r   )r7   rZ   r4   r   )r   r   r   r   r4   r   )r   r   rJ   r   rK   r   r4   r   )rE   rZ   rD   rZ   rF   r   r4   r   )
rE   rZ   rD   rZ   rF   r   rI   rZ   r4   r   )r9   r   r:   r   r4   r   )r  r  r4   r   )r4   r   )__name__
__module____qualname__rr   ru   ry   classmethodr   r   r   r'   r#   r   r+   r(   r)   r*   r0   r,   r-   r.   r/   r$   r  r
  rw   rR   rP   rT   rT   U   s        .23 3 3 3 3 30
 
 
 
 -,,,  !
 !
 !
 !
 !
 [!
F 
 
 
 [
&
 
 
 
,Q Q Q QC C C Cx
 x
 x
 x
tS S S SQ Q Q QQ Q Q QR R R R
 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

 
 
 

4 4 4 4) ) ) ) ) )rR   rT   r   N)r1   r2   r3   r   r4   r5   )&
__future__r   typingr   r   narwhals._compliantr   narwhals._expression_parsingr   narwhals._pandas_like.group_byr   narwhals._pandas_like.seriesr	   narwhals._utilsr
   typing_extensionsr   narwhals._compliant.typingr   r   r   r   r   narwhals._pandas_like.dataframer   rt   r   r   r   r   narwhals.typingr   r   r   r   r   rQ   rT   rw   rR   rP   <module>r     s   " " " " " " * * * * * * * * ) ) ) ) ) ) J J J J J J < < < < < < 9 9 9 9 9 9 : : : : : : &&&&&&ZZZZZZZZZZZZ999999CCCCCCCCCCCCEEEEEEEEEE             !) ) %($ $ $ $N}) }) }) }) })Y46FFG }) }) }) }) })rR   