Ë
    ðmxiÙ$  ã                  óø   — d dl mZ d dlmZmZmZ d dlZd dlm	Z
 d dlmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ er*d d	lmZ d d
lmZ d dlmZ d dlm Z  d dl!m"Z"m#Z#m$Z$ d dlm%Z%m&Z&  G d„ dedef   «      Z'y)é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚcastN)ÚArrowSeries)Ú	EagerExpr)Úevaluate_nodesÚ!evaluate_output_names_and_aliases)ÚImplementationÚgenerate_temporary_column_nameÚnot_implemented)Úcol)ÚSequence)ÚSelf)ÚArrowDataFrame©ÚArrowNamespace)Ú
AliasNamesÚ	EvalNamesÚ
EvalSeries)ÚVersionÚ_LimitedContextc                  óÖ   — e Zd ZU ej                  Zded<   ej                  dœ	 	 	 	 	 	 	 	 	 	 	 dd„Ze	 	 	 	 	 	 	 	 dd„«       Z	edd„«       Z
dd„Zdd	œ	 	 	 dd
„Zdd„Zdd„Z e«       Zy)Ú	ArrowExprr   Ú_implementation)Úimplementationc               ó<   — || _         || _        || _        || _        y )N)Ú_callÚ_evaluate_output_namesÚ_alias_output_namesÚ_version)ÚselfÚcallÚevaluate_output_namesÚalias_output_namesÚversionr   s         úK/home/htdocs/ttos/venv/lib/python3.12/site-packages/narwhals/_arrow/expr.pyÚ__init__zArrowExpr.__init__    s"   € ð ˆŒ
Ø&;ˆÔ#Ø#5ˆÔ Øˆ�ó    c              ó<   ‡— dˆfd„} | |‰d |j                   ¬«      S )Nc                óÞ   •— 	  ‰| «      D �cg c]'  }t        | j                  |   || j                  ¬«      ‘Œ) c}S c c}w # t        $ r"}| j	                   ‰| «      «      x}r||‚‚ d }~ww xY w)N)Únamer&   )r   Únativer!   ÚKeyErrorÚ_check_columns_exist)ÚdfÚcolumn_nameÚeÚerrorÚevaluate_column_namess       €r'   Úfuncz)ArrowExpr.from_column_names.<locals>.func6   sƒ   ø€ ð
ñ
 (=¸RÓ'@ö	ð $ô  ØŸ	™	 +Ñ.°[È"Ï+É+öòð ùò øô ò Ø×3Ñ3Ñ4IÈ"Ó4MÓNÐN�5ÐNØ QÐ&Øûðús%   ƒ
A �,<¹A ¼A Á	A,Á
A'Á'A,©r$   r%   r&   ©r0   r   Úreturnzlist[ArrowSeries])r!   )Úclsr4   Úcontextr5   s    `  r'   Úfrom_column_nameszArrowExpr.from_column_names.   s)   ø€ õ	ñ ØØ"7Ø#Ø×$Ñ$ô	
ð 	
r)   c               óZ   ‡— dˆfd„} | || j                  ‰«      d |j                  ¬«      S )Nc                ó–   •— | j                   }| j                  }‰D �cg c]   }t        j                  ||   ||   | ¬«      ‘Œ" c}S c c}w )N)r,   r:   )r-   Úcolumnsr   Úfrom_native)r0   ÚtblÚcolsÚiÚcolumn_indicess       €r'   r5   z+ArrowExpr.from_column_indices.<locals>.funcL   sN   ø€ Ø—)‘)ˆCØ—:‘:ˆDð (öàô ×'Ñ'¨¨A©°T¸!±WÀbÖIòð ùò s   ž%Ar6   r7   )Ú_eval_names_indicesr!   )r9   r:   rC   r5   s     ` r'   Úfrom_column_indiceszArrowExpr.from_column_indicesJ   s4   ø€ õ	ñ ØØ"%×"9Ñ"9¸.Ó"IØ#Ø×$Ñ$ô	
ð 	
r)   c                ó4   — ddl m}  || j                  ¬«      S )Nr   r   )r&   )Únarwhals._arrow.namespacer   r!   )r"   r   s     r'   Ú__narwhals_namespace__z ArrowExpr.__narwhals_namespace__[   s   € Ý<á d§m¡mÔ4Ð4r)   F)Úreturns_scalarc               ó   — |rddiS i S )NÚ_return_py_scalarF© )r"   rI   s     r'   Ú_reuse_series_extra_kwargsz$ArrowExpr._reuse_series_extra_kwargs`   s   € ñ 0>Ð# UÐ+ÐEÀ2ÐEr)   c                óž   ‡ ‡‡— ‰sJ ‚‰ j                   Šdˆˆˆ fd„}‰ j                  |‰ j                  ‰ j                  ‰ j                  ¬«      S )Nc           	     ó@  •— t        d| j                  «      } | j                  |d ¬«      j                  ‰dddœŽ}  ‰| j	                  |gd¬«      «      }‰�X‰j
                  rLt        | «      }|D �cg c]5  }|j                  t        j                  |j                  «       |«      «      ‘Œ7 c}S t        j                  | j                  |«      j                  «      }|D �cg c],  }|j                  |j                  j                  |«      «      ‘Œ. c}S c c}w c c}w )Né   )Úorder_byF©Ú
