
    Wh0.                    P   U d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ erLddlmZmZmZmZ dd	lmZ dd
lmZmZmZ ddlmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddlm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. g dZ/ e	dd      Z0 e	dd      Z1 e	dd      Z2 e	dd      Z3 e	dd      Z4 e	dd      Z5dZ6de7d <    G d! d"ee3e0f         Z8 G d# d$e8e4e1f   ee4e1f         Z9 G d% d&e8e5e2f   ee5e2f         Z: G d' d(ee3e0f   ee3e0f         Z;	 	 	 	 	 	 	 	 d*d)Z<y)+z=Almost entirely complete, generic `selectors` implementation.    )annotationsN)partial)TYPE_CHECKINGProtocolTypeVaroverload)CompliantExpr)_parse_time_unit_and_time_zone%dtype_matches_time_unit_and_time_zoneget_column_namesis_compliant_dataframe
zip_strict)
CollectionIterableIteratorSequence)timezone)Self	TypeAliasTypeIs)
NativeExpr)CompliantDataFrameAnyCompliantExprAnyCompliantFrameAnyCompliantLazyFrameAnyCompliantSeriesAnyCompliantSeriesOrNativeExprAny	EvalNames
EvalSeries)ImplementationVersion_LimitedContext)DType)TimeUnit)CompliantSelectorCompliantSelectorNamespaceEagerSelectorNamespaceLazySelectorNamespaceSeriesOrExprTr   )boundSeriesTr   ExprTr   FrameTr   
DataFrameTr   
LazyFrameTr   zOCompliantSelector[FrameT, SeriesOrExprT] | CompliantExpr[FrameT, SeriesOrExprT]r   SelectorOrExprc                      e Zd ZU ded<   ded<   edd       Zedd       ZddZddZ		 	 	 	 dd	Z
dd
Z	 	 	 	 	 	 ddZ	 	 	 	 ddZddZddZddZddZddZddZ	 	 	 	 	 	 ddZy) r&   r    _implementationr!   _versionc                     y N selfs    W/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_compliant/selectors.py	_selectorz$CompliantSelectorNamespace._selector?   s    KN    c               l    | j                  |       }|j                  |_        |j                  |_        |S r5   )__new__r2   r3   )clscontextobjs      r9   from_namespacez)CompliantSelectorNamespace.from_namespaceA   s0    kk#%55''
r;   c                    y r5   r6   r8   dfs     r9   _iter_columnsz(CompliantSelectorNamespace._iter_columnsH       r;   c                    y r5   r6   rC   s     r9   _iter_schemaz'CompliantSelectorNamespace._iter_schemaI   rF   r;   c                    y r5   r6   rC   s     r9   _iter_columns_dtypesz/CompliantSelectorNamespace._iter_columns_dtypesJ   s    03r;   c             #  j   K   t        | j                  |      |j                        E d {    y 7 wr5   )r   rE   columnsrC   s     r9   _iter_columns_namesz.CompliantSelectorNamespace._iter_columns_namesM   s%     d004bjjAAAs   )313c               ^     d fd}d fd} j                   j                  ||       S )Nc                r    j                  |       D cg c]  \  }}t        |      s| c}}S c c}}w r5   )rJ   
isinstance)rD   sertpdtyper8   s      r9   seriesz4CompliantSelectorNamespace._is_dtype.<locals>.seriesS   s9    #'#<#<R#@RJrSXDY     33c                r    j                  |       D cg c]  \  }}t        |      s| c}}S c c}}w r5   )rH   rP   )rD   namerR   rS   r8   s      r9   namesz3CompliantSelectorNamespace._is_dtype.<locals>.namesX   s0    )-):):2)>XXT2*RQVBWDXXXrU   r?   rD   r-   returnzSequence[SeriesOrExprT]rD   r-   r[   zSequence[str]r:   from_callables)r8   rS   rT   rX   s   ``  r9   	_is_dtypez$CompliantSelectorNamespace._is_dtypeP   s,    	
	Y ~~,,VUD,IIr;   c                ^     d fd}d fd} j                   j                  ||       S )Nc                b    j                  |       D cg c]  \  }}|v s| c}}S c c}}w r5   rJ   )rD   rQ   rR   dtypesr8   s      r9   rT   z3CompliantSelectorNamespace.by_dtype.<locals>.seriesa   s,    '+'@'@'DUGCfCUUU   ++c                b    j                  |       D cg c]  \  }}|v s| c}}S c c}}w r5   rH   )rD   rW   rR   rc   r8   s      r9   rX   z2CompliantSelectorNamespace.by_dtype.<locals>.namesd   s,    )-):):2)>OXT2",DOOOrd   rY   rZ   r\   r]   )r8   rc   rT   rX   s   ``  r9   by_dtypez#CompliantSelectorNamespace.by_dtype^   s-    	V	P ~~,,VUD,IIr;   c                     t        j                  |      d fd}dfd} j                  j                  ||       S )Nc                z   t        |       roj                  j                         sUj                  j                         s;| j                  D cg c]%  }j                  |      s| j                  |      ' c}S j                  |       D cg c]  \  }}j                  |      s| c}}S c c}w c c}}w r5   )r   r2   	is_duckdbis_ibisrL   search
