
    hh@                    >   d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ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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'dS )*    )annotationsN)TYPE_CHECKINGcast)	EagerExpr)!evaluate_output_names_and_aliases)_REMAP_ORDERED_INDEXPandasLikeGroupBy)PandasLikeSeries)generate_temporary_column_name)Sequence)Self)
AliasNames	EvalNames
EvalSeriesNarwhalsAggregation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_meanfunction_namestrkwargsr   returndict[str, PythonLiteral]c                R   | 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}nA| dk    rdd
i}n5|                      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| dk    rd|v sJ d|v sJ |d         |d         d}n|                      d          r_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%|v sJ |d          |d!         |d"         |d#         |d$         |d         |d%         d&}n$| d'v rdt          t          d(|                    i}ni }|S ))Nr#   nperiodsr$   method
descendingordinalfirstkeepF)r;   	ascending	na_optionpctcum_skipnaTn_uniquedropnarolling_min_sampleswindow_sizecenter)min_periodswindowrJ   >   r!   r"   ddofr1   strategylimit)rN   rO   r'   interpolation)qrP   ewm_comspan	half_lifealphaadjustignore_nulls)rS   rT   halfliferV   rW   rK   	ignore_na>   lastr>   r   )
startswithr   r   )r3   r5   pandas_kwargs_methods       Q/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_pandas_like/expr.py"window_kwargs_to_pandas_equivalentr`   4   s    f}}}}3<fSk2J	&	 	 6!!!!v%%%%"!(I!5!5gg7#L11	
 
 
	!	!&	)	) 2!4(	*	$	$!5)		!	!*	-	- .&&&&&&&&6!!!!!-0]+X&
 

 