descendingÚ
nulls_lastT)Ústrict)r   r>   Úwith_row_indexÚsortÚdropÚis_scalar_likeÚlenÚ_with_nativeÚpaÚrepeatÚitemÚpcÚsort_indicesÚ
get_columnr-   Útake)	r0   ÚtokenÚresultsÚsizeÚsÚsorting_indicesÚmetarQ   r"   s	         €€€r'   r5   z2ArrowExpr._over_without_partition_by.<locals>.funck   sí   ø€ Ü2°1°b·j±jÓAˆEØ=�×"Ñ" 5°4Ð"Ó8×=Ñ=Ø e¸òˆBñ ˜2Ÿ7™7 E 7°4˜7Ó8Ó9ˆGØÐ D×$7Ò$7ô ˜2“w�ØKRÖSÀa˜Ÿ™¤r§y¡y°·±³¸4Ó'@ÕAÒSÐSô
 !Ÿo™o¨b¯m©m¸EÓ.B×.IÑ.IÓJˆOØLSÖTÀq�A—N‘N 1§8¡8§=¡=°Ó#AÕBÒTÐTùò Tùò Us   Á3:DÃ"1Dr6   ©r0   r   r8   zSequence[ArrowSeries])Ú	_metadataÚ	__class__r   r    r!   )r"   rQ   r5   rh   s   `` @r'   Ú_over_without_partition_byz$ArrowExpr._over_without_partition_bye   sO   ú€ ñ ˆˆxØ�~‰~ˆ÷	Uð$ �~‰~ØØ"&×"=Ñ"=Ø#×7Ñ7Ø—M‘Mð	 ó 
ð 	
r)   c                óØ  ‡ ‡‡‡‡— ‰s‰sJ ‚‰ j                  ‰«      S ‰ j                  Š‰rO‰j                  j                  j                  r"‰j
                  �#‰j
                  j                  sd}t        |«      ‚t        t        t        ‰ j                  j                  «       «      «      «      Šdˆˆˆˆˆ fd„}‰ j                  |‰ j                  ‰ j                  ‰ j                  ¬«      S )NzÅOnly elementary aggregations are supported for `.over` in PyArrow backend when `partition_by` is specified.

Please see: https://narwhals-dev.github.io/narwhals/concepts/improve_group_by_operation/c           
     ó  •— ‰j                  «       }‰j                  �l| j                  t        dt	        ‰d d |«      «      «      } t        ‰| g «      \  }}t        dt        |Ž j                  ‰d   «      j                  |«      «      }nt        ‰| g «      \  }}‰}‰r | j                  ‰dddœŽ} t        |«      j                  ‰«      x}rd|› d�}t        |«      ‚ | j                  ‰Ž }|j                  j                  D �cg c]  }|j                   dkD  ‘Œ }	}t#        |	«      sW| j%                  ‰d¬«      j'                  |«      }
|j)                  |
d	‰‰d
¬«      }
|D �cg c]  }|
j+                  |«      ‘Œ c}S | j                  | j                  }}‰j                  «       }g }g }t-        |j                  |	«      D ]Å  \  }}|s|j/                  |«       Œt1        d|«      }|j/                  |«       |j/                  |«       |j2                  j5                  |j7                  |«      j9                  d«      j;                  «       j<                  ||¬«      }|j/                  |j>                  jA                  |«      «       ŒÇ  | j                  |Ž }|j%                  |d¬«      j'                  |«      } |j                  |Ž j)                  |||dd
¬«      }|D �cg c]  }|j+                  |«      ‘Œ c}S c c}w c c}w c c}w )Nr   éÿÿÿÿFrR   zColumn names zV appear in both expression output names and in `over` keys.
This is not yet supported.r   )Údrop_null_keysÚleftÚ_right)ÚhowÚleft_onÚright_onÚsuffixrP   Úencode)r:   r,   Úinner)rt   ru   rs   rv   )!rH   ÚprevÚwith_columnsr   r	   r
   Únw_colÚ_append_nodeÚ_to_compliant_exprrW   ÚsetÚintersectionÚNotImplementedErrorÚsimple_selectr-   r>   Ú
null_countÚanyÚgroup_byÚaggÚjoinra   ÚzipÚappendr   Ú_seriesr?   ÚcolumnÚdictionary_encodeÚcombine_chunksÚindicesÚ_exprÚ_from_series)r0   ÚplxÚ_ÚaliasesÚleaf_ceÚoverlapÚmsgÚpartition_tblÚcaÚ	has_nullsÚtmpÚaliasÚ
tbl_nativeÚcurrent_colsÚ
group_keysÚencoded_colsÚcol_nameÚhas_nullÚtmp_namer�   Útbl_encodedÚwindowedÚretrh   ÚnodesrQ   Úpartition_byr"   s                          €€€€€r'   r5   zArrowExpr.over.<locals>.func�   s  ø€ Ø×-Ñ-Ó/ˆCØ�y‰yÐ$Ø—_‘_¤T¨+´~ÀeÈCÈRÀjÐRUÓ7VÓ%WÓX�Ü>¸tÀRÈÓL‘
��7ÜØÜ˜GÐ$×1Ñ1°%¸±)Ó<×OÑOÐPSÓTó‘ô
 ?¸tÀRÈÓL‘
