Ë
    ðmxiQ#  ã                  óð   — d dl mZ d dlZd dlmZmZmZ d dlZd dl	m
Z d dlmZmZ d dlmZ d dlmZ d dlmZmZ er,d dl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! d dl"m#Z# d dl$m%Z%  G d„ ded   «      Z&y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚClassVar)Úcast_to_comparable_string_typesÚextract_py_scalar)ÚEagerGroupBy)Ú!evaluate_output_names_and_aliases)Úgenerate_temporary_column_nameÚrequires)ÚIteratorÚMappingÚSequence)ÚArrowDataFrame)Ú	ArrowExpr)ÚAggregateOptionsÚAggregationÚ
Incomplete)ÚNarwhalsAggregation)ÚUniqueKeepStrategyc                  ó(  — e Zd ZU ddddddddd	dd
dddddœZded<   ddddœZded<    ed«      Zded<    ed«      Zded<    ed«      Z	ded<    ed«      Z
ded<    ed«      Zded<   	 	 	 	 	 	 	 	 d%d„Z	 	 	 	 	 	 d&d „Z	 	 	 	 	 	 	 	 d'd!„Zd(d"„Zd)d#„Zy$)*ÚArrowGroupByÚsumÚmeanÚapproximate_medianÚmaxÚminÚstddevÚvarianceÚcountÚcount_distinctÚallÚanyÚfirstÚlast)r   r   Úmedianr   r   ÚstdÚvarÚlenÚn_uniquer    r"   r#   r$   r%   Ú	any_valuez3ClassVar[Mapping[NarwhalsAggregation, Aggregation]]Ú_REMAP_AGGS)r#   r$   r%   z2ClassVar[Mapping[UniqueKeepStrategy, Aggregation]]Ú_REMAP_UNIQUE)r)   r*   z(ClassVar[frozenset[NarwhalsAggregation]]Ú_OPTION_COUNT_ALL)r    Ú_OPTION_COUNT_VALID)r$   r%   r+   Ú_OPTION_ORDERED)r'   r(   Ú_OPTION_VARIANCE)r#   r"   r   Ú_OPTION_SCALARc              ó  — || _         | j                  ||¬«      \  }| _        | _        |r|j	                  | j                  «      n|| _        t        j                  | j                  j                  | j                  «      | _
        || _        y )N)Úkeys)Ú_dfÚ_parse_keysÚ_keysÚ_output_key_namesÚ
drop_nullsÚ_compliant_frameÚpaÚTableGroupByÚ	compliantÚnativeÚ_groupedÚ_drop_null_keys)ÚselfÚdfr4   Údrop_null_keysÚframes        úO/home/htdocs/ttos/venv/lib/python3.12/site-packages/narwhals/_arrow/group_by.pyÚ__init__zArrowGroupBy.__init__?   sp   € ð ˆŒØ48×4DÑ4DÀRÈdÐ4DÓ4SÑ1ˆˆtŒz˜4Ô1Ù@N × 0Ñ 0°·±Ô <ÐTYˆÔÜŸ™¨¯©×(=Ñ(=¸t¿z¹zÓJˆŒØ-ˆÕó    c               ó  — d }| j                  |«      }| j                  |«      }|| j                  v r|d   }t        j                  |¬«      }n¦|| j
                  v rt        j                  d¬«      }n�|| j                  v rt        j                  d¬«      }n\|| j                  v rt        j                  d¬«      }n7|| j                  v r)|j                  dd	«      }| j                  |||¬
