
    hD                       S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  \(       a\  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S SK$J%r%  S SK&J'r'  S SK&J(r(  S SK&J)r)  \" S5      r*S8S  jr+    S9S! jr,S:S" jr-        S;S# jr.        S<S$ jr/ " S% S&\5      r0    S=S' jr1 " S( S)\5      r2    S>S* jr3 " S+ S,\5      r4 " S- S.5      r5          S?S/ jr6S@S0 jr7SAS1 jr8SBS2 jr9SCS3 jr:SDS4 jr;      SES5 jr<          SFS6 jr=g7)G    )annotations)Enum)auto)chain)TYPE_CHECKING)Any)Literal)Sequence)TypeVar)cast)is_narwhals_series)is_numpy_array)LengthChangingExprError)MultiOutputExpressionError)
ShapeError)is_compliant_expr)Never)TypeIs)CompliantExpr)CompliantFrameT)
AliasNames)CompliantExprAny)CompliantFrameAny)CompliantNamespaceAny)EagerNamespaceAny)	EvalNamesExpr)IntoExpr)NonNestedLiteral)_1DArrayTc                $    SSK Jn  [        X5      $ )z'Check whether `obj` is a Narwhals Expr.r   r   )narwhals.exprr   
isinstance)objr   s     N/var/www/html/env/lib/python3.13/site-packages/narwhals/_expression_parsing.pyis_exprr(   +   s    "c      c                 x   ^  [        T S   5      (       d  S[        T S   5       S3n[        U5      eSU 4S jjnU$ )Nr   z3Safety assertion failed, expected expression, got: z. Please report a bug.c                2   > TS   R                  U 5      S S $ Nr      )_evaluate_output_names)dfexprss    r'   evaluate_output_names<combine_evaluate_output_names.<locals>.evaluate_output_names;   s    Qx..r22A66r)   )r/   r   returnSequence[str])r   typeAssertionError)r0   msgr1   s   `  r'   combine_evaluate_output_namesr8   2   sD    
 U1X&&CDqNCSSijS!!7 ! r)   c                 :   ^  T S   R                   c  g SU 4S jjnU$ )Nr   c                2   > TS   R                  U 5      S S $ r,   _alias_output_names)namesr0   s    r'   alias_output_names6combine_alias_output_names.<locals>.alias_output_namesG   s    Qx++E22A66r)   )r=   r4   r3   r4   r;   )r0   r>   s   ` r'   combine_alias_output_namesr@   A   s%     Qx##+7 r)   c               |   [        U5      (       a  UR                  U 5      $ [        U[        5      (       a  U(       d  U R	                  U5      $ [        U5      (       a  UR                  R                  5       $ [        U5      (       a3  [        SU 5      nUR                  R                  XS9R                  5       $ U$ )Nr   )context)r(   _to_compliant_exprr%   strcolr   _compliant_series_to_exprr   r   _series
