§
    Šhþh×!  ã                  óþ   — 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&dS )é    )Ú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œ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<   d7d'„Zd8d-„Zd9d1„Zd:d3„Zd;d5„Zd6S )<Ú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%   z3ClassVar[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%   Ú_OPTION_ORDERED)r'   r(   Ú_OPTION_VARIANCE)r#   r"   Ú_OPTION_SCALARÚdfr   Úkeysú#Sequence[ArrowExpr] | Sequence[str]Údrop_null_keysÚboolÚreturnÚNonec              ó  — || _         |                      ||¬¦  «        \  }| _        | _        |r|                     | j        ¦  «        n|| _        t          j        | j        j	        | j        ¦  «        | _
        || _        d S )N)r3   )Ú_dfÚ_parse_keysÚ_keysÚ_output_key_namesÚ
drop_nullsÚ_compliant_frameÚpaÚTableGroupByÚ	compliantÚnativeÚ_groupedÚ_drop_null_keys)Úselfr2   r3   r5   Úframes        úO/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_arrow/group_by.pyÚ__init__zArrowGroupBy.__init__<   sz   € ð ˆŒØ48×4DÒ4DÀRÈdÐ4DÑ4SÔ4SÑ1ˆˆtŒz˜4Ô1Ø@NÐ Y × 0Ò 0°´Ñ <Ô <Ð <ÐTYˆÔÝœ¨¬Ô(=¸t¼zÑJÔJˆŒØ-ˆÔÐÐó    Úgroupedúpa.TableGroupByÚexprr   ú<tuple[pa.TableGroupBy, Aggregation, AggregateOptions | None]c               óÒ  — d }|                       |¦  «        }|| j        v r1|j                             dd¦  «        }t	          j        |¬¦  «        }n|| j        v rt	          j        d¬¦  «        }n`|| j        v rt	          j        d¬¦  «        }nA|| j	        v rt	          j
        d¬¦  «        }n"|| j        v r|                      ||¦  «        \  }}||                      |¦  «        |fS )	NÚddofé   )rP   r"   ©ÚmodeÚ
only_validr   )Ú	min_count)Ú
_leaf_namer0   Ú_scalar_kwargsÚgetÚpcÚVarianceOptionsr-   ÚCountOptionsr.   r1   ÚScalarAggregateOptionsr/   Ú_ordered_aggÚ_remap_expr_name)rF   rK   rM   ÚoptionÚfunction_namerP   s         rH   Ú_configure_aggzArrowGroupBy._configure_aggJ   sþ   € ð +/ˆØŸš¨Ñ-Ô-ˆØ˜DÔ1Ð1Ð1ØÔ&×*Ò*¨6°1Ñ5Ô5ˆDÝÔ'¨TÐ2Ñ2Ô2ˆFˆFØ˜dÔ4Ð4Ð4Ý”_¨%Ð0Ñ0Ô0ˆFˆFØ˜dÔ6Ð6Ð6Ý”_¨,Ð7Ñ7Ô7ˆFˆFØ˜dÔ1Ð1Ð1ÝÔ.¸Ð;Ñ;Ô;ˆFˆFØ˜dÔ2Ð2Ð2Ø"×/Ò/°¸ÑGÔG‰OˆG�VØ˜×-Ò-¨mÑ<Ô<¸fÐDÐDrJ   Únamer   ú(tuple[pa.TableGroupBy, AggregateOptions]c               ó  — | j         j        }|dk    r0|j        r)| j         j        }t	          j        ||j        d¬¦  «        }n0|dk     r*d|› dt          j        |¦  «        ›d�}t          |¦  «        ‚|t          j        d¬¦  «        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)rB   Ú_backend_versionÚ_use_threadsrC   r@   rA   r3   r   Ú_unparse_versionÚNotImplementedErrorrY   r\   )rF   rK   rb   Úbackend_versionrC   Úmsgs         rH   r]   zArrowGroupBy._ordered_agg\   s²   € ð œ.Ô9ˆØ˜gÒ%Ð%¨'Ô*>Ð%Ø”^Ô*ˆFÝ”o f¨g¬lÈÐNÑNÔNˆGˆGØ˜wÒ&Ð&ðD˜$ð Dð DÝ!)Ô!:¸?Ñ!KÔ!KðDð Dð Dð õ
 & cÑ*Ô*Ð*Ø�Ô1¸UÐCÑCÔCÐCÐCrJ   Úexprsc                óÂ  ‡‡‡‡— |                       |¦  «         g }| j                             ¦   «         }| j                             ¦   «         Šg | j        ¢| j        ¢R }| j        }|D �]*}t          || j        |¦  «        \  }}|j        dk    r‘|j        dk    rd}	t          |	¦  «        ‚‰ 
                    |d         ¦  «         | 
                    | j        d         › d�¦  «         | 
                    | j        d         dt          j        d¬¦  «        f¦  «         Œ¸|                      ||¦  «        \  }ŠŠ‰                     |¦  «         |                     ˆfd„|D ¦   «         ¦  «         |                     ˆˆfd	„|D ¦   «         ¦  «         �Œ,|                     |¦  «        }
t!          j        t$          ¦  «        Št'          |¦  «        D ] \  }}‰|          
                    |¦  «         Œ!t)          |
j        ¦  «        t)          |¦  «        k    r%t-          |
j        ¦  «        t-          |¦  «        k    sd
|› d|
j        › d�}	t          |	¦  «        ‚ˆfd„|
j        D ¦   «         }ˆfd„|D ¦   «         Š|
                     ‰¦  «        }
| j                             |
¦  «                             t5          t7          | j        | j        ¦  «        ¦  «        ¦  «        S )Nr   r)   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issuesÚ_countr    r"   rR   c                ó   •— g | ]	}|› d ‰› �‘Œ
S )Ú_© )Ú.0Úoutput_namer`   s     €rH   ú
<listcomp>z$ArrowGroupBy.agg.<locals>.<listcomp>’   s'   ø€ ÐRÐRÐR°k�KÐ1Ð1 -Ð1Ð1ÐRÐRÐRrJ   c                ó   •— g | ]}|‰‰f‘ŒS rs   rs   )rt   ru   r`   r_   s     €€rH   rv   z$ArrowGroupBy.agg.<locals>.<listcomp>•   s    ø€ ÐVÐVÐV¸+�+˜}¨fÐ5ÐVÐVÐVrJ   z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issuesc                óF   •— g | ]}‰|                               d ¦  «        ‘ŒS )r   )Úpop)rt   ÚitemÚexpected_old_names_indicess     €rH   rv   z$ArrowGroupBy.agg.<locals>.<listcomp>¨   s:   ø€ ð  
ð  
ð  
Ø8<Ð& tÔ,×0Ò0°Ñ3Ô3ð 
ð  
ð  
rJ   c                ó    •— g | ]
}‰|         ‘ŒS rs   rs   )rt   ÚiÚnew_column_namess     €rH   rv   z$ArrowGroupBy.agg.<locals>.<listcomp>«   s   ø€ ÐCÐCÐC°AÐ,¨QÔ/ÐCÐCÐCrJ   )Ú_ensure_all_simpler<   Úcopyr=   rD   r
   rB   Ú_depthÚ_function_nameÚAssertionErrorÚappendrY   r[   ra   ÚextendÚ	aggregateÚcollectionsÚdefaultdictÚlistÚ	enumerateÚsetÚcolumn_namesr)   Úrename_columnsÚ_with_nativeÚrenameÚdictÚzip)rF   rn   ÚaggsÚexpected_pyarrow_column_namesÚexcluderK   rM   Úoutput_namesÚaliasesrm   Úresult_simpleÚidxrz   Ú	index_mapr{   r`   r~   r_   s                 @@@@rH   ÚaggzArrowGroupBy.aggw   s=  øøøø€ Ø×Ò Ñ&Ô&Ð&ØGIˆØ37´:·?²?Ñ3DÔ3DÐ%Ø&*¤j§o¢oÑ&7Ô&7ÐØ8�D”JÐ8 Ô!7Ð8Ð8ˆØ”-ˆàð 	ñ 	ˆDÝ$EØ�d”n gñ%ô %Ñ!ˆL˜'ð Œ{˜aÒÐàÔ&¨%Ò/Ð/Ø{�CÝ(¨Ñ-Ô-Ð-à ×'Ò'¨°¬
Ñ3Ô3Ð3Ø-×4Ò4¸¼
À1¼Ð5MÐ5MÐ5MÑNÔNÐNØ—’˜TœZ¨œ]¨GµR´_È%Ð5PÑ5PÔ5PÐQÑRÔRÐRØà-1×-@Ò-@ÀÈ$Ñ-OÔ-OÑ*ˆG�] FØ×#Ò# GÑ,Ô,Ð,Ø)×0Ò0ØRÐRÐRÐRÀ\ÐRÑRÔRñô ð ð �KŠKØVÐVÐVÐVÐVÈÐVÑVÔVñô ð ñ ð  ×)Ò)¨$Ñ/Ô/ˆõ <GÔ;RÕSWÑ;XÔ;XÐ"Ý"Ð#@ÑAÔAð 	9ð 	9‰IˆC�Ø& tÔ,×3Ò3°CÑ8Ô8Ð8Ð8å�Ô*Ñ+Ô+­sÐ3PÑ/QÔ/QÒQÐQÝ�MÔ.Ñ/Ô/µ3Ð7TÑ3UÔ3UÒUÐUðYÐ5Rð Yð YØ$Ô1ðYð Yð Yð õ
 ! Ñ%Ô%Ð%ð 
ð  
ð  
ð  
Ø@MÔ@Zð 
ñ  
ô  
ˆ	ð DÐCÐCÐC¸ÐCÑCÔCÐØ%×4Ò4Ð5EÑFÔFˆØŒ~×*Ò*¨=Ñ9Ô9×@Ò@Ý•�T”Z Ô!7Ñ8Ô8Ñ9Ô9ñ
ô 
ð 	
rJ   ú$Iterator[tuple[Any, ArrowDataFrame]]c           	   #  ó†  ‡
K  — t          d| j        j        ¬¦  «        }d}| j        j        Š
t	          ˆ
fd„| j        D ¦   «         ddiŽ\  }}t          j        } |g |¢|‘R d|dœŽ}‰
                     d	||¬
¦  «        Š
t          j	        |¦  «        D ]­}| j         
                    ‰
                     t          j        ‰
|         |¦  «        ¦  «                             |g¦  «        ¦  «        } |j        | j        Ž                      d	¦  «        }	t!          d„ |	D ¦   «         ¦  «         |j        | j        j        Ž fV — Œ®d S )Né   )Ún_bytesÚcolumnsÚ__null_token_value__c              3  ó(   •K  — | ]}‰|         V — Œd S ©Nrs   )rt   ÚkeyÚtables     €rH   ú	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>¹   s'   øè è € Ð/Ð/˜Sˆe�CŒjÐ/Ð/Ð/Ð/Ð/Ð/rJ   Ú	separatorÚ Úreplace)Únull_handlingÚnull_replacementr   )r}   Úfield_Úcolumnc              3  ó4   K  — | ]}t          |¦  «        V — Œd S r¢   )r   )rt   Úels     rH   r¥   z(ArrowGroupBy.__iter__.<locals>.<genexpr>É   s+   è è € Ð:Ð:°Õ'¨Ñ+Ô+Ð:Ð:Ð:Ð:Ð:Ð:rJ   )r   rB   rŸ   rC   r   r<   rY   Úbinary_join_element_wiseÚ
add_columnÚuniquerŽ   ÚfilterÚequalÚdropÚsimple_selectÚrowÚtupler:   )rF   Ú	col_tokenÚ
null_tokenÚitÚseparator_scalarÚ
concat_strÚ
key_valuesÚvÚtr¶   r¤   s             @rH   Ú__iter__zArrowGroupBy.__iter__±   s•  øè è € Ý2Ø˜tœ~Ô5ð
ñ 
ô 
ˆ	ð 1ˆ
à”Ô%ˆÝ>Ø/Ð/Ð/Ð/ D¤JÐ/Ñ/Ô/ð 
Ø;=ð 
ð  
ÑˆÐõ
 "$Ô!<ˆ
Ø�Zð 
Øð
Ø!ð
ð 
Ø1:ÈZð
ð 
ð 
ˆ
ð × Ò  1¨Y¸zÐ ÑJÔJˆå”˜:Ñ&Ô&ð 	ð 	ˆAØ”×+Ò+Ø—’�RœX e¨IÔ&6¸Ñ:Ô:Ñ;Ô;×@Ò@À)ÀÑMÔMñô ˆAð "�!”/ 4¤:Ð.×2Ò2°1Ñ5Ô5ˆCåÐ:Ð:°cÐ:Ñ:Ô:Ñ:Ô:Ø�” ¤Ô!1Ð2ðð ð ð ð ð	ð 	rJ   N)r2   r   r3   r4   r5   r6   r7   r8   )rK   rL   rM   r   r7   rN   )rK   rL   rb   r   r7   rc   )rn   r   r7   r   )r7   r›   )Ú__name__Ú
__module__Ú__qualname__r+   Ú__annotations__r,   Ú	frozensetr-   r.   r/   r0   r1   rI   ra   r]   rš   rÀ   rs   rJ   rH   r   r      s°  € € € € € € àØØ&ØØØØØØ$ØØØØØðHð H€Kð ð ð ñ ð" ØØðIð I€Mð ð ð ñ ð
 CLÀ)ØñCô CÐð ð ð ñ ð ENÀIÈjÑDYÔDYÐÐYÐYÐYÑYØ@IÀ	ØñAô A€Oð ð ð ñ ð BKÀÈ>ÑAZÔAZÐÐZÐZÐZÑZØ?H¸yÈÑ?XÔ?X€NÐXÐXÐXÑXð.ð .ð .ð .ðEð Eð Eð Eð$Dð Dð Dð Dð68
ð 8
ð 8
ð 8
ðtð ð ð ð ð rJ   r   )r   r   r   )'Ú
__future__r   r‡   Útypingr   r   r   Úpyarrowr@   Úpyarrow.computeÚcomputerY   Ú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   rs   rJ   rH   ú<module>rÕ      s™  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à Ð Ð Ð Ø Ð Ð Ð Ð Ð à TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø JÐ JÐ JÐ JÐ JÐ JØ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dàð 3Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à8Ð8Ð8Ð8Ð8Ð8Ø.Ð.Ð.Ð.Ð.Ð.ðð ð ð ð ð ð ð ð ð ð
 ?Ð>Ð>Ð>Ð>Ð>Ø2Ð2Ð2Ð2Ð2Ð2ðoð oð oð oð o�<Ð LÔMñ oô oð oð oð orJ   