.	(	(0	+	%	%V####&    %+J%7&/RR	*	$	$V####&((((
##O4
 
 
	!	!&	)	) f$$$$&    6!!!!&&&&'''' %=6N{+G_X&!-0/
 
 
+	+	+%d+@-&P&PQ
     c                  j    e Zd Zddd1dZd2dZeddd3d             Zed4d"            Zd5d,Zd6d0Z	dS )7PandasLikeExprNscalar_kwargscall1EvalSeries[PandasLikeDataFrame, PandasLikeSeries]depthintr3   r4   evaluate_output_namesEvalNames[PandasLikeDataFrame]alias_output_namesAliasNames | Noneimplementationr   versionr   re   ScalarKwargs | Noner6   Nonec                   || _         || _        || _        || _        || _        || _        || _        |pi | _        d | _        d S )N)	_call_depth_function_name_evaluate_output_names_alias_output_names_implementation_version_scalar_kwargs	_metadata)	selfrf   rh   r3   rj   rl   rn   ro   re   s	            r_   __init__zPandasLikeExpr.__init__{   sQ     
+&;##5 -+1r.2ra   r   c                <    ddl m}  || j        | j                  S )Nr   r   )ro   )narwhals._pandas_like.namespacer   rx   ry   )r|   r   s     r_   __narwhals_namespace__z%PandasLikeExpr.__narwhals_namespace__   s/    GGGGGG""4#7OOOOra    )r3   cls
type[Self]evaluate_column_namescontextr   r   c         	     H    dfd} | |d|d |j         |j                  S )	Ndfr   r6   list[PandasLikeSeries]c                     	  fd            D             S # t           $ r)}                                           x}r|| d }~ww xY w)Nc                ^    g | ])}t          j        |         j        j                   *S ))rn   ro   )r
   _native_framerx   ry   ).0column_namer   s     r_   
<listcomp>zBPandasLikeExpr.from_column_names.<locals>.func.<locals>.<listcomp>   sP        $ %(5')'9 "    ra   )KeyError_check_columns_exist)r   eerrorr   s   `  r_   funcz.PandasLikeExpr.from_column_names.<locals>.func   s        (='<R'@'@       334I4I"4M4MNNN5 'Q&s    
A$A		Ar   rh   r3   rj   rl   rn   ro   r   r   r6   r   )rx   ry   )r   r   r   r3   r   s    `   r_   from_column_namesz PandasLikeExpr.from_column_names   sW    	 	 	 	 	 	 s'"7#"2$
 
 
 	
ra   column_indicesc          	     n    d	fd} | |dd|                                d |j        |j                  S )
Nr   r   r6   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     r_   r   zDPandasLikeExpr.from_column_indices.<locals>.func.<locals>.<listcomp>   sH        !,V[A->KKK  ra   )r   )r   r   r   s   `@r_   r   z0PandasLikeExpr.from_column_indices.<locals>.func   s<    YF    '   ra   r   nthr   r   )_eval_names_indicesrx   ry   )r   r   r   r   s     ` r_   from_column_indicesz"PandasLikeExpr.from_column_indices   se    	 	 	 	 	 	 s"%"9"9."I"I#"2$
 
 
 	
ra   rS   float | NonerT   rU   rV   rW   boolrH   rX   c               @    |                      d|||||||d          S )Nr2   )rS   rT   rU   rV   rW   rH   rX   rd   )_reuse_series)r|   rS   rT   rU   rV   rW   rH   rX   s           r_   r2   zPandasLikeExpr.ewm_mean   sC     !!& * ,  " 
 
 	
ra   partition_bySequence[str]order_byc           	     p    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                  S )Nr   r   r6   Sequence[PandasLikeSeries]c                   t          d| j                  } |                     |d           j        ddd}  	|                     |gd                    }	j        }|;|j        r4| j        j        	j	        
                                fd|D             S |                     |          }|D ]}|                    ||           |S )N   r   Fr<   
nulls_lastT)strictc           	         g | ]D}|                                         |                                |j                             ES ))indexname)_with_nativeSeriesitemr   )r   sr   nss     r_   r   z5PandasLikeExpr.over.<locals>.func.<locals>.<listcomp>   sQ        ryyQVy'T'TUU  ra   )r   columnswith_row_indexsortdropr{   is_scalar_liker   r   rx   to_native_namespace
get_column_scatter_in_place)
r   tokenresultsmetasorting_indicesr   r   r   r   r|   s
         @@r_   r   z!PandasLikeExpr.over.<locals>.func   s   6q"*EEAR&&ut&<<A%E   $rwwwtw<<==~#(;# IOE-AACCB    !(   
 #%--"6"6  < <A'';;;;ra   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                .   J 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        |                     |d           j        ||d} |                     |          }n]|r[t          t                    	                    |                    } | j        |                     t!          d d d                    } | j                                      }                    d	          rp |t          |                   j        d&i }	d
v r2dj        v sJ  t)          |	          j        d                   }
n t)          |	                      }
n                    d          rj                                        rIj                                        dk     r,dj                                         d}t1          |           |t          |                   j        d&i }J  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                   }
nWd}t1          |          dk    rSt9          |          dk    rd}t;          |          |                    d                              |d                   }
ndv rtA          j!                    5  tA          j"        dd             t)          |g |                   d&i }d d d            n# 1 swxY w Y   |#                    d!d!"           | j$        t                             %                    |t                    #          t          |                   }
n! |t          |                   j        fi }
| &                    |
          '                    tQ          tS          ||                              fd$|D             }r^tA          j!                    5  tA          j"        dd            |D ]}|*                    ||           |cd d d            S # 1 swxY w Y   |rd% |D             S |S )'Nr,   rC   reverseFr   r   r   rolling>   r!   r"   rM   )rM   ewm)      zpExponentially weighted calculation is not available in over context for pandas versions older than 1.2.0, found r   r1   rN   rO   forward)rO   backwardzF`fill_null` with `over` without `strategy` specified is not supported.lenr   z)Safety check failed, please report a bug.sizer   >   r[   r>   ignorez
.*copy of a slice)messageT)r   inplace)onc                :    g | ]}                     |          S  )r   )r   r   result_frames     r_   r   z5PandasLikeExpr.over.<locals>.func.<locals>.<listcomp>k  s'    MMMT<22488MMMra   c           	     V    g | ]&}|                     t          d d d                    'S )Nr   )_gather_sliceslice)r   r   s     r_   r   z5PandasLikeExpr.over.<locals>.func.<locals>.<listcomp>t  s0    TTTqAOOE$b,A,ABBTTTra   r   )+r   r   with_columnscolis_nullr\   rz   listsetunionr   simple_selectr   r   r   r   r   r   groupbyr   getattrrx   	is_pandas_backend_versionNotImplementedErrorr   ffillbfillr   AssertionError	transformto_framewarningscatch_warningsfilterwarningsreset_indexr   merger   renamedictzipr   )r   output_namesaliasesplxr   r   r   r   groupedr   
res_nativemsgr   
df_grouped_nthr   r   r   r3   r   pandas_function_namer]   r   r|   s                    @r_   r   z!PandasLikeExpr.over.<locals>.func  s   +777(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 5Agd<&8&89ARRMRRG+~==%)<<<<<%KWW6J%K%K!%!4V!<& & &

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

"--e44 ,+5577 7,==??= =~SWSgSxSxSzSz~ ~ ~  2#6669'$|"4"459JJMJJC/;;;!C.B!C!C!E!EJJ"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"&777!022 + + /BWXXXX w#$Bl$B\$BCEY     +  +) +  ++ + + + + + + + + + + + + + + $$$$===!#4+=+=!>!D!Dl!3!3 "E " "<(("*JJ "Gl););!<!F," "0=" "J  "z::AA\73344    NMMMWMMM '!022 ' ' /BWXXXX!( D DA//CCCC&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '  UTTGTTTTs$    7QQ
Q<3U<<V V r   z->overr   )r   r   r6   r   )_is_elementaryr   r	   
_leaf_name%WINDOW_FUNCTIONS_TO_PANDAS_EQUIVALENTget_REMAP_AGGSjoinr`   rz   	__class__rt   ru   rv   rw   rx   ry   )r|   r   r   r   r   r3   r   r]   s   ```  @@@r_   overzPandasLikeExpr.over   s     O	 OOO       * $$&& u	_ 
 &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^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^@ ~~+/-8"&"=#7/M  
 
 	
ra   )rf   rg   rh   ri   r3   r4   rj   rk   rl   rm   rn   r   ro   r   re   rp   r6   rq   )r6   r   )
r   r   r   rk   r   r   r3   r4   r6   r   )r   ri   r   r   r6   r   )rS   r   rT   r   rU   r   rV   r   rW   r   rH   ri   rX   r   r6   r   )r   r   r   r   r6   r   )
__name__
__module____qualname__r}   r   classmethodr   r   r2   r  r   ra   r_   rc   rc   z   s         .23 3 3 3 3 3,P P P P
   
 
 
 
 
 [
B 
 
 
 [
$
 
 
 
0\
 \
 \
 \
 \
 \
ra   rc   r   )r3   r4   r5   r   r6   r7   )(
__future__r   r   typingr   r   narwhals._compliantr   narwhals._expression_parsingr   narwhals._pandas_like.group_byr   r	   narwhals._pandas_like.seriesr
   narwhals._utilsr   collections.abcr   typing_extensionsr   narwhals._compliant.typingr   r   r   r   r   r   narwhals._pandas_like.dataframer   r   r   r   r   r   narwhals.typingr   r   r`   rc   r   ra   r_   <module>r     s   " " " " " "  & & & & & & & & ) ) ) ) ) ) J J J J J J R R R R R R R R 9 9 9 9 9 9 : : : : : : .((((((&&&&&&              :99999CCCCCCCCCCCCHHHHHHHHHH------  %) ) %,C C C CLE
 E
 E
 E
 E
Y46FFG E
 E
 E
 E
 E
ra   