Ë
    ÚÍ:jä#  ã                  óô   — 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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)ÚBACKEND_VERSIONÚ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|| _        || _        y )N)Úkeys)Ú_dfÚ_parse_keysÚ_keysÚ_output_key_namesÚ
drop_nullsÚ_compliant_frameÚ_drop_null_keys)ÚselfÚdfr5   Údrop_null_keysÚframes        úm/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/narwhals/_arrow/group_by.pyÚ__init__zArrowGroupBy.__init__C   sP   € ð ˆŒØ48×4DÑ4DÀRÈdÐ4DÓ4SÑ1ˆˆtŒz˜4Ô1Ù@N × 0Ñ 0°·±Ô <ÐTYˆÔØ-ˆÕó    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¬«      }n6|| j                  v r(|j                  dd	«      }t        j                  |¬
«      }| j                  |«      |fS )NÚddof)rE   r#   ©ÚmodeÚ
only_validr   )Ú	min_countÚignore_nullsF)Ú
skip_nulls)Ú
_leaf_nameÚ_kwargsr2   ÚpcÚVarianceOptionsr/   ÚCountOptionsr0   r3   ÚScalarAggregateOptionsr1   ÚgetÚ_remap_expr_name)r=   ÚexprÚoptionÚfunction_nameÚkwargsrE   rJ   s          rA   Ú_configure_aggzArrowGroupBy._configure_aggP   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Ü×.Ñ.¸,ÔGˆFØ×$Ñ$ ]Ó3°VÐ;Ð;rC   c                óÜ  — d}d}|D ]|  }t        |j                  j                  «       «      }|j                  | j                  vrŒ?d}|j
                  j                  dd«      x}sŒ`|r||k7  rd|› d|› d�}t        |«      ‚|}Œ~ |s1t        dk  r(d	t        j                  t        «      ›d
�}t        |«      ‚|rGt        j                   | j                  j                  |dddœŽj                  | j                   |¬«      S |s6t        j                  | j                  j                  | j                   d¬«      S t        j                  | j                  j                  | j                   «      S )N© TFÚorder_byz?Only one `order_by` can be specified in `group_by`. Found both z and ú.)é   zlUsing `first/last` 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)Ú
descendingÚ
nulls_last)Úuse_threads)ÚnextÚ	_metadataÚop_nodes_reversedÚnamer1   rW   rR   ÚNotImplementedErrorr   r   Ú_unparse_versionÚpaÚTableGroupByÚ	compliantÚsortÚnativer8   )r=   Úexprsr[   r`   rT   ÚmdÚ_current_order_byÚmsgs           rA   Ú_configure_groupedzArrowGroupBy._configure_groupedd   s_  € ØˆØˆØò 
	-ˆDÜ�d—n‘n×6Ñ6Ó8Ó9ˆBØ�w‰w˜d×2Ñ2Ñ2ØàˆKØ$&§I¡I§M¡M°*¸bÓ$AÐAÐ ÑAÙÐ 1°XÒ =Ø[Ð\dÐ[eÐejÐk|Ðj}Ð}~Ð�CÜ-¨cÓ2Ð2Ø,‘ð
	-ñ œ°Ò6ð!Ü!)×!:Ñ!:¼?Ó!KÐ Nð OCðDð ô
 & cÓ*Ð*ÙÜ—?‘?Ø#�—‘×#Ñ# X¸%ÈEÒR×YÑYØ—
‘
Ø'ôð ñ
 Ü—?‘? 4§>¡>×#8Ñ#8¸$¿*¹*ÐRWÔXÐXä�‰˜tŸ~™~×4Ñ4°d·j±jÓAÐArC   c           	     óF  — | j                  |«        | j                  |Ž }g }| j                  j                  «       }| j                  j                  «       }g | j                  ¢| j                  ¢­}|D �]E  }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}«       �ŒH |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                  d¬«      «      «      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#   rF   Ú_z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issuesF)Ústrict)Ú_ensure_all_simplerp   r8   Úcopyr9   r   ri   rb   Úlistrc   r*   rd   ÚAssertionErrorÚappendrN   rP   rX   ÚextendÚ	aggregateÚcollectionsÚdefaultdictÚ	enumerateÚsetÚcolumn_namesÚpopÚrename_columnsÚ_with_nativeÚrenameÚdictÚzip)r=   rl   ÚgroupedÚaggsÚexpected_pyarrow_column_namesÚnew_column_namesÚexcluderT   Úoutput_namesÚaliasesrm   rc   ro   rV   rU   Úoutput_nameÚresult_simpleÚexpected_old_names_indicesÚidxÚitemÚ	index_mapÚis                         rA   ÚaggzArrowGroupBy.agg„   s  € Ø×Ñ Ô&Ø)�$×)Ñ)¨5Ð1ˆà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Øà$(×$7Ñ$7¸Ó$=Ñ!ˆM˜6Ø×#Ñ# 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ÀÔFÓGó
ð 	
ùò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©NrZ   )Ú.0ÚkeyÚtables     €rA   ú	<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     rA   r¡   z(ArrowGroupBy.__iter__.<locals>.<genexpr>Ø   s   è ø€ Ò:°Ô'¨×+Ñ:ùs   ‚)r   ri   rš   rk   r   r8   rN   Úbinary_join_element_wiseÚ
add_columnÚuniquer„   ÚfilterÚequalÚdropÚsimple_selectÚrowÚtupler6   )r=   Ú	col_tokenÚ
null_tokenÚitÚseparator_scalarÚ
concat_strÚ
key_valuesÚvÚtr²   r    s             @rA   Ú__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)r>   r   r5   z#Sequence[ArrowExpr] | Sequence[str]r?   ÚboolÚreturnÚNone)rT   r   r¾   z+tuple[Aggregation, AggregateOptions | None])rl   r   r¾   zpa.TableGroupBy)rl   r   r¾   r   )r¾   z$Iterator[tuple[Any, ArrowDataFrame]])Ú__name__Ú
__module__Ú__qualname__r-   Ú__annotations__r.   Ú	frozensetr/   r0   r1   r2   r3   rB   rX   rp   r–   r¼   rZ   rC   rA   r   r       s  … àØØ&ØØØØØØ$ØØØØØØñ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ð.ð ð.ð 
ó.ð<Øð<à	4ó<ó(Bó@:
ôxrC   r   )r   r   r   )(Ú
__future__r   r}   Útypingr   r   r   Úpyarrowrg   Úpyarrow.computeÚcomputerN   Únarwhals._arrow.utilsr   r   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   rZ   rC   rA   ú<module>rÔ      sa   ðÝ "ã ß /Ñ /ã Ý ÷ñ õ
 -Ý Jß Dáß;Ñ;å8Ý.÷ñ õ
 ?Ý2ôz�<Ð LÑMõ zrC   