��7Ø�ÙØ�R—W‘W˜h°5ÀUÒK�ä˜g›,×3Ñ3°LÓAÐAˆwÐAð $ G 9ð -1ð 1ð ô *¨#Ó.Ð.à,˜B×,Ñ,¨lÐ;ˆMØ5B×5IÑ5I×5QÑ5QÖR¨r˜Ÿ™¨Ó*ÐRˆIÐRÜ�y”>Ø—k‘k ,¸u�kÓE×IÑIÈ'ÓR�Ø#×(Ñ(ØØØ(Ø)Ø#ð )ó �ð <CÖC°%˜Ÿ™ uÕ-ÒCÐCà')§y¡y°"·*±*˜ˆJØ×-Ñ-Ó/ˆCà$&ˆJØ,.ˆLÜ&)¨-×*?Ñ*?ÀÓ&Kò IÑ"�˜(ÙØ×%Ñ% hÕ/ä=¸aÀÓN�Hà×%Ñ% hÔ/Ø ×'Ñ'¨Ô1à!Ÿk™k×5Ñ5à&×-Ñ-¨hÓ7ß.Ñ.¨xÓ8ß+™^Ó-ß$™Wà #Ø%ð 6ó 	�Gð !×'Ñ'¨¯	©	×(>Ñ(>¸wÓ(GÕHð)Ið, *˜"Ÿ/™/¨<Ð8ˆKØ"×+Ñ+¨JÀuÐ+ÓM×QÑQÐRYÓZˆHØ+�+×+Ñ+¨ZÐ8×=Ñ=ØØ"Ø#ØØð >ó ˆCð 8?Ö?¨e�C—N‘N 5Õ)Ò?Ð?ùòa Sùò DùòL @s   ÄK<Å$LË!Lr6   ri   )rl   rj   Úcurrent_nodeÚkindrY   ry   Úis_elementwiser€   ÚlistÚreversedÚiter_nodes_reversedrk   r   r    r!   )r"   r¦   rQ   r•   r5   rh   r¥   s   ```  @@r'   ÚoverzArrowExpr.over„   sÓ   ü€ ÙÙˆO�8Ø×2Ñ2°8Ó<Ð<ð �~‰~ˆÙØ×!Ñ!×&Ñ&×5Ò5Ø—	‘	Ð%¨d¯i©i×.FÒ.Fð_ð ô & cÓ*Ð*ä”Xœd 4§>¡>×#EÑ#EÓ#GÓHÓIÓJˆ÷I	@ñ I	@ðV �~‰~ØØ"&×"=Ñ"=Ø#×7Ñ7Ø—M‘Mð	 ó 
ð 	
r)   N)r#   z'EvalSeries[ArrowDataFrame, ArrowSeries]r$   úEvalNames[ArrowDataFrame]r%   zAliasNames | Noner&   r   r   r   r8   ÚNone)r9   z
type[Self]r4   r®   r:   r   r8   r   )rC   Úintr:   r   r8   r   )r8   r   )rI   Úboolr8   zdict[str, Any])rQ   úSequence[str]r8   r   )r¦   r²   rQ   r²   r8   r   )Ú__name__Ú
__module__Ú__qualname__r   ÚPYARROWr   Ú__annotations__r(   Úclassmethodr;   rE   rH   rM   rl   r­   r   Úewm_meanrL   r)   r'   r   r      sà   … Ø&4×&<Ñ&<€O�^Ó<ð *8×)?Ñ)?ñ à5ð ð  9ð	 ð
 .ð ð ð ð 'ð ð 
ó ð ð
Øð
à8ð
ð
 !ð
ð 
ò
ó ð
ð6 ò
ó ð
ó 5ð ).ñFØ!%ðFà	óFó

ó>i
ñV Ó �Hr)   r   r   )(Ú
__future__r   Útypingr   r   r   Úpyarrowr\   Úpyarrow.computeÚcomputer_   Únarwhals._arrow.seriesr   Únarwhals._compliantr   Únarwhals._expression_parsingr	   r
   Únarwhals._utilsr   r   r   Únarwhals.functionsr   r{   Úcollections.abcr   Útyping_extensionsr   Únarwhals._arrow.dataframer   rG   r   Únarwhals._compliant.typingr   r   r   r   r   r   rL   r)   r'   ú<module>rÈ      s]   ðÝ "ç +Ñ +ã Ý å .Ý )ß Z÷ñ õ
 -áÝ(å&å8Ý8ßLÑLß8ôR!�	Ð*¨KÐ7Ñ8õ R!r)   