
    Lpj                    R   % S SK Jr  S SKJrJr  S SKJrJrJrJ	r	  S SK
Jr  S SKJrJrJr  \(       a>  S SKJrJrJr  S SKJrJr  S SKJrJr  S S	KJrJrJrJrJr  S S
K J!r!  S SK"J#r#  S SK$J%r%J&r&J'r'  S+S jr(S,S jr)    S-S jr*S.S jr+        S/S jr, " S S\5      r-S0S jr. " S S\5      r/ " S S5      r0 " S S5      r1\-Rd                  \1Rf                  \-Rh                  \1Rj                  \-Rl                  \1Rn                  \-Rp                  \1Rj                  \-Rr                  \1Rt                  \-Rv                  \1Rx                  \-Rz                  \1R|                  \-R~                  \1R                  \-R                  \1Rj                  0	rBS\CS'   \-Rd                  \1R                  \-Rl                  \1R                  \-R                  \1R                  \-R                  \1R                  \-R                  \1R                  \-R                  \1R                  \-R                  \1R                  \-R                  \1R                  0rRS\CS'             S1S jrS      S2S  jrTS!S"S#S$.         S3S% jjrU          S4S& jrVS5S' jrWS6S( jrX        S7S) jrY      S8S* jrZg")9    )annotations)Enumauto)TYPE_CHECKINGAnyLiteralcast)is_numpy_array_1d)InvalidIntoExprErrorInvalidOperationErrorMultiOutputExpressionError)CallableIteratorSequence)NeverTypeIs)CompliantExprCompliantFrameT)
AliasNamesCompliantExprAnyCompliantFrameAnyCompliantNamespaceAny	EvalNamesExprSeries)IntoExprNonNestedLiteral_1DArrayc                $    SSK Jn  [        X5      $ )'Check whether `obj` is a Narwhals Expr.r   r   )narwhals.exprr   
isinstance)objr   s     X/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/narwhals/_expression_parsing.pyis_exprr'   #   s    "c      c                $    SSK Jn  [        X5      $ )r"   r   r   )narwhals.seriesr   r$   )r%   r   s     r&   	is_seriesr+   *   s    &c""r(   c                    ^  SU 4S jjnU$ )Nc                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_names6   s    Qx..r22A66r(   )r1   r   returnSequence[str] )r2   r3   s   ` r&   combine_evaluate_output_namesr8   1   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)namesr2   s    r&   alias_output_names6combine_alias_output_names.<locals>.alias_output_namesB   s    Qx++E22A66r(   )r=   r6   r5   r6   r;   )r2   r>   s   ` r&   combine_alias_output_namesr@   <   s%     Qx##+7 r(   c                B   U R                  U5      nU R                  =nb  U" U5      OUnU(       af  U R                  R                  R	                  5       (       a=  [        U5      n[        [        X5SS9 VVs/ s H  u  pxXv;  d  M  Xx4PM     snnSS06u  p5X54$ s  snnf )NT)strictrB   )r0   r<   	_metadataexpansion_kindis_multi_unnamed	frozensetzip)	exprr1   excludeoutput_namesalias_fnaliasesexclude_setxaliass	            r&   !evaluate_output_names_and_aliasesrP   H   s     ..r2L 000H= 	 
 4>>00AACC( # !$L$ G GHA' 
 G!
 !
   s   8B
B
c                  h   \ rS rSrSr\" 5       r \" 5       r \" 5       r \" 5       r	 \" 5       r
 \" 5       r \" 5       r \" 5       r \" 5       r \" 5       r \" 5       r \" 5       r \" 5       r \" 5       r \" 5       r \" 5       r \S	S j5       r\S	S j5       r\S	S j5       r\S	S j5       rSrg)
ExprKind^   z6Describe which kind of expression we are dealing with.c                    U [         R                  [         R                  [         R                  [         R                  1;   $ N)rR   ORDERABLE_WINDOWWINDOWORDERABLE_AGGREGATIONORDERABLE_FILTRATIONselfs    r&   is_orderableExprKind.is_orderable   s8     %%OO**))	
 
 	
r(   c           
        U [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  [         R                  [         R                  [         R                  1	;   $ rU   )
rR   ALLCOLELEMENTWISEEXCLUDELITERALNTHSELECTORSERIES	WHEN_THENrZ   s    r&   is_elementwiseExprKind.is_elementwise   s_     LLLL  LLOO

 

 
	
r(   c                n    U R                   =(       d#    U [        R                  [        R                  1;   $ rU   )rh   rR   rW   rV   rZ   s    r&   preserves_lengthExprKind.preserves_length   s'    ""Zdx@Y@Y.Z&ZZr(   c                f    U [         R                  [         R                  [         R                  1;   $ rU   )rR   AGGREGATIONrc   rX   rZ   s    r&   is_scalar_likeExprKind.is_scalar_like   s/      **
 
 	
r(   r7   Nr5   bool)__name__
__module____qualname____firstlineno____doc__r   rc   rn   rX   ra   rV   rW   
FILTRATIONrY   OVERr`   rd   rb   r_   re   rg   rf   propertyr\   rh   rk   ro   __static_attributes__r7   r(   r&   rR   rR   ^   s    @fG&KY FX&KgvHVFNJG6=6D5
&C(
&C(fG,
&C(vH>IPVF3
 
 
 
 [ [ 
 
r(   rR   c                .    U R                   R                  $ rU   )rC   ro   )r%   s    r&   ro   ro      s    =='''r(   c                  f    \ rS rSrSr\" 5       r \" 5       r \" 5       r SS jr	SS jr
S	S jrSrg)
ExpansionKind   z8Describe what kind of expansion the expression performs.c                &    U [         R                  L $ rU   r~   MULTI_UNNAMEDrZ   s    r&   rE   ExpansionKind.is_multi_unnamed   s    }2222r(   c                H    U [         R                  [         R                  1;   $ rU   )r~   MULTI_NAMEDr   rZ   s    r&   is_multi_outputExpansionKind.is_multi_output   s    11=3N3NOOOr(   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   AssertionError)r[   othermsgs      r&   __and__ExpansionKind.__and__   sI    =...5M<W<W3W ...;D6ugMcdS!!r(   r7   Nrq   )r   r~   r5   z$Literal[ExpansionKind.MULTI_UNNAMED])rs   rt   ru   rv   rw   r   SINGLEr   r   rE   r   r   r{   r7   r(   r&   r~   r~      s3    BVF9&K!FM'3P"r(   r~   c                      \ rS rSrSrSSSS.             SS jjrSS jrSS jrSS	 jr      SS
 jr	SS jr
SS jrSrg)ExprNode   a  An operation to create or modify an expression.

Parameters:
    kind: ExprKind of operation.
    name: Name of function, as defined in the compliant protocols.
    exprs: Expressifiable arguments to function.
    str_as_lit: Whether to interpret strings as literals when they
        are present in `exprs`.
    allow_multi_output: Whether to allow any of `exprs` to be multi-output.
    kwargs: Other (non-expressifiable) arguments to function.
r7   F)r2   
str_as_litallow_multi_outputc              h    Xl         X l        X0l        X`l        X@l        XPl        S U l        S U l        g rU   )kindnamer2   kwargsr   r   _is_orderable_cached_is_elementwise_cached)r[   r   r   r2   r   r   r   s          r&   __init__ExprNode.__init__   s5     #		<A
&, *(: 26!37#r(   c                   U R                   S:X  a+  SR                  S U R                  S    5       5      nSU S3$ / nSR                  S U R                   5       5      nSR                  S U R                  R	                  5        5       5      nU R                  (       a  UR                  U5        U R                  (       a  UR                  U5        U R                    S	SR                  U5       S3$ )
Ncolz, c              3  8   #    U  H  n[        U5      v   M     g 7frU   str.0rN   s     r&   	<genexpr>$ExprNode.__repr__.<locals>.<genexpr>   s     C.Bc!ff.B   r=   zcol()c              3  8   #    U  H  n[        U5      v   M     g 7frU   r   r   s     r&   r   r      s     9jc!ffjr   c              3  4   #    U  H  u  pU S U 3v   M     g7f)=Nr7   )r   keyvalues      r&   r   r     s     WCVZS3%q 0CVs   ()r   joinr   r2   itemsappend)r[   r=   arg_str	expr_reprkwargs_reprs        r&   __repr__ExprNode.__repr__   s    99IICdkk'.BCCE%?"II9djj99	iiW4;;CTCTCVWW::NN9%;;NN;'))Adii0133r(   c                    U R                   U R                  U R                  U R                  U R                  U R
                  S.$ )Nr   r   r2   r   r   r   r   rZ   s    r&   as_dictExprNode.as_dict  s:     IIIIZZkk//"&"9"9
 	
r(   c                    U R                   " U R                  U R                  4U R                  U R                  S.UD6$ )N)r2   r   )	__class__r   r   r2   r   )r[   r   s     r&   _with_kwargsExprNode._with_kwargs  s:    ~~IItyy
(,

t
RX
 	
r(   c                   / nUR                   S   nUR                   S   nU R                   H  n[        U5      (       d  UR                  U5        M&  U(       aC  [	        S UR
                   5       5      (       a"  UR                  UR                  U5      5        Mp  U(       aC  [        S UR
                   5       5      (       d"  UR                  UR                  U5      5        M  UR                  U5        M     X0l        g )Norder_bypartition_byc              3  @   #    U  H  oR                  5       v   M     g 7frU   r\   r   	expr_nodes     r&   r   9ExprNode._push_down_over_node_in_place.<locals>.<genexpr>#  s      ,:EY&&((+   c              3  @   #    U  H  oR                  5       v   M     g 7frU   rh   r   s     r&   r   r   '  s      4<Gy((**Kr   )r   r2   r'   r   any_nodes_with_over_nodeall)r[   	over_nodeover_node_without_order_byr2   over_node_order_byover_node_partition_byrH   s          r&   _push_down_over_node_in_place&ExprNode._push_down_over_node_in_place  s     46 '--j9!*!1!1.!AJJD4==T"# ,:>++, ) ) T11)<=' 4<@KK4 1 1 T112LMN T"  
r(   c                   U R                   ci  U R                  R                  (       a  SU l         U R                   $ [        S U R                   5       5      (       a  SU l         U R                   $ SU l         U R                   $ )NTc              3  ~   #    U  H3  n[        U5      (       d  M  [        S  UR                   5       5      v   M5     g7f)c              3  @   #    U  H  oR                  5       v   M     g 7frU   r   r   nodes     r&   r   2ExprNode.is_orderable.<locals>.<genexpr>.<genexpr>7  s     @KD%%''Kr   Nr'   r   r   r   rH   s     r&   r   (ExprNode.is_orderable.<locals>.<genexpr>6  s3      &D4= A@DKK@@@&   =#=F)r   r   r\   r   r2   rZ   s    r&   r\   ExprNode.is_orderable0  s    $$, yy%%,0) (((   JJ  
 -1) ((( -2)(((r(   c                   U R                   ci  U R                  R                  (       d  SU l         U R                   $ [        S U R                   5       5      (       a  SU l         U R                   $ SU l         U R                   $ )NFc              3  ~   #    U  H3  n[        U5      (       d  M  [        S  UR                   5       5      v   M5     g7f)c              3  J   #    U  H  oR                  5       (       + v   M     g 7frU   r   r   s     r&   r   4ExprNode.is_elementwise.<locals>.<genexpr>.<genexpr>G  s     F+$++---+s   !#Nr   r   s     r&   r   *ExprNode.is_elementwise.<locals>.<genexpr>F  s3      &D4= GF$++FFF&r   T)r   r   rh   r   r2   rZ   s    r&   rh   ExprNode.is_elementwise@  s    &&. 99++.3+ ***   JJ  
 /4+ *** /3+***r(   )r   r   r   r2   r   r   r   r   N)r   rR   r   r   r2   z%Sequence[IntoExpr | NonNestedLiteral]r   rr   r   rr   r   r   r5   Noner5   r   )r5   zdict[str, Any])r   r   r5   r   )r   r   r   r   r5   r   rq   )rs   rt   ru   rv   rw   r   r   r   r   r   r\   rh   r{   r7   r(   r&   r   r      s    
$ 8: #(88 8 58 8 !8 8 
8,4	


!?G	0) +r(   r   c                  >   \ rS rSrSrSrSSSSSSSS.                   S#S	 jjrS$S
 jrS%S jrS&S jr	\
      S'S j5       r        S(S jr\
      S'S j5       r\
S)S j5       r\
S)S j5       r\
S)S j5       r\
S)S j5       r\
S)S j5       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rS+S jr      S+S jrS+S jr      S'S  jr      S+S! jr S&S" jr!Sr"g),ExprMetadataiQ  a  Expression metadata.

Parameters:
    expansion_kind: What kind of expansion the expression performs.
    has_windows: Whether it already contains window functions.
    is_elementwise: Whether it can operate row-by-row without context
        of the other rows around it.
    is_literal: Whether it is just a literal wrapped in an expression.
    is_scalar_like: Whether it is a literal or an aggregation.
    n_orderable_ops: The number of order-dependent operations. In the
        lazy case, this number must be `0` by the time the expression
        is evaluated.
    preserves_length: Whether the expression preserves the input length.
    current_node: The current ExprNode in the linked list.
    prev: Reference to the previous ExprMetadata in the linked list (None for root).
)	current_noderD   has_windowsrh   
is_literalro   n_orderable_opsrk   prevFr   TN)r   r   rk   rh   ro   r   r   c                   U(       a	  U(       d   eXl         X l        X0l        XPl        X@l        X`l        Xpl        Xl        Xl        g rU   )	rD   r   r   rh   rk   ro   r   r   r   )
r[   rD   r   r   rk   rh   ro   r   r   r   s
             r&   r   ExprMetadata.__init__o  sC     !!>-;!,$3$2&6$2 *&2)-	r(   c               8    SU R                   < 3n[        U5      e)NzCannot subclass )rs   	TypeError)clsargskwdsr   s       r&   __init_subclass__ExprMetadata.__init_subclass__  s      01nr(   c                   [        [        [        U R                  5       5      5      5      nSU R                   SU R                   SU R
                   SU R                   SU R                   SU R                   SU R                   SU S	3$ )
Nz ExprMetadata(
  expansion_kind: z,
  has_windows: z,
  n_orderable_ops: z,
  is_elementwise: z,
  preserves_length: z,
  is_scalar_like: z,
  is_literal: z,
  nodes: z,
))
tuplereversediter_nodes_reversedrD   r   r   rh   rk   ro   r   )r[   nodess     r&   r   ExprMetadata.__repr__  s    huT%=%=%?@AB!!%!4!4 5 6"../ 0""&"6"6!7 8!!%!4!4 5 6##'#8#8"9 :!!%!4!4 5 6!__- .w 		
r(   c              #  V   #    U nUb   UR                   v   UR                  nUb  M  gg7f)z/Iterate through all nodes from current to root.Nr   r   )r[   currents     r&   r    ExprMetadata.iter_nodes_reversed  s-     '+!&&&llG !s   #))c                6    [         UR                     " U/UQ76 $ rU   )KIND_TO_METADATA_CONSTRUCTORr   r   r   compliant_exprss      r&   	from_nodeExprMetadata.from_node  s     ,DII6tNoNNr(   c                8    [         UR                     " XU/UQ76 $ rU   )KIND_TO_METADATA_UPDATERr   r[   r   compliant_exprcompliant_expr_argss       r&   	with_nodeExprMetadata.with_node  s'     (		2
)<
 	
r(   c                    [        USUS S.6$ NTto_single_outputr   r   combine_metadatar  s      r&   from_aggregationExprMetadata.from_aggregation        t$T
 	
r(   c           
     6    U " [         R                  SSSSUS S9$ )NTF)rh   rk   r   ro   r   r   r~   r   r   r   s     r&   from_literalExprMetadata.from_literal  s*      "
 	
r(   c                .    U " [         R                  US S9$ Nr   r  r  s     r&   from_seriesExprMetadata.from_series  s    =''dFFr(   c                    [        UR                  S   5      S:X  a  U " [        R                  US S9$ U R	                  U5      $ )Nr=   r/   r   lenr   r~   r   from_selector_multi_namedr  s     r&   from_colExprMetadata.from_col  sH    
 4;;w'(A- $$4dC	
 ..t4	
r(   c                    [        UR                  S   5      S:X  a  U " [        R                  US S9$ U R	                  U5      $ )Nindicesr/   r   r  r  s     r&   from_nthExprMetadata.from_nth  sH     4;;y)*a/ $$4dC	
 ..t4	
r(   c                .    U " [         R                  US S9$ r  )r~   r   r  s     r&   r!  &ExprMetadata.from_selector_multi_named  s     =,,4dKKr(   c                .    U " [         R                  US S9$ r  r   r  s     r&   from_selector_multi_unnamed(ExprMetadata.from_selector_multi_unnamed  s     =..TMMr(   c                    [        USUS S.6$ r  r  r  s      r&   from_elementwiseExprMetadata.from_elementwise  r  r(   c                T    U R                   (       + =(       a    U R                  (       + $ rU   )rk   ro   rZ   s    r&   is_filtrationExprMetadata.is_filtration  s    (((D1D1D-DDr(   c                    U R                   (       a  Sn[        U5      e[        U R                  U R                  U R
                  SSSSUU S9	$ )N4Can't apply aggregations to scalar-like expressions.FTr   r   rk   rh   ro   r   r   r   ro   r   r   rD   r   r   r[   r   _cer   s       r&   with_aggregationExprMetadata.with_aggregation  sU    HC',,(( 00" 

 
	
r(   c                    U R                   (       a  Sn[        U5      e[        U R                  U R                  U R
                  S-   SSSSUU S9	$ )Nr4  r/   FTr5  r6  r7  s       r&   with_orderable_aggregation'ExprMetadata.with_orderable_aggregation  s\     HC',,(( 0014" 

 
	
r(   c                8    [        U/UQ7SUUR                  S.6$ )NFr  )r  rC   r  s       r&   with_elementwiseExprMetadata.with_elementwise  s2      
 
 #))
 	
r(   c                    U R                   (       a  Sn[        U5      e[        U R                  U R                  U R
                  U R                  SSSUU S9	$ )Nz;Can't apply window (e.g. `rank`) to scalar-like expression.Fr5  ro   r   r   rD   r   r   rk   r7  s       r&   with_windowExprMetadata.with_window"  s]    OC',,(( !00!22  
 	
r(   c                    U R                   (       a  Sn[        U5      e[        U R                  U R                  U R
                  S-   U R                  SSSUU S9	$ )NzNCan't apply orderable window (e.g. `diff`, `shift`) to scalar-like expression.r/   Fr5  rB  r7  s       r&   with_orderable_window"ExprMetadata.with_orderable_window5  sb     bC',,(( 0014!22  

 
	
r(   c                   U R                   (       a  Sn[        U5      eU R                  (       d  U R                  (       a  Sn[        U5      eU R                  nU(       dA  [        U R                  5       5      R                  [        R                  La  Sn[        U5      e[        U R                  5       5      R                  R                  (       a  US:  a  US-  n[        U R                  SUSSSSUU S9	$ )	NCannot nest `over` statements.oCannot use `over` on expressions which are elementwise
(e.g. `abs`) or which change length (e.g. `drop_nulls`).aP  Cannot use `order_by` in `over` on expression which isn't orderable.
If your expression is orderable, then make sure that `over(order_by=...)`
comes immediately after the order-dependent expression.

Hint: instead of
  - `(nw.col('price').diff() + 1).over(order_by='date')`
write:
  + `nw.col('price').diff().over(order_by='date') + 1`
r   r/   TFr5  )r   r   rh   r1  r   nextop_nodes_reversedr   rR   rW   r\   r   rD   )r[   r   r8  r   r   s        r&   with_ordered_overExprMetadata.with_ordered_overH  s    2C',,$"4"4K  (,,..T++-.338??JK  (,,&&()..;;RS@Sq O+!  

 
	
r(   c                    U R                   (       a  Sn[        U5      eU R                  (       d  U R                  (       a  Sn[        U5      e[	        U R
                  SU R                  SSSSUU S9	$ )NrI  rJ  TFr5  )r   r   rh   r1  r   rD   r   r7  s       r&   with_partitioned_over"ExprMetadata.with_partitioned_overo  sz     2C',,$"4"4K  (,, 00!  

 
	
r(   c                    UR                   S   (       a  U R                  X5      $ UR                   S   (       d  Sn[        U5      eU R                  X5      $ )Nr   r   z?At least one of `partition_by` or `order_by` must be specified.)r   rM  r   rP  r7  s       r&   	with_overExprMetadata.with_over  sL    ;;z"))$44{{>*SC',,))$44r(   c                    U R                   (       a  Sn[        U5      e[        S U 5       5      n[        S U 5       5      n[	        U R
                  UUSSSSUU S9	$ )NECan't apply filtration (e.g. `drop_nulls`) to scalar-like expression.c              3  L   #    U  H  oR                   R                  v   M     g 7frU   )rC   r   r   s     r&   r   /ExprMetadata.with_filtration.<locals>.<genexpr>  s      R/Q!8!8/   "$c              3  L   #    U  H  oR                   R                  v   M     g 7frU   )rC   r   r   s     r&   r   rX    s     $Z/Q[[%@%@/rY  Fr5  )ro   r   r   sumr   rD   )r[   r   r  r   result_has_windowsresult_n_orderable_opss         r&   with_filtrationExprMetadata.with_filtration  sm     YC',,  R/ RR!$$Z/$Z!Z*2"  

 
	
r(   c                    U R                   (       a  Sn[        U5      e[        U R                  U R                  U R
                  S-   SSSSUU S9	$ )NrV  r/   Fr5  r6  r7  s       r&   with_orderable_filtration&ExprMetadata.with_orderable_filtration  s\     YC',,(( 0014"  

 
	
r(   c              #     #    U R                  5        H)  nUR                  R                  S5      (       a  M%  Uv   M+     g 7f)N)zname.rO   )r   r   
startswith)r[   r   s     r&   rL  ExprMetadata.op_nodes_reversed  s6     ,,.Dyy##$677J	 /s   ?A)rD   r~   r   rr   r   intrk   rr   rh   rr   ro   rr   r   rr   r   r   r   ExprMetadata | Noner5   r   )r   r   r   r   r5   r   r   )r5   zIterator[ExprNode])r   r   r  r   r5   r   )r   r   r  r   r	  r   r5   r   )r   r   r5   r   rq   )r   r   r8  r   r5   r   )#rs   rt   ru   rv   rw   	__slots__r   r   r   r   classmethodr  r
  r  r  r  r"  r&  r!  r+  r.  rz   r1  r9  r<  r?  rC  rF  rM  rP  rS  r^  ra  rL  r{   r7   r(   r&   r   r   Q  s   "
I  " !%#$ $(.%. 	.
 . . . . . . ". 
.2
# OO/?O	O O


 )
 /	

 

 

/?
	
 
 	
 	
 G G 
 
 
 
 L L N N 

/?
	
 
 E E
 

#3
	
&

 )
 /	

 


&

#3
	
&%
N

#3
	
05

0@
	
(

#3
	
$r(   r   z2dict[ExprKind, Callable[[ExprNode], ExprMetadata]]r   z+dict[ExprKind, Callable[..., ExprMetadata]]r  c                &   SnSn[         R                  nSnSnUR                  R                  n	Sn
[	        U5       H  u  pUR
                  nUc   eUR                  R                  5       (       a  UR                  nU (       d  US:  a  Xn-  OUnX}R                  -  nXR                  -  nXR                  -  n	XR                  -  n
U[        UR                  5      -  nU[        UR                  5      -  nM     UR                  R                  =(       d    U[        U5      :H  nUR                  R                  =(       a    US:H  =(       a    U(       + nU(       a$  US:  d  XE-   [        U5      :  a  Sn[!        U5      e[#        UUUUU	UU
UUS9	$ )a-  Combine metadata from `args`.

Arguments:
    compliant_exprs: Expression arguments.
    to_single_output: Whether the result is always single-output, regardless
        of the inputs (e.g. `nw.sum_horizontal`).
    current_node: The current node being added.
    prev: ExprMetadata of previous node.
r   FTr/   zXLength-changing expressions can only be used in isolation, or followed by an aggregationr5  )r~   r   r   rh   	enumeraterC   rD   r   r   r   r   rf  r1  ro   r   rk   r   r   )r  r   r   r  n_filtrationsn_scalar_likeresult_expansion_kindr\  r]  result_is_elementwiseresult_is_literalicemetadatarD   result_is_scalar_likeresult_preserves_lengthr   s                     r&   r  r    s    MM)00(--<<?+<<###""2244%44N#>?!e): & 	222":"::!8!88000X3344X4455 ,$ )--<< _--  	** 	&Q	&%%  		 =O@T Th#C((&.0,,$!
 
r(   c                T    [        S U 5       5      (       d  SU  S3n[        U5      eg )Nc              3  L   #    U  H  oR                   R                  v   M     g 7frU   )rC   rk   r   s     r&   r   4check_expressions_preserve_length.<locals>.<genexpr>'  s     :T{{++TrY  zBExpressions which aggregate or change length cannot be passed to 'z'.)r   r   )function_namer   r   s      r&   !check_expressions_preserve_lengthrz     s6     :T:::RS`Raacd#C(( ;r(   FNT)r   backendallow_literalc               h   SSK JnJnJn  [	        U [
        5      (       a  U(       d  U" U 5      $ [        U 5      (       a  U" SXS9R                  5       $ [        U 5      (       a  U R                  5       $ [        U 5      (       a  U $ U(       d  [        R                  " [        U 5      5      eU" U 5      $ )Nr   )r   lit
new_series )r{  )narwhals.functionsr   r~  r  r$   r   r
   _to_exprr+   r'   r   from_invalid_typetype)argr   r{  r|  r   r~  r  s          r&   _parse_into_exprr  ,  s     87#sJ3x"c3<<>>~~||~s||
"44T#Y??s8Or(   c              '     #    U Hg  n[        XAU R                  S9R                  U 5      nU(       d6  UR                  R                  R                  5       (       a  Sn[        U5      eUv   Mi     g 7f)N)r   r{  z9Multi-output expressions are not allowed in this context.)r  _implementation_to_compliant_exprrC   rD   r   r   )nsr   r   r2   rH   retr   s          r&   evaluate_into_exprsr  B  sf      1C1C


R
  	 "cmm&B&B&R&R&T&TMC,S11	 s   A/A1c                     [        S U  5       5      n/ nU  H_  nU(       aD  [        U5      (       a4  UR                  5       nUR                  Ul        UR                  U5        MN  UR                  U5        Ma     U$ )Nc              3  B   #    U  H  n[        U5      (       + v   M     g 7frU   )ro   )r   rr  s     r&   r   &maybe_broadcast_ces.<locals>.<genexpr>S  s     E_rr***_s   )r   ro   	broadcastrC   _opt_metadatar   )r  r  resultsr  _compliant_exprs        r&   maybe_broadcast_cesr  R  si    E_EEI&(G)770>0H0H0JO,:,D,DO)NN?+NN>* * Nr(   c           	        U R                   S;   a(  [        XR                   5      " U R                  S   6 n/ nOSU R                   ;   a3  U R                   R                  S5      u  pE[        [        X5      U5      nO[        XR                   5      n[	        [        U R                  UU R                  U R                  S.66 n[        SU" U0 U R                  D65      n[        R                  " U /UQ76 nXrl        U$ )N>   r   rI   r=   .r  r   r   r   )r   getattrr   splitr  r  r2   r   r   r	   r   r  r  )r   r  rr  cesmodulemethodfuncmds           r&   evaluate_root_noder  `  s    yy&& R#T[[%9:$))!YY__S1NF72.7D2yy)D! ??#'#:#:	
 $dC&?4;;&?@				+s	+BIr(   c           
        U R                   n[        U /[        UR                  UUR                  UR
                  S.6Q76 tpUR                  " X/UQ76 nSUR                  ;   a3  UR                  R                  S5      u  pV[        [        X5      U5      nO[        XR                  5      n[        SU" U0 UR                  D65      nX8l        U$ )Nr  r  r   )rC   r  r  r2   r   r   r
  r   r  r  r	   r   r  )	r  r   r  r  r	  accessorr  r  r  s	            r&   evaluate_noder  z  s     &//B+>,	ZZ#66	

,(N 
d	A-@	AB
dii99??3/w~8&A~yy1
!4)<#L#L
MCJr(   c                T    [        U S   U5      nU SS   H  n[        X#U5      nM     U$ r.   )r  r  )r   r  rr  r   s       r&   evaluate_nodesr    s5     
E!Hb	)Bab	2R( Ir(   )r%   r   r5   zTypeIs[Expr])r%   r   r5   zTypeIs[Series[Any]])r2   z#CompliantExpr[CompliantFrameT, Any]r5   zEvalNames[CompliantFrameT])r2   r   r5   zAliasNames | None)rH   r   r1   r   rI   r6   r5   z#tuple[Sequence[str], Sequence[str]])r%   r   r5   rr   )
r  r   r  rr   r   r   r   rg  r5   r   )r   r   ry  r   r5   r   )
r  &IntoExpr | NonNestedLiteral | _1DArrayr   rr   r{  r   r|  rr   r5   r   )
r2   r  r  r   r   rr   r   rr   r5   zIterator[CompliantExprAny])r  r   r5   zlist[CompliantExprAny])r   r   r  r   r5   r   )r  r   r   r   r  r   r5   r   )r   zSequence[ExprNode]r  r   r5   r   )[
__future__r   enumr   r   typingr   r   r   r	   narwhals.dependenciesr
   narwhals.exceptionsr   r   r   collections.abcr   r   r   typing_extensionsr   r   narwhals._compliantr   r   narwhals._compliant.typingr   r   r   r   r   r#   r   r*   r   narwhals.typingr   r   r    r'   r+   r8   r@   rP   rR   ro   r~   r   r   rn   r  r_   r+  ra   r.  rb   rf   r  r`   r"  rc   r  rd   r&  re   r   __annotations__r9  r?  rx   r^  rX   r<  rY   ra  ry   rS  rV   rF  rW   rC  r  r  rz  r  r  r  r  r  r  r7   r(   r&   <module>r     s  
 #  4 4 3  <</B  #&DD!#!/!!	!
! 1!<I!(!,X
t X
v("D "6v+ v+ri iZ ,77LL,::,77l>>OO\--LL,''l//LL,''|??
T P 
 ,77,7755""L$K$K!!<#I#IMM<))|AAOO\--	I E 	H&HH H 	H
 HV	)	),/	)		) 	/  	
  
,2  	
   4$,4:O0#8r(   