from_numpy)plxother
str_as_litnss       r'   extract_compliantrN   M   s     u~~'',,%jwwu~%  &&//11e%s+zz$$U$7@@BBLr)   c                j   U R                  U5      nU(       d  / / 4$ U R                  c  UOU R                  U5      nU(       ah  U R                  c   eU R                  R                  R	                  5       (       a0  [        [        X45       VVs/ s H  u  pVXR;  d  M  XV4PM     snn6 u  p4X44$ s  snnf N)r.   r<   	_metadataexpansion_kindis_multi_unnamedzip)exprr/   excludeoutput_namesaliasesxaliass          r'   !evaluate_output_names_and_aliasesr[   _   s     ..r2L2v ##+ 	%%l3 
 ~~)))>>((99;;$' %($>$>' QJ$>%!L   s   B/
B/
c                      \ rS rSrSr\" 5       r \" 5       r \" 5       r \" 5       r	 \" 5       r
 S	S jrS	S jrS	S jrS	S jrSrg)
ExprKindw   aQ  Describe which kind of expression we are dealing with.

Commutative composition rules are:
- LITERAL vs LITERAL -> LITERAL
- FILTRATION vs (LITERAL | AGGREGATION) -> FILTRATION
- FILTRATION vs (FILTRATION | TRANSFORM | WINDOW) -> raise
- (TRANSFORM | WINDOW) vs (...) -> TRANSFORM
- AGGREGATION vs (LITERAL | AGGREGATION) -> AGGREGATION
c                H    U [         R                  [         R                  1;   $ rP   )r]   	TRANSFORMWINDOWselfs    r'   preserves_lengthExprKind.preserves_length   s    **HOO<<<r)   c                &    U [         R                  L $ rP   )r]   ra   rb   s    r'   	is_windowExprKind.is_window   s    x&&r)   c                &    U [         R                  L $ rP   )r]   
FILTRATIONrb   s    r'   is_filtrationExprKind.is_filtration   s    x****r)   c                    [        U 5      $ rP   is_scalar_likerb   s    r'   ro   ExprKind.is_scalar_like   s    d##r)    Nr3   bool)__name__
__module____qualname____firstlineno____doc__r   LITERALAGGREGATIONr`   ra   rj   rd   rg   rk   ro   __static_attributes__rq   r)   r'   r]   r]   w   sS     fG&K#I6VF	 J)='+$r)   r]   c                H    U [         R                  [         R                  1;   $ rP   )r]   rz   ry   )kinds    r'   ro   ro      s      H(((*:*:;;;r)   c                  R    \ rS rSrSr\" 5       r \" 5       r \" 5       r SS jr	Sr
g)ExpansionKind   z8Describe what kind of expansion the expression performs.c                &    U [         R                  L $ rP   )r   MULTI_UNNAMEDrb   s    r'   rS   ExpansionKind.is_multi_unnamed   s    }2222r)   rq   Nrr   )rt   ru   rv   rw   rx   r   SINGLEMULTI_NAMEDr   rS   r{   rq   r)   r'   r   r      s(    BVF9&K!FM'3r)   r   c                H    U [         R                  [         R                  1;   $ rP   )r   r   r   )rR   s    r'   is_multi_outputr      s      m779T9TUUUr)   c                  v    \ rS rSrSr\" 5       r \" 5       r \" 5       r \" 5       r	 SS jr
SS jrSS jrSrg)	
WindowKind   z5Describe what kind of window the expression contains.c                H    U [         R                  [         R                  1;   $ rP   )r   UNCLOSEABLE	CLOSEABLErb   s    r'   is_openWindowKind.is_open   s    
..
0D0DEEEr)   c                &    U [         R                  L $ rP   )r   CLOSEDrb   s    r'   	is_closedWindowKind.is_closed   s    z((((r)   c                &    U [         R                  L $ rP   )r   r   rb   s    r'   is_uncloseableWindowKind.is_uncloseable   s    z----r)   rq   Nrr   )rt   ru   rv   rw   rx   r   NONEr   r   r   r   r   r   r{   rq   r)   r'   r   r      sA    ?6D/Ig&K VF:F).r)   r   c                      \ rS rSrSr        SS jrSS jrSS jr\SS j5       r	\SS j5       r
\SS j5       rSS	 jrSS
 jrSS jrSS jr\SS j5       r\SS j5       r\SS j5       rSrg)ExprMetadata   )_expansion_kind_kind_window_kindc              (    Xl         X l        X0l        g rP   r   r   r   )rc   r}   window_kindrR   s       r'   __init__ExprMetadata.__init__   s      $
'-r)   c               8    SU R                   < 3n[        U5      e)NzCannot subclass )rt   	TypeError)clsargskwdsr7   s       r'   __init_subclass__ExprMetadata.__init_subclass__   s      01nr)   c                V    SU R                    SU R                   SU R                   S3$ )NzExprMetadata(kind: z, window_kind: z, expansion_kind: )r   rb   s    r'   __repr__ExprMetadata.__repr__   s2    $TZZL@Q@Q?RRdeieyeydzz{||r)   c                    U R                   $ rP   )r   rb   s    r'   r}   ExprMetadata.kind   s    zzr)   c                    U R                   $ rP   )r   rb   s    r'   r   ExprMetadata.window_kind   s       r)   c                    U R                   $ rP   )r   rb   s    r'   rR   ExprMetadata.expansion_kind   s    ###r)   c               @    [        UU R                  U R                  S9$ )z<Change metadata kind, leaving all other attributes the same.r   rR   )r   r   r   rc   r}   s     r'   	with_kindExprMetadata.with_kind  s$    ))//
 	
r)   c                    U R                   [        R                  L a  Sn[        U5      e[	        U R
                  [        R                  U R                  S9$ )z:Add uncloseable window, leaving other attributes the same.&Unreachable code, please report a bug.r   )r   r   r   r6   r   r}   r   r   )rc   r7   s     r'   with_uncloseable_window$ExprMetadata.with_uncloseable_window  sL    
 1 11:C %%II"..//
 	
r)   c                   U R                   [        R                  L a  [        R                  nO:U R                   [        R                  L a  Sn[        U5      e[        R                  n[        UUU R                  S9$ )zxChange metadata kind and add closeable window.

If we already have an uncloseable window, the window stays uncloseable.
r   r   )	r   r   r   r   r   r6   r   r   r   )rc   r}   r   r7   s       r'   with_kind_and_closeable_window+ExprMetadata.with_kind_and_closeable_window  sl    
 
/$..K*"3"33:C %%$00K#//
 	
r)   c               H    [        U[        R                  U R                  S9$ )z8Change metadata kind and set window kind to uncloseable.r   )r   r   r   r   r   s     r'    with_kind_and_uncloseable_window-ExprMetadata.with_kind_and_uncloseable_window(  s$    "..//
 	
r)   c                 l    [        [        R                  [        R                  [
        R                  S9$ Nr   )r   r]   r`   r   r   r   r   rq   r)   r'   selector_singleExprMetadata.selector_single0  s*     "(//
 	