«      \  }}|| j                  |«      |fS )NÚddof)rI   r"   ©ÚmodeÚ
only_validr   )Ú	min_countÚignore_nullsF)rN   )Ú
_leaf_nameÚ_kwargsr1   ÚpcÚVarianceOptionsr.   ÚCountOptionsr/   r2   ÚScalarAggregateOptionsr0   ÚgetÚ_ordered_aggÚ_remap_expr_name)rA   ÚgroupedÚexprÚoptionÚfunction_nameÚkwargsrI   rN   s           rE   Ú_configure_aggzArrowGroupBy._configure_aggM   sú   € ð +/ˆØŸ™¨Ó-ˆØ—‘˜dÓ#ˆØ˜D×1Ñ1Ñ1Ø˜&‘>ˆDÜ×'Ñ'¨TÔ2‰FØ˜d×4Ñ4Ñ4Ü—_‘_¨%Ô0‰FØ˜d×6Ñ6Ñ6Ü—_‘_¨,Ô7‰FØ˜d×1Ñ1Ñ1Ü×.Ñ.¸Ô;‰FØ˜d×2Ñ2Ñ2Ø!Ÿ:™: n°eÓ<ˆLØ"×/Ñ/Ø˜°\ð 0ó ‰OˆG�Vð ˜×-Ñ-¨mÓ<¸fÐDÐDrG   c              óJ  — | j                   j                  }|dk\  rE|j                  r9| j                   j                  }t	        j
                  ||j                  d¬«      }n,|dk  r'd|› dt        j                  |«      ›d�}t        |«      ‚|t        j                  |¬«      fS )a»  The default behavior of `pyarrow` raises when `first` or `last` are used.

        You'd see an error like:

            ArrowNotImplementedError: Using ordered aggregator in multiple threaded execution is not supported

        We need to **disable** multi-threading to use them, but the ability to do so
        wasn't possible before `14.0.0` ([pyarrow-36709])

        [pyarrow-36709]: https://github.com/apache/arrow/issues/36709
        )é   r   F)Úuse_threadszUsing `z]()` in a `group_by().agg(...)` context is only available in 'pyarrow>=14.0.0', found version z3.

See https://github.com/apache/arrow/issues/36709)Ú
skip_nulls)r=   Ú_backend_versionÚ_use_threadsr>   r;   r<   r4   r   Ú_unparse_versionÚNotImplementedErrorrQ   rT   )rA   rX   ÚnamerN   Úbackend_versionr>   Úmsgs          rE   rV   zArrowGroupBy._ordered_aggc   s¢   € ð& Ÿ.™.×9Ñ9ˆØ˜gÒ%¨'×*>Ò*>Ø—^‘^×*Ñ*ˆFÜ—o‘o f¨g¯l©lÈÔN‰GØ˜wÒ&à˜$˜ð  !Ü!)×!:Ñ!:¸?Ó!KÐ Nð OCðDð ô
 & cÓ*Ð*Øœ×1Ñ1¸\ÔJÐJÐJrG   c           	     ó@  — | j                  |«       g }| j                  j                  «       }| j                  j                  «       }g | j                  ¢| j                  ¢­}| j                  }|D �]G  }t        || j                  |«      \  }}	|j                  }