get_columnrM   )rD   colrQ   rW   pr8   s       r9   rT   z2CompliantSelectorNamespace.matches.<locals>.seriesl   s    &r*,,668,,44668jjRsAHHSMc*RR)-)A)A")EXICRVCXX SXs   B2&B2B7*B7c                f    | j                   D cg c]  }j                  |      s| c}S c c}w r5   )rL   rl   )rD   rn   ro   s     r9   rX   z1CompliantSelectorNamespace.matches.<locals>.namesv   s%    #%::?C#C???s   ..rY   rZ   r\   )recompiler:   r^   )r8   patternrT   rX   ro   s   `   @r9   matchesz"CompliantSelectorNamespace.matchesi   s;    JJw	Y	@ ~~,,VUD,IIr;   c                X     d fd}d fd} j                   j                  ||       S )Nc                z    j                  |       D cg c]  \  }}|j                         s| c}}S c c}}w r5   )rJ   
is_numeric)rD   rQ   rR   r8   s      r9   rT   z2CompliantSelectorNamespace.numeric.<locals>.series|   s.    '+'@'@'DXGCCXXX   77c                z    j                  |       D cg c]  \  }}|j                         s| c}}S c c}}w r5   )rH   rw   )rD   rW   rR   r8   s      r9   rX   z1CompliantSelectorNamespace.numeric.<locals>.names   s.    )-):):2)>RXT2"--/DRRRrx   rY   rZ   r\   r]   )r8   rT   rX   s   `  r9   numericz"CompliantSelectorNamespace.numeric{   s-    	Y	S ~~,,VUD,IIr;   c                `    | j                  | j                  j                  j                        S r5   )r_   r3   rc   Categoricalr7   s    r9   categoricalz&CompliantSelectorNamespace.categorical   s!    ~~dmm22>>??r;   c                `    | j                  | j                  j                  j                        S r5   )r_   r3   rc   Stringr7   s    r9   stringz!CompliantSelectorNamespace.string   s!    ~~dmm2299::r;   c                `    | j                  | j                  j                  j                        S r5   )r_   r3   rc   Booleanr7   s    r9   booleanz"CompliantSelectorNamespace.boolean   s!    ~~dmm22::;;r;   c                T     d fd} j                   j                  |t               S )Nc                8    t        j                  |             S r5   )listrE   )rD   r8   s    r9   rT   z.CompliantSelectorNamespace.all.<locals>.series   s    **2.//r;   rY   rZ   )r:   r^   r   )r8   rT   s   ` r9   allzCompliantSelectorNamespace.all   s'    	0 ~~,,V5Et,TTr;   c                     t        ||      \  }}t        t         j                  j                  ||      d fd}d fd} j
                  j                  ||       S )N)rc   