r)   c                 l    [        [        R                  [        R                  [
        R                  S9$ r   )r   r]   r`   r   r   r   r   rq   r)   r'   selector_multi_named!ExprMetadata.selector_multi_named9  s*     "(44
 	
r)   c                 l    [        [        R                  [        R                  [
        R                  S9$ r   )r   r]   r`   r   r   r   r   rq   r)   r'   selector_multi_unnamed#ExprMetadata.selector_multi_unnamedB  s*     "(66
 	
r)   N)r}   r]   r   r   rR   r   r3   None)r   r   r   r   r3   r   )r3   rD   )r3   r]   )r3   r   )r3   r   )r}   r]   r3   r   )r3   r   )rt   ru   rv   rw   	__slots__r   r   r   propertyr}   r   rR   r   r   r   r   staticmethodr   r   r   r{   rq   r)   r'   r   r      s    <I
.
.
  
. &
. 

.}   ! ! $ $
	

$
 
 
 
 
 
 
r)   r   c                f   SnSnSnSn[         R                  nSn	Sn
Sn[        U5       GH  u  p[        U[        5      (       a  U (       d  SnM&  [        U5      (       d  M8  [        UR                  R                  5      (       a]  US:  a  U(       d  Sn[        U5      eU(       d<  US:X  a  UR                  R                  nO[        XR                  R                  5      nUR                  R                  nU[        R                  L a  SnOTU[        R                  L a  SnO>U[        R                  L a  US-  nO%UR!                  5       (       a  SnOSn[#        U5      eUR                  R$                  nU[&        R(                  L a  Sn
GMg  U[&        R*                  L a  Sn	GM  U[&        R,                  L d  GM  SnGM     U(       a&  U(       d  U(       d  U(       d  [        R                  nOnUS:  a  Sn[/        U5      eU(       a  U(       a  Sn[1        U5      eU(       a  [        R                  nO(U(       a  [        R2                  nO[        R                  nU
(       d  U	(       a  [&        R(                  nO(U(       a  [&        R,                  nO[&        R4                  n[7        UUUS	9$ )
aq  Combine metadata from `args`.

Arguments:
    args: Arguments, maybe expressions, literals, or Series.
    str_as_lit: Whether to interpret strings as literals or as column names.
    allow_multi_output: Whether to allow multi-output inputs.
    to_single_output: Whether the result is always single-output, regardless
        of the inputs (e.g. `nw.sum_horizontal`).
r   FTz]Multi-output expressions (e.g. nw.col('a', 'b'), nw.all()) are not supported in this context.r-   zunreachable codezXLength-changing expressions can only be used in isolation, or followed by an aggregationzVCannot combine length-changing expressions with length-preserving ones or aggregationsr   )r   r   	enumerater%   rD   r(   r   rQ   rR   r   resolve_expansion_kindr}   r]   rz   ry   rj   rd   r6   r   r   r   r   r   r   r   r`   r   r   )rL   allow_multi_outputto_single_outputr   n_filtrationshas_transforms_or_windowshas_aggregationshas_literalsresult_expansion_kindhas_closeable_windowshas_uncloseable_windowshas_closed_windowsiargr7   r}   r   result_kindresult_window_kinds                      r'   combine_metadatar   L  s>    M %L)00!#D/c3
(,%S\\s}};;<<q5!3=  5S99'Av030L0L-0F1==3O3O1- ==%%Dx+++#' )))#,,,"&&((,0)($S))--33Kj444*.'
 4 44(,%
 1 11%)"M "R 	 )&&		h%c**	4fo	))	"((**"7'33	'..'__!3DY r)   c                    U [         R                  L a#  U[         R                  L a  [         R                  $ SU  SU S3n[        U5      e)Nz+Unsupported ExpansionKind combination, got z and z, please report a bug.)r   r   r6   )lhsrhsr7   s      r'   r   r     sI    
m)))c]5P5P.P***7uE#F\
]C

r)   c                    [        XSSSS9$ )NTFrL   r   r   r   )r   r   s     r'   combine_metadata_binary_opr     s     Tee r)   c                     [        U SSSS.6$ )NFTr   r   )r0   s    r'   combine_metadata_horizontal_opr     s    	5TD r)   c                h   ^ SSK Jm  [        U4S jU 5       5      (       d  SU  S3n[        U5      eg )Nr   )Seriesc              3     >#    U  HT  n[        U5      =(       a$    UR                  R                  R                  5       =(       d    [	        U[
        T45      v   MV     g 7frP   )r(   rQ   r}   rd   r%   rD   ).0rY   r   s     r'   	<genexpr>4check_expressions_preserve_length.<locals>.<genexpr>  sN       A 
	;((99; 	(a#v'	(s   AAzBExpressions which aggregate or change length cannot be passed to 'z'.)narwhals.seriesr   allr   )function_namer   r7   r   s      @r'   !check_expressions_preserve_lengthr     sG     '    
 SS`Raacdor)   c                 X    [        XR                  5       5      n[        S U 5       5      $ )Nc              3     #    U  H;  n[        U5      =(       a$    UR                  R                  R                  5       v   M=     g 7frP   )r(   rQ   r}   ro   )r   rY   s     r'   r   ,all_exprs_are_scalar_like.<locals>.<genexpr>  s/     OAwqz?akk..==??s   AA)r   valuesr   )r   kwargsr0   s      r'   all_exprs_are_scalar_liker     s%     $(EOOOOr)   c                  [        U 5      (       a  U R                  R                  $ [        U 5      (       d,  [	        U 5      (       d  [        U [        5      (       a  U(       d  [        R                  $ [        R                  $ rP   )
r(   rQ   r}   r   r   r%   rD   r]   r`   ry   )r&   rL   s     r'   
infer_kindr     sZ     s||}}!!!3#sC  !!!r)   c                  ^ ^^ U U4S jU 5       nU Vs/ s H  n[        UTS9PM     nn[        S U 5       5      mU4S j[        XF5       5       nU" U6 $ s  snf )Nc              3  :   >#    U  H  n[        TUTS 9v   M     g7f)rL   N)rN   )r   	comparandrJ   rL   s     r'   r   (apply_n_ary_operation.<locals>.<genexpr>  s!      #I 	#yZ@#s   r   c              3  J   #    U  H  oR                  5       (       + v   M     g 7frP   rn   )r   r}   s     r'   r   r    s     @%$++---%s   !#c              3     >#    U  HA  u  pT(       a1  [        U5      (       a!  [        U5      (       a  UR                  U5      OUv   MC     g 7frP   )r   ro   	broadcast)r   compliant_exprr}   r  s      r'   r   r    sN       %@ N *>::~d?S?S 	  &	 %@s   A	A)r   anyrT   )rJ   functionrL   
comparandscompliant_exprsr  kindsr  s   ` `    @r'   apply_n_ary_operationr    sj    #O LVV:iZ	j9:EV@%@@I %($?	O _%% Ws   AN)r&   r   r3   zTypeIs[Expr])r0   z#CompliantExpr[CompliantFrameT, Any]r3   zEvalNames[CompliantFrameT])r0   r   r3   zAliasNames | None)rJ   r   rK   &IntoExpr | NonNestedLiteral | _1DArrayrL   rs   r3   z#CompliantExprAny | NonNestedLiteral)rU   r   r/   r   rV   r4   r3   z#tuple[Sequence[str], Sequence[str]])r}   r]   r3   z7TypeIs[Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]])rR   r   r3   zGTypeIs[Literal[ExpansionKind.MULTI_NAMED, ExpansionKind.MULTI_UNNAMED]])
r   zIntoExpr | object | NonerL   rs   r   rs   r   rs   r3   r   )r   r   r   r   r3   r   )r   r   r   r   r3   r   )r0   r   r3   r   )r   r   r   rD   r3   r   )r   r   r   r   r3   rs   )r&   r  rL   rs   r3   r]   )
rJ   r   r  r   r	  r  rL   rs   r3   r   )>
__future__r   enumr   r   	itertoolsr   typingr   r   r	   r
   r   r   narwhals.dependenciesr   r   narwhals.exceptionsr   r   r   narwhals.utilsr   typing_extensionsr   r   narwhals._compliantr   r   narwhals._compliant.typingr   r   r   r   r   r   r$   r   narwhals.typingr   r    r!   r"   r(   r8   r@   rN   r[   r]   ro   r   r   r   r   r   r   r   r   r   r   r   r  rq   r)   r'   <module>r     s   #           4 0 7 : * ,'(135;<@<4"(0(A!!/!!		1 	
 )$!
! 1!<I!(!0-$t -$`<
<<<3D 3 V!VLV. .:h
 h
V]#]] ] 	]
 ]@P	/@D&	&& 8& 	&
 &r)   