t        |
j                  «       «      }t        |«      dk(  rŠ|d   j                  dk7  rd}t        |«      ‚|j                  |	d   «       |j                  | j                  d   › d�«       |j                  | j                  d   dt        j                  d¬«      f«       ŒÛ| j!                  ||«      \  }}}|j#                  |	«       |j#                  |D �cg c]	  }|› d	|› �‘Œ c}«       |j#                  |D �cg c]  }|||f‘Œ	 c}«       �ŒJ |j%                  |«      }t'        j(                  t        «      }t+        |«      D ]  \  }}||   j                  |«       Œ t-        |j.                  «      t-        |«      k(  r!t        |j.                  «      t        |«      k(  sd
|› d|j.                  › d�}t        |«      ‚|j.                  D �cg c]  }||   j1                  d«      ‘Œ }}|D �cg c]  }||   ‘Œ	 }}|j3                  |«      }| j                  j5                  |«      j7                  t9        t;        | j                  | j                  «      «      «      S c c}w c c}w c c}w c c}w )Né   r   r)   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issuesÚ_countr    r"   rJ   Ú_z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issues)Ú_ensure_all_simpler7   Úcopyr8   r?   r
   r=   Ú	_metadataÚlistÚop_nodes_reversedr)   rf   ÚAssertionErrorÚappendrQ   rS   r]   ÚextendÚ	aggregateÚcollectionsÚdefaultdictÚ	enumerateÚsetÚcolumn_namesÚpopÚrename_columnsÚ_with_nativeÚrenameÚdictÚzip)rA   ÚexprsÚaggsÚexpected_pyarrow_column_namesÚnew_column_namesÚexcluderX   rY   Úoutput_namesÚaliasesÚmdrq   rh   r[   rZ   Úoutput_nameÚresult_simpleÚexpected_old_names_indicesÚidxÚitemÚ	index_mapÚis                         rE   ÚaggzArrowGroupBy.aggƒ   s  € Ø×Ñ Ô&ØGIˆØ37·:±:·?±?Ó3DÐ%Ø&*§j¡j§o¡oÓ&7ÐØ8�D—J‘JÐ8 ×!7Ñ!7Ñ8ˆØ—-‘-ˆàó 	ˆDÜ$EØ�d—n‘n gó%Ñ!ˆL˜'ð —‘ˆBÜ $ R×%9Ñ%9Ó%;Ó <ÐÜÐ$Ó%¨Ò*à$ QÑ'×,Ñ,°Ò5Ø{�CÜ(¨Ó-Ð-à ×'Ñ'¨°©
Ô3Ø-×4Ñ4¸¿
¹
À1¹°ÀfÐ5MÔNØ—‘˜TŸZ™Z¨™]¨G´R·_±_È%Ô5PÐQÔRØà-1×-@Ñ-@ÀÈ$Ó-OÑ*ˆG�] FØ×#Ñ# GÔ,Ø)×0Ñ0ØEQÖR°k�K�=  - Ò1ÒRôð �K‰KØIUÖV¸+�+˜}¨fÒ5ÒVöð-	ð4  ×)Ñ)¨$Ó/ˆô <G×;RÑ;RÔSWÓ;XÐ"Ü"Ð#@ÓAò 	9‰IˆC�Ø& tÑ,×3Ñ3°CÕ8ð	9ô �×*Ñ*Ó+¬sÐ3PÓ/QÒQÜ�M×.Ñ.Ó/´3Ð7TÓ3UÒUð 5Ð5RÐ4Sð TØ$×1Ñ1Ð2ð 3YðYð ô
 ! Ó%Ð%à@M×@ZÑ@Zö 
Ø8<Ð& tÑ,×0Ñ0°Õ3ð 
ˆ	ð  
ð :CÖC°AÐ,¨QÓ/ÐCÐÐCØ%×4Ñ4Ð5EÓFˆØ�~‰~×*Ñ*¨=Ó9×@Ñ@Ü”�T—Z‘Z ×!7Ñ!7Ó8Ó9ó
ð 	
ùò7 Sùò Wùò& 
ùò Ds   ÆL
Æ&L
É;LÊLc           	   #  óº  ‡
K  — t        d| j                  j                  ¬«      }d}| j                  j                  Š
t	        ˆ
fd„| j
                  D «       ddiŽ\  }}t        j                  } |g |¢|‘­d|dœŽ}‰
