
    -Ph$U                       d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZmZ erAd dlmZmZ d d	lmZmZ d d
lmZ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*m+Z+m,Z,  ed          Z-dDdZ.dEdZ/dFdZ0dGdZ1dHd$Z2dId+Z3 G d, d-e          Z4dJd/Z5 G d0 d1e          Z6 G d2 d3          Z7dKd8Z8dLd=Z9dMd?Z:dNdBZ;dCS )O    )annotations)Enumauto)chain)TYPE_CHECKINGAnyLiteralSequenceTypeVarcast)is_compliant_expr)is_narwhals_seriesis_numpy_array)InvalidOperationErrorLengthChangingExprErrorMultiOutputExpressionError
ShapeError)NeverTypeIs)CompliantExprCompliantFrameT)
AliasNamesCompliantExprAnyCompliantFrameAnyCompliantNamespaceAnyEagerNamespaceAny	EvalNamesExprSeries)IntoExprNonNestedLiteral_1DArrayTobjr   returnTypeIs[Expr]c                .    ddl m} t          | |          S )'Check whether `obj` is a Narwhals Expr.r   r   )narwhals.exprr   
isinstance)r&   r   s     \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_expression_parsing.pyis_exprr.   &   s$    """"""c4       TypeIs[Series[Any]]c                .    ddl m} t          | |          S )r*   r   r    )narwhals.seriesr!   r,   )r&   r!   s     r-   	is_seriesr3   -   s$    &&&&&&c6"""r/   exprs#CompliantExpr[CompliantFrameT, Any]EvalNames[CompliantFrameT]c                      t           d                   s(dt           d                    d}t          |          d	 fd}|S )
Nr   z3Safety assertion failed, expected expression, got: z. Please report a bug.dfr   r'   Sequence[str]c                J    d                              |           d d         S Nr      )_evaluate_output_names)r8   r4   s    r-   evaluate_output_namesz<combine_evaluate_output_names.<locals>.evaluate_output_names=   s$    Qx..r222A266r/   )r8   r   r'   r9   )r   typeAssertionError)r4   msgr>   s   `  r-   combine_evaluate_output_namesrB   4   sg    
 U1X&& "jDqNNjjjS!!!7 7 7 7 7 7 ! r/   r   AliasNames | Nonec                 2      d         j         d S d fd}|S )Nr   namesr9   r'   c                J    d                              |           d d         S r;   _alias_output_names)rE   r4   s    r-   alias_output_namesz6combine_alias_output_names.<locals>.alias_output_namesI   s$    Qx++E222A266r/   )rE   r9   r'   r9   rG   )r4   rI   s   ` r-   combine_alias_output_namesrJ   C   s=     Qx#+t7 7 7 7 7 7 r/   plxr   other&IntoExpr | NonNestedLiteral | _1DArray
str_as_litbool#CompliantExprAny | NonNestedLiteralc                  t          |          r|                    |           S t          |t                    r|s|                     |          S t          |          r|j                                        S t          |          r>t          d|           }|j
                            ||                                          S |S )Nr   )context)r.   _to_compliant_exprr,   strcolr   _compliant_series_to_exprr   r   _series
from_numpy)rK   rL   rN   nss       r-   extract_compliantr[   O   s     u~~ -'',,,% j wwu~~%   2&//111e C%s++z$$UB$77@@BBBLr/   exprr8   r   excluder9   #tuple[Sequence[str], Sequence[str]]c                   |                      |          }| j        |n|                     |          }rM| j        J | j        j                                        r&t          fdt          ||          D              \  }}||fS )Nc                &    g | ]\  }}|v	||fS  ra   ).0xaliasr]   s      r-   
<listcomp>z5evaluate_output_names_and_aliases.<locals>.<listcomp>n   s6        5'' J'''r/   )r=   rH   	_metadataexpansion_kindis_multi_unnamedzip)r\   r8   r]   output_namesaliasess     `  r-   !evaluate_output_names_and_aliasesrl   a   s     ..r22L #+ 	%%l33 
  	~)))>(99;; 	$'   $'g$>$>  %!L'   r/   c                  d   e Zd ZdZ e            Z	  e            Z	  e            Z	  e            Z	  e            Z		  e            Z
	  e            Z	  e            Z	  e            Z	  e            Z	  e            Z	 edd            Zedd            Zedd            Zedd            ZdS )ExprKindz6Describe which kind of expression we are dealing with.r'   rO   c                6    | t           j        t           j        hv S N)rn   LITERALAGGREGATIONselfs    r-   is_scalar_likezExprKind.is_scalar_like   s    ((*>???r/   c                6    | t           j        t           j        hv S rp   )rn   ORDERABLE_WINDOWORDERABLE_AGGREGATIONrs   s    r-   is_orderable_windowzExprKind.is_orderable_window   s    183QRRRr/   r&   r   c                    |j         }|j        rt          j        S |j        rt          j        S |j        rt          j        S t          j        S rp   )	rf   
is_literalrn   rq   ru   rr   is_elementwiseELEMENTWISEUNKNOWN)clsr&   metas      r-   	from_exprzExprKind.from_expr   sM    }? 	$## 	('' 	(''r/   rM   rN   c                   t          |          r|                     |          S t          |          s&t          |          st	          |t
                    r|st          j        S t          j        S rp   )	r.   r   r   r   r,   rT   rn   r}   rq   )r   r&   rN   s      r-   from_into_exprzExprKind.from_into_expr   sv     3<< 	&==%%%s##	(c""	( 3$$	( .8	(
 ''r/   Nr'   rO   )r&   r   r'   rn   )r&   rM   rN   rO   r'   rn   )__name__
__module____qualname____doc__r   rq   rr   rx   r}   rw   UNORDERABLE_WINDOW
FILTRATIONORDERABLE_FILTRATIONNARYOVERr~   propertyru   ry   classmethodr   r   ra   r/   r-   rn   rn   w   s>       @@dffG$&&KY DFFX$&&KgtvvHLJG466=466D?466D5dffGL@ @ @ X@ S S S XS       [        [     r/   rn   7TypeIs[Literal[ExprKind.LITERAL, ExprKind.AGGREGATION]]c                    | j         S rp   ru   )r&   s    r-   ru   ru      s     r/   c                  l    e Zd ZdZ e            Z	  e            Z	  e            Z	 d
dZd
dZ	ddZ
d	S )ExpansionKindz8Describe what kind of expansion the expression performs.r'   rO   c                    | t           j        u S rp   )r   MULTI_UNNAMEDrs   s    r-   rh   zExpansionKind.is_multi_unnamed   s    }222r/   c                6    | t           j        t           j        hv S rp   )r   MULTI_NAMEDr   rs   s    r-   is_multi_outputzExpansionKind.is_multi_output   s    1=3NOOOr/   rL   $Literal[ExpansionKind.MULTI_UNNAMED]c                    | t           j        u r|t           j        u rt           j        S d|  d| d}t          |          )Nz+Unsupported ExpansionKind combination, got z and z, please report a bug.)r   r   r@   )rt   rL   rA   s      r-   __and__zExpansionKind.__and__   sL    =...5M<W3W3W ..dDddudddS!!!r/   Nr   )rL   r   r'   r   )r   r   r   r   r   SINGLEr   r   rh   r   r   ra   r/   r-   r   r      s        BBTVVF9$&&K!DFFM'3 3 3 3P P P P" " " " " "r/   r   c                  B   e Zd ZdZdddddddd3dZd4dZd5dZed6d            Zd7dZ	d7dZ
d7dZd7d Zd7d!Zd7d"Zd7d#Zd7d$Zd7d%Zed7d&            Zed7d'            Zed7d(            Zed7d)            Zed7d*            Zed8d/            Zed9d1            Zd2S ):ExprMetadata)rg   has_windowsr|   r{   ru   	last_noden_orderable_opspreserves_lengthFr   Tr   r   r   r|   ru   r{   rg   r   r   rn   r   rO   r   intr   r|   ru   r{   r'   Nonec                   |r|sJ |r|sJ || _         || _        || _        || _        || _        || _        || _        || _        d S rp   rg   r   r   r   r|   r   ru   r{   )	rt   rg   r   r   r   r   r|   ru   r{   s	            r-   __init__zExprMetadata.__init__   sn      	"!!!! 	$####-;#,!,$3$2&6$2 *r/   argsr   kwdsr   c               4    d| j         }t          |          )NzCannot subclass )r   	TypeError)r   r   r   rA   s       r-   __init_subclass__zExprMetadata.__init_subclass__  s    111nnr/   rT   c                    d| j          d| j         d| j         d| j         d| j         d| j         d| j         d| j         d	S )
Nz ExprMetadata(
  expansion_kind: z,
  last_node: z,
  has_windows: z,
  n_orderable_ops: z,
  is_elementwise: z,
  preserves_length: z,
  is_scalar_like: z,
  is_literal: z,
)r   rs   s    r-   __repr__zExprMetadata.__repr__  s    	!%!4	 	 N	 	 #.	 	 #'"6		 	
 "&!4	 	 $(#8	 	 "&!4	 	 "_	 	 		
r/   c                "    | j          o| j         S rp   )r   ru   rs   s    r-   is_filtrationzExprMetadata.is_filtration  s    ((D1D-DDr/   c           
         | j         rd}t          |          t          | j        t          j        | j        | j        dddd          S )N4Can't apply aggregations to scalar-like expressions.FTr   )ru   r   r   rg   rn   rr   r   r   rt   rA   s     r-   with_aggregationzExprMetadata.with_aggregation  s[     	-HC',,, ( 0" 	
 	
 	
 		
r/   c           
         | j         rd}t          |          t          | j        t          j        | j        | j        dz   dddd          S )Nr   r<   FTr   )ru   r   r   rg   rn   rx   r   r   r   s     r-   with_orderable_aggregationz'ExprMetadata.with_orderable_aggregation(  s`     	-HC',,,*( 014" 	
 	
 	
 		
r/   c           
         t          | j        t          j        | j        | j        | j        | j        | j        | j	                  S )Nr   )
r   rg   rn   r}   r   r   r   r|   ru   r{   rs   s    r-   with_elementwise_opz ExprMetadata.with_elementwise_op7  sH     ( 0!2..	
 	
 	
 		
r/   c           
         | j         rd}t          |          t          | j        t          j        | j        | j        | j        ddd          S )NzOCan't apply unorderable window (`rank`, `is_unique`) to scalar-like expression.Fr   )	ru   r   r   rg   rn   r   r   r   r   r   s     r-   with_unorderable_windowz$ExprMetadata.with_unorderable_windowC  s^     	-cC',,,'( 0!2  	
 	
 	
 		
r/   c           
         | j         rd}t          |          t          | j        t          j        | j        | j        dz   | j        ddd          S )NzNCan't apply orderable window (e.g. `diff`, `shift`) to scalar-like expression.r<   Fr   )	ru   r   r   rg   rn   rw   r   r   r   r   s     r-   with_orderable_windowz"ExprMetadata.with_orderable_windowR  sc     	-bC',,,%( 014!2  	
 	
 	
 		
r/   c           
        | j         rd}t          |          | j        s| j        rd}t          |          | j        }|sd}t          |          | j        j        r|dz  }t          | j        t          j
        d|dddd          S )NCannot nest `over` statements.oCannot use `over` on expressions which are elementwise
(e.g. `abs`) or which change length (e.g. `drop_nulls`).zDCannot use `order_by` in `over` on expression which isn't orderable.r<   TFr   )r   r   r|   r   r   r   ry   r   rg   rn   r   )rt   rA   r   s      r-   with_ordered_overzExprMetadata.with_ordered_overa  s     	-2C',,, 	-$"4 	-K  (,,,. 	-XC',,,>- 	!q OM+!  	
 	
 	
 		
r/   c           
         | j         rd}t          |          | j        s| j        rd}t          |          t	          | j        t          j        d| j        dddd          S )Nr   r   TFr   )	r   r   r|   r   r   rg   rn   r   r   r   s     r-   with_partitioned_overz"ExprMetadata.with_partitioned_over|  s     	-2C',,, 	-$"4 	-K  (,,,M 0!  	
 	
 	
 		
r/   c           
         | j         rd}t          |          t          | j        t          j        | j        | j        dddd          S )NECan't apply filtration (e.g. `drop_nulls`) to scalar-like expression.Fr   )ru   r   r   rg   rn   r   r   r   r   s     r-   with_filtrationzExprMetadata.with_filtration  s[     	-YC',,,( 0"  	
 	
 	
 		
r/   c           
         | j         rd}t          |          t          | j        t          j        | j        | j        dz   dddd          S )Nr   r<   Fr   )ru   r   r   rg   rn   r   r   r   r   s     r-   with_orderable_filtrationz&ExprMetadata.with_orderable_filtration  s`     	-YC',,,)( 014"  	
 	
 	
 		
r/   c                 R    t          t          j        t          j        ddd          S )NFT)r|   r   ru   )r   r   r   rn   rr   ra   r/   r-   aggregationzExprMetadata.aggregation  s.       "
 
 
 	
r/   c                 T    t          t          j        t          j        dddd          S )NFT)r|   r   r{   ru   )r   r   r   rn   rq   ra   r/   r-   literalzExprMetadata.literal  s1      "
 
 
 	
r/   c                 J    t          t          j        t          j                  S rp   )r   r   r   rn   r}   ra   r/   r-   selector_singlezExprMetadata.selector_single  s     M0(2FGGGr/   c                 J    t          t          j        t          j                  S rp   )r   r   r   rn   r}   ra   r/   r-   selector_multi_namedz!ExprMetadata.selector_multi_named  s     M5x7KLLLr/   c                 J    t          t          j        t          j                  S rp   )r   r   r   rn   r}   ra   r/   r-   selector_multi_unnamedz#ExprMetadata.selector_multi_unnamed  s     M79MNNNr/   lhsr   rhsr"   c               *    t          ||ddd          S )NTFrN   allow_multi_outputto_single_outputcombine_metadata)r   r   r   s      r-   from_binary_opzExprMetadata.from_binary_op  s'      %RW
 
 
 	
r/   r4   c                    t          |ddddS )NFTr   r   )r   r4   s     r-   from_horizontal_opzExprMetadata.from_horizontal_op  s#    uPT
 
 
 	
r/   N)rg   r   r   rn   r   rO   r   r   r   rO   r|   rO   ru   rO   r{   rO   r'   r   )r   r   r   r   r'   r   )r'   rT   r   )r'   r   )r   r   r   r"   r'   r   )r4   r"   r'   r   )r   r   r   	__slots__r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   ra   r/   r-   r   r      s9       	I  " !%#$ + + + + + +2   
 
 
 
 E E E XE
 
 
 

 
 
 


 

 

 


 
 
 

 
 
 

 
 
 
6
 
 
 
*
 
 
 

 
 
 
 
 
 
 \
 
 
 
 \
 H H H \H M M M \M O O O \O 
 
 
 [
 
 
 
 [
 
 
r/   r   r   IntoExpr | object | Noner   r   c           
        d}t           j        }d}d}d}d}	d}
d}t          |          D ]\  }}t          |t                    r| rt          |          rd}d}
d}2t          |          r|j        }|j        	                                r0|j        }|dk    r|sd}t          |          |s|dk    r|}n||z  }|j        rd}||j        z  }|j        rd}|j        sd}	|j        sd}
|j        sd}|j        r|dz  }|dk    rd}t%          |          |r|rd}t'          |          t)          |t*          j        ||||	 |
 |           S )	a  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<   zXLength-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,   rT   r3   r.   rf   rg   r   r   r   r   r   r|   ru   r{   r   r   r   r   rn   r   )rN   r   r   r   n_filtrationsresult_expansion_kindresult_has_windowsresult_n_orderable_opsresult_preserves_lengthresult_is_not_elementwiseresult_is_not_scalar_likeresult_is_not_literaliargmetadatarg   rA   s                    r-   r   r     s    M)0# % %!D// "# "#3sC   !	# !	#	# !	#&*#(,%$(!!S\\ 	#}H&6688 W!)!8q55!35=  5S999' WAvv0>--0E0V-# *%)""h&>>"( /*.'* 1,0)* 1,0)& -(,%% #"qh%c*** = foo&.04444,,	 	 	 	r/   r"   function_namerT   r   c                t    ddl m t          fd|D                       sd|  d}t          |          d S )Nr   r    c              3  |   K   | ]6}t          |          r|j        j        pt          |t          f          V  7d S rp   )r.   rf   r   r,   rT   )rb   rc   r!   s     r-   	<genexpr>z4check_expressions_preserve_length.<locals>.<genexpr>;  sZ         
	44UAV}9U9U     r/   zBExpressions which aggregate or change length cannot be passed to 'z'.)r2   r!   allr   )r   r   rA   r!   s      @r-   !check_expressions_preserve_lengthr   5  sy     '&&&&&          eS`dddoo r/   kwargsc                 x    t          | |                                          }t          d |D                       S )Nc              3  L   K   | ]}t          |          o|j        j        V   d S rp   )r.   rf   ru   )rb   rc   s     r-   r   z,all_exprs_are_scalar_like.<locals>.<genexpr>H  s2      HHQwqzz8ak8HHHHHHr/   )r   valuesr   )r   r   r4   s      r-   all_exprs_are_scalar_liker   C  s8     $((EHH%HHHHHHr/   function
comparandsc                     fd|D             }fd|D             }t          d |D                       fdt          ||          D             } || S )Nc              3  <   K   | ]}t          |           V  dS )rN   N)r[   )rb   	comparandrK   rN   s     r-   r   z(apply_n_ary_operation.<locals>.<genexpr>Q  sF         	#yZ@@@     r/   c                H    g | ]}t                               |           S )r   )rn   r   )rb   r   rN   s     r-   re   z)apply_n_ary_operation.<locals>.<listcomp>U  s<        		jAA  r/   c              3  &   K   | ]}|j          V  d S rp   r   )rb   kinds     r-   r   z(apply_n_ary_operation.<locals>.<genexpr>Z  s(      >>++>>>>>>r/   c              3     K   | ]>\  }}r3t          |          r$t          |          r|                    |          n|V  ?d S rp   )r   ru   	broadcast)rb   compliant_exprr  r  s      r-   r   z(apply_n_ary_operation.<locals>.<genexpr>[  sx         !ND 	*>::	?Md?S?S	  &&&     r/   )anyri   )rK   r   rN   r   compliant_exprskindsr  s   ` `   @r-   apply_n_ary_operationr	  K  s        #  O   #  E
 >>>>>>>I    %($?$?	  O 8_%%r/   N)r&   r   r'   r(   )r&   r   r'   r0   )r4   r5   r'   r6   )r4   r   r'   rC   )rK   r   rL   rM   rN   rO   r'   rP   )r\   r   r8   r   r]   r9   r'   r^   )r&   rn   r'   r   )
r   r   rN   rO   r   rO   r   rO   r'   r   )r   r"   r   rT   r'   r   )r   r"   r   r"   r'   rO   )
rK   r   r   r   r   rM   rN   rO   r'   r   )<
__future__r   enumr   r   	itertoolsr   typingr   r   r	   r
   r   r   narwhals._utilsr   narwhals.dependenciesr   r   narwhals.exceptionsr   r   r   r   typing_extensionsr   r   narwhals._compliantr   r   narwhals._compliant.typingr   r   r   r   r   r   r+   r   r2   r!   narwhals.typingr"   r#   r$   r%   r.   r3   rB   rJ   r[   rl   rn   ru   r   r   r   r   r   r	  ra   r/   r-   <module>r     s1   # " " " " "               G G G G G G G G G G G G G G G G - - - - - - D D D D D D D D             ////////BBBBBBBB                #"""""&&&&&&DDDDDDDDDDA! ! ! !# # # #! ! ! !	 	 	 	   $! ! ! !,C  C  C  C  C t C  C  C L   " " " " "D " " "6A
 A
 A
 A
 A
 A
 A
 A
HP P P Pf   I I I I& & & & & &r/   