time_units
time_zonesc                j    j                  |       D cg c]  \  }} |      s| c}}S c c}}w r5   rb   )rD   rQ   rR   rt   r8   s      r9   rT   z3CompliantSelectorNamespace.datetime.<locals>.series   s-    '+'@'@'DTGCPRCTTT   //c                j    j                  |       D cg c]  \  }} |      s| c}}S c c}}w r5   rf   )rD   rW   rR   rt   r8   s      r9   rX   z2CompliantSelectorNamespace.datetime.<locals>.names   s,    )-):):2)>NXT2'"+DNNNr   rY   rZ   r\   )r
   r   r   r3   rc   r:   r^   )r8   	time_unit	time_zoner   r   rT   rX   rt   s   `      @r9   datetimez#CompliantSelectorNamespace.datetime   sa    
 "@	9!U
J1==''!!	
	U	O ~~,,VUD,IIr;   N)r[   z.type[CompliantSelector[FrameT, SeriesOrExprT]])r?   r"   r[   r   )rD   r-   r[   zIterator[SeriesOrExprT])rD   r-   r[   Iterator[tuple[str, DType]])rD   r-   r[   z%Iterator[tuple[SeriesOrExprT, DType]])rD   r-   r[   z#Iterator[tuple[SeriesOrExprT, str]])r8   1CompliantSelectorNamespace[FrameT, SeriesOrExprT]rS   ztype[DType]r[   (CompliantSelector[FrameT, SeriesOrExprT])rc   zCollection[DType | type[DType]]r[   r   )rs   strr[   r   r[   r   )r   z$TimeUnit | Iterable[TimeUnit] | Noner   z7str | timezone | Iterable[str | timezone | None] | Noner[   r   )__name__
__module____qualname____annotations__propertyr:   classmethodrA   rE   rH   rJ   rM   r_   rg   rt   rz   r}   r   r   r   r   r6   r;   r9   r&   r&   :   s    ##N N  KM44	.4BJ?JHSJ	1J	J5	J	1	JJ$J@;<UJ7J KJ 
2	Jr;   r&   c                  $    e Zd ZddZddZddZy)r'   c             #  l   K   | j                  |      D ]  }|j                  |j                  f  y wr5   )rE   rW   rS   r8   rD   rQ   s      r9   rH   z#EagerSelectorNamespace._iter_schema   s3     %%b) 	&C((CII%%	&s   24c             #  @   K   |j                         E d {    y 7 wr5   )iter_columnsrC   s     r9   rE   z$EagerSelectorNamespace._iter_columns   s     ??$$$   c             #  X   K   | j                  |      D ]  }||j                  f  y wr5   )rE   rS   r   s      r9   rJ   z+EagerSelectorNamespace._iter_columns_dtypes   s.     %%b) 	!Csyy. 	!s   (*N)rD   r.   r[   r   )rD   r.   r[   zIterator[SeriesT])rD   r.   r[   zIterator[tuple[SeriesT, DType]]r   r   r   rH   rE   rJ   r6   r;   r9   r'   r'      s    &%!r;   r'   c                  $    e Zd ZddZddZddZy)r(   c              #  T   K   |j                   j                         E d {    y 7 wr5   )schemaitemsrC   s     r9   rH   z"LazySelectorNamespace._iter_schema   s     99??$$$s   (&(c              #  @   K   |j                         E d {    y 7 wr5   )rE   rC   s     r9   rE   z#LazySelectorNamespace._iter_columns   s     ##%%%r   c             #     K   t        | j                  |      |j                  j                               E d {    y 7 wr5   )r   rE   r   valuesrC   s     r9   rJ   z*LazySelectorNamespace._iter_columns_dtypes   s.     d004bii6F6F6HIIIs   7A?AN)rD   r/   r[   r   )rD   r/   r[   zIterator[ExprT])rD   r/   r[   zIterator[tuple[ExprT, DType]]r   r6   r;   r9   r(   r(      s    %&Jr;   r(   c                  >   e Zd ZU ded<   ded<   ded<   ded<   e	 	 	 	 	 	 	 	 dd	       Zedd
       ZddZ	 	 	 	 ddZ	e
dd       Ze
	 	 	 	 dd       Z	 	 	 	 ddZe
dd       Ze
	 	 	 	 dd       Z	 	 	 	 ddZe
dd       Ze
	 	 	 	 dd       Z	 	 	 	 ddZddZy) r%   !EvalSeries[FrameT, SeriesOrExprT]_callr   _function_namer    r2   r!   r3   c                   | j                  |       }||_        ||_        d |_        |j                  |_        |j
                  |_        |S r5   )r=   r   _evaluate_output_names_alias_output_namesr2   r3   )r>   callevaluate_output_namesr?   r@   s        r9   r^   z CompliantSelector.from_callables   sI     kk#	%:""&%55''
r;   c                6    | j                         j                  S r5   )__narwhals_namespace__	selectorsr7   s    r9   r   zCompliantSelector.selectors   s    **,666r;   c                     y r5   r6   r7   s    r9   _to_exprzCompliantSelector._to_expr   rF   r;   c                ,    t        |t        |             S r5   )rP   typer8   others     r9   _is_selectorzCompliantSelector._is_selector   s     %d,,r;   c                     y r5   r6   r   s     r9   __sub__zCompliantSelector.__sub__       ,/r;   c                     y r5   r6   r   s     r9   r   zCompliantSelector.__sub__        03r;   c                      j                        r6d fd}d fd} j                  j                  j                  ||       S  j	                         z
  S )Nc                    t        |       \  }}t         |       |      D cg c]  \  }}||vr| c}}S c c}}w r5   _eval_lhs_rhsr   rD   	lhs_names	rhs_namesxrW   r   r8   s        r9   rT   z)CompliantSelector.__sub__.<locals>.series   sO    '4Ru'E$	9 $.d2h	#B49,   s   ;c                X    t        |       \  }}|D cg c]	  }||vs| c}S c c}w r5   r   rD   r   r   r   r   r8   s       r9   rX   z(CompliantSelector.__sub__.<locals>.names   s1    '4Ru'E$	9#,Ca0BCCC   	''rY   rZ   r\   r   r   r:   r^   r   r8   r   rT   rX   s   ``  r9   r   zCompliantSelector.__sub__   sT     U#D >>++::65RV:WW}}&&r;   c                     y r5   r6   r   s     r9   __or__zCompliantSelector.__or__  s    +.r;   c                     y r5   r6   r   s     r9   r   zCompliantSelector.__or__  r   r;   c                      j                        r6d fd}d fd} j                  j                  j                  ||       S  j	                         z  S )Nc                p    t        |       \  }g fdt         |       |      D         |       S )Nc              3  0   K   | ]  \  }}|vr|  y wr5   r6   ).0r   rW   r   s      r9   	<genexpr>z;CompliantSelector.__or__.<locals>.series.<locals>.<genexpr>  s%      #Aty0 s   r   rD   r   r   r   r8   s     @r9   rT   z(CompliantSelector.__or__.<locals>.series  sK    '4Ru'E$	9'1$r(I'F 2Y r;   c                D    t        |       \  }g fd|D        S )Nc              3  ,   K   | ]  }|vs|  y wr5   r6   )r   r   r   s     r9   r   z:CompliantSelector.__or__.<locals>.names.<locals>.<genexpr>  s     E!92D!Es   	r   r   s     @r9   rX   z'CompliantSelector.__or__.<locals>.names  s,    '4Ru'E$	9REYER	RRr;   rY   rZ   r\   r   r   s   ``  r9   r   zCompliantSelector.__or__  sT     U#	S >>++::65RV:WW}}&&r;   c                     y r5   r6   r   s     r9   __and__zCompliantSelector.__and__  r   r;   c                     y r5   r6   r   s     r9   r   zCompliantSelector.__and__!  r   r;   c                      j                        r6d fd}d fd} j                  j                  j                  ||       S  j	                         z  S )Nc                    t        |       \  }}t         |       |      D cg c]  \  }}||v s| c}}S c c}}w r5   r   r   s        r9   rT   z)CompliantSelector.__and__.<locals>.series*  sJ    '4Ru'E$	9%/R)%D!!TPYHYA  s   <<c                X    t        |       \  }}|D cg c]	  }||v s| c}S c c}w r5   r   r   s       r9   rX   z(CompliantSelector.__and__.<locals>.names0  s0    '4Ru'E$	9#,?aY???r   rY   rZ   r\   r   r   s   ``  r9   r   zCompliantSelector.__and__%  sT     U#@ >>++::65RV:WW}}&&r;   c                <    | j                   j                         | z
  S r5   )r   r   r7   s    r9   
__invert__zCompliantSelector.__invert__7  s    ~~!!#d**r;   N)r   r   r   zEvalNames[FrameT]r?   r"   r[   r   )r[   r   )r[   $CompliantExpr[FrameT, SeriesOrExprT])r   z+Self | CompliantExpr[FrameT, SeriesOrExprT]r[   z0TypeIs[CompliantSelector[FrameT, SeriesOrExprT]])r   r   r[   r   )r   r   r[   r   )r   %SelectorOrExpr[FrameT, SeriesOrExprT]r[   r   r   )r   r   r   r   r   r^   r   r   r   r   r   r   r   r   r   r6   r;   r9   r%   r%      s]    -,##/  1
 ! 
  7 7 D-@-	9-
 / /393	-3 3':'	.'( . .393	-3 3':'	.'. / /393	-3 3':'	.'$+r;   r%   c                F    |j                  |       |j                  |       fS r5   )r   )rD   lhsrhss      r9   r   r   ;  s%     %%b)3+E+Eb+IIIr;   )rD   r   r   r   r   r   r[   z#tuple[Sequence[str], Sequence[str]])=__doc__
__future__r   rq   	functoolsr   typingr   r   r   r   narwhals._compliant.exprr	   narwhals._utilsr
   r   r   r   r   collections.abcr   r   r   r   r   r   typing_extensionsr   r   r   r   narwhals._compliant.typingr   r   r   r   r   r   r   r   r    r!   r"   narwhals.dtypesr#   narwhals.typingr$   __all__r)   r+   r,   r-   r.   r/   r0   r   r&   r'   r(   r%   r   r6   r;   r9   <module>r      sq   C " 	  = = 2  HH!993	 	 	 IH%( /OP
)#7
8|,	!4	5\)@A
\)@A
U 	 
lJ&-*?!@ lJ^!z723Xj'>Q5R!
Jz5018J<M3N
Js+&-'((6=3H*Is+lJJ 0J7GJ(Jr;   