j                  d	||¬
«      Š
t        j                  |«      D ]²  }| j                  j                  ‰
j                  t        j                  ‰
|   |«      «      j                  |g«      «      } |j                  | j
                  Ž j                  d	«      }	t!        d„ |	D «       «       |j                  | j"                  j                  Ž f–— Œ´ y ­w)Né   )Ún_bytesÚcolumnsÚ__null_token_value__c              3  ó(   •K  — | ]	  }‰|   –— Œ y ­w©N© )Ú.0ÚkeyÚtables     €rE   ú	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>Æ   s   øè ø€ Ò/˜Sˆe�C�jÑ/ùs   ƒÚ	separatorÚ Úreplace)Únull_handlingÚnull_replacementr   )r�   Úfield_Úcolumnc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr—   )r   )r™   Úels     rE   rœ   z(ArrowGroupBy.__iter__.<locals>.<genexpr>Ö   s   è ø€ Ò:°Ô'¨×+Ñ:ùs   ‚)r   r=   r”   r>   r   r7   rQ   Úbinary_join_element_wiseÚ
add_columnÚuniquer}   ÚfilterÚequalÚdropÚsimple_selectÚrowÚtupler5   )rA   Ú	col_tokenÚ
null_tokenÚitÚseparator_scalarÚ
concat_strÚ
key_valuesÚvÚtr­   r›   s             @rE   Ú__iter__zArrowGroupBy.__iter__¾   sJ  øè ø€ Ü2Ø˜tŸ~™~×5Ñ5ô
ˆ	ð 1ˆ
à—‘×%Ñ%ˆÜ>Û/ D§J¡JÔ/ð 
Ø;=ñ 
ÑˆÐô
 "$×!<Ñ!<ˆ
Ùð 
Øð
Ø!ñ
Ø1:ÈZò
ˆ
ð × Ñ  1¨Y¸zÐ ÓJˆä—‘˜:Ó&ò 	ˆAØ—‘×+Ñ+Ø—‘œRŸX™X e¨IÑ&6¸Ó:Ó;×@Ñ@À)ÀÓMóˆAð "�!—/‘/ 4§:¡:Ð.×2Ñ2°1Ó5ˆCäÑ:°cÔ:Ó:Ø�—‘ §¡×!1Ñ!1Ð2ðó ñ	ùs   ƒEEN)rB   r   r4   z#Sequence[ArrowExpr] | Sequence[str]rC   ÚboolÚreturnÚNone)rX   úpa.TableGroupByrY   r   r¹   z<tuple[pa.TableGroupBy, Aggregation, AggregateOptions | None])rX   r»   rf   r   rN   r¸   r¹   z(tuple[pa.TableGroupBy, AggregateOptions])r�   r   r¹   r   )r¹   z$Iterator[tuple[Any, ArrowDataFrame]])Ú__name__Ú
__module__Ú__qualname__r,   Ú__annotations__r-   Ú	frozensetr.   r/   r0   r1   r2   rF   r]   rV   r�   r·   r˜   rG   rE   r   r      sS  … àØØ&ØØØØØØ$ØØØØØØñH€KÐDó ð$ ØØñI€MÐEó ñ
 CLØóCÐÐ?ó ñ ENÈjÓDYÐÐAÓYÙ@IØ&óA€OÐ=ó ñ BKÈ>ÓAZÐÐ>ÓZÙ?HØó@€NÐ<ó ð.àð.ð 2ð.ð ð.ð 
ó.ðEØ&ðEØ.7ðEà	EóEð,Kà ðKð "ðKð ðKð 
2óKó@9
ôvrG   r   )r   r   r   )'Ú
__future__r   rv   Útypingr   r   r   Úpyarrowr;   Úpyarrow.computeÚcomputerQ   Únarwhals._arrow.utilsr   r   Únarwhals._compliantr	   Únarwhals._expression_parsingr
   Únarwhals._utilsr   r   Úcollections.abcr   r   r   Únarwhals._arrow.dataframer   Únarwhals._arrow.exprr   Únarwhals._arrow.typingr   r   r   Únarwhals._compliant.typingr   Únarwhals.typingr   r   r˜   rG   rE   ú<module>rÐ      sX   ðÝ "ã ß /Ñ /ã Ý ç TÝ ,Ý Jß Dáß;Ñ;å8Ý.÷ñ õ
 ?Ý2ô|�<Ð LÑMõ |rG   