Ë
    z�hÌ4  ã                  óè   — d dl mZ d dl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 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 d dlmZ d dlmZ erd dlmZ d dlmZ d dlmZ  G d„ ded   «      Zy)é    )ÚannotationsN)ÚTYPE_CHECKING)ÚAny)ÚClassVar)ÚIterator)ÚMapping)ÚSequence)ÚEagerGroupBy)Ú!evaluate_output_names_and_aliases)Úselect_columns_by_name)Úset_columns)Úfind_stacklevel)ÚNarwhalsAggregation)ÚPandasLikeDataFrame)ÚPandasLikeExprc                  óZ   — e Zd ZU ddddddddd	d
dœ
Zded<   	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zy)ÚPandasLikeGroupByÚsumÚmeanÚmedianÚmaxÚminÚstdÚvarÚsizeÚnuniqueÚcount)
r   r   r   r   r   r   r   ÚlenÚn_uniquer   z+ClassVar[Mapping[NarwhalsAggregation, Any]]Ú_REMAP_AGGSc              ó�  — || _         || _        | j                  ||¬«      \  | _        | _        | _        t        | j                  j                  j                  j                  «      j                  | j                  j                  «      r'| j                  j                  j                  d¬«      }n| j                  j                  }| j                  j                  j                  «       r­| j                  j                   dk  r”|sd | j                  j"                  | j                  Ž j                  j%                  «       j'                  «       j'                  «       rd}t)        |«      ‚|j+                  t-        | j                  «      ddd¬«      | _        y |j+                  t-        | j                  «      dd|d¬«      | _        y )	N)ÚkeysT)Údrop)é   r$   z:Grouping by null values is not supported in pandas < 1.1.0F)ÚsortÚas_indexÚobserved)r%   r&   Údropnar'   )Ú_dfÚ_drop_null_keysÚ_parse_keysÚ_compliant_frameÚ_keysÚ_output_key_namesÚsetÚ	compliantÚnativeÚindexÚnamesÚintersectionÚcolumnsÚreset_indexÚ_implementationÚ	is_pandasÚ_backend_versionÚsimple_selectÚisnaÚanyÚNotImplementedErrorÚgroupbyÚlistÚ_grouped)ÚselfÚdfr"   Údrop_null_keysÚnative_frameÚmsgs         ú\/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/narwhals/_pandas_like/group_by.pyÚ__init__zPandasLikeGroupBy.__init__&   ss  € ð ˆŒØ-ˆÔØDH×DTÑDTØ�Tð EUó E
ÑAˆÔ˜tœz¨4Ô+Aô
 ˆt�~‰~×$Ñ$×*Ñ*×0Ñ0Ó1×>Ñ>¸t¿~¹~×?UÑ?UÔVØŸ>™>×0Ñ0×<Ñ<À$Ð<ÓG‰LàŸ>™>×0Ñ0ˆLà�N‰N×*Ñ*×4Ñ4Ô6Ø—‘×/Ñ/°&Ò8ñ #Ø0�D—N‘N×0Ñ0°$·*±*Ð=×DÑD×IÑIÓK×OÑOÓQ×UÑUÔWàR�Ü)¨#Ó.Ð.Ø(×0Ñ0Ü�T—Z‘ZÓ ØØØð	 1ó ˆD�Mð )×0Ñ0Ü�T—Z‘ZÓ ØØØ%Øð 1ó ˆD�Mó    c                ó  ‡ ‡‡*‡+— ‰ j                   j                  Š+‰ j                   j                  Š*‰ j                  j	                  «       }d}g ‰ j                  ¢‰ j
                  ¢­}‰D ]A  }t        |‰ j                   |«      \  }}|j                  |«       ‰ j                  |«      rŒ@d}ŒC i }t        j                  t        «      }	t        «       }
t        j                  d„ «      }t        j                  d„ «      }g }g }|�rØ‰D �]Ö  }t        |‰ j                   |«      \  }}|j                  dk(  r‰‰ j                  |j                  «      }|
j!                  |«       |D ]W  }|j#                  ‰ j                  d   › d|› �«       |	‰ j                  d      j#                  |«       |j#                  |«       ŒY Œ¶‰ j                  ‰ j%                  |«      «      }|dk(  }|dk(  }|d	k(  }t'        ||«      D ]ã  \  }}|r|||<   Œ|rC|j(                  d
   x}dk7  r/||   d   j#                  |«       ||   d   j#                  |«       ŒS|rC|j(                  d
   x}dk7  r/||   d   j#                  |«       ||   d   j#                  |«       Œ˜|j#                  |› d|› �«       |	|   j#                  |«       |j#                  |«       |
j!                  |«       Œå �ŒÙ g }|	�rÃt+        |
«      dk(  r}|
j-                  «       x}dk7  rht+        |	«      dkD  rZ t/        ‰ j0                  t        |	j3                  «       «         |«      «       }|j4                  D �cg c]	  }|› d|› �‘Œ c}|_        nD‰ j0                  j7                  |	«      }|j4                  D ��cg c]  \  }}|› d|› �‘Œ c}}|_        t        |j4                  «      t        |«      k(  r!t+        |j4                  «      t+        |«      k(  sd|› d|j4                  › d�}t9        |«      ‚t        j                  t        «      }t;        |«      D ]  \  }}||   j#                  |«       Œ |j4                  D �cg c]  }||   j-                  d«      ‘Œ } }| D �!cg c]  }!||!   ‘Œ	 c}!|_        |j#                  |«       |re‰ j0                  t        |j=                  «       «         j?                  d¬«      }"t        |j3                  «       «      |"_        |j#                  |"«       |r*|j                  ˆ*ˆ+ˆ fd„|jA                  «       D «       «       |r*|j                  ˆ*ˆ+ˆ fd„|jA                  «       D «       «       |r¤t        jB                  d„ |D «       «      }#tE        d„ |#j=                  «       D «       «      r<d}|#jA                  «       D ]  \  }$}%|%dkD  r|d|$› d|%› d�z  }ŒŒ d|› �}tG        |«      ‚‰ j                   jI                  «       }&|&jK                  |«      }'n`‰ j                   jM                  «       jO                  t        ‰ j0                  jP                  j3                  «       «      ‰ j                  ¬«      }'|'jS                  d¬«       ‰ j                   jU                  tW        |'|‰*‰+«      «      jY                  t[        t'        ‰ j                  ‰ j
                  «      «      «      S ‰ j                   j\                  j^                  rd}tG        |«      ‚ta        jb                  dtd        tg        «       ¬«       d"ˆˆ fd„}(‰+ji                  «       r#‰*d k\  r‰ j0                  jk                  |(d¬!«      })n‰ j0                  jk                  |(«      })|)jS                  d¬«       ‰ j                   jU                  tW        |)|‰*‰+«      «      jY                  t[        t'        ‰ j                  ‰ j
                  «      «      «      S c c}w c c}}w c c}w c c}!w )#NTFc                 ó
   — g g fS ©N© rL   rH   rF   ú<lambda>z'PandasLikeGroupBy.agg.<locals>.<lambda>h   ó
   € �R˜�H€ rH   c                 ó
   — g g fS rK   rL   rL   rH   rF   rM   z'PandasLikeGroupBy.agg.<locals>.<lambda>k   rN   rH   r   Ú_r   r   r   Úddofr$   r   z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issues)r(   c              3  ó‚   •K  — | ]6  \  }\  }}t        ‰j                  |   j                  |¬ «      |‰‰¬«      –— Œ8 y­w©)rQ   )r5   ÚimplementationÚbackend_versionN)r   r@   r   )Ú.0rQ   Ústd_output_namesÚstd_aliasesrU   rT   rA   s       €€€rF   ú	<genexpr>z(PandasLikeGroupBy.agg.<locals>.<genexpr>Ê   óS   øè ø€ ò #ñ >˜Ñ=Ð/°ô  ØŸ™Ð&6Ñ7×;Ñ;ÀÐ;ÓFØ +Ø'5Ø(7÷	ð ñ#ùó   ƒ<?c              3  ó‚   •K  — | ]6  \  }\  }}t        ‰j                  |   j                  |¬ «      |‰‰¬«      –— Œ8 y­wrS   )r   r@   r   )rV   rQ   Úvar_output_namesÚvar_aliasesrU   rT   rA   s       €€€rF   rY   z(PandasLikeGroupBy.agg.<locals>.<genexpr>Ô   rZ   r[   c              3  ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wrK   rL   )rV   ÚframeÚcs      rF   rY   z(PandasLikeGroupBy.agg.<locals>.<genexpr>ß   s'   è ø€ ò ;Ø¸ò;Ø34”Að;Øñ;ùs   ‚c              3  ó&   K  — | ]	  }|d kD  –— Œ y­w)r$   NrL   )rV   Úvs     rF   rY   z(PandasLikeGroupBy.agg.<locals>.<genexpr>â   s   è ø€ ÒD �q˜1•uÑDùs   ‚Ú z
- 'z' z timesz"Expected unique output names, got:)r5   )Úinplaceau  No results for group-by aggregation.

Hint: you were probably trying to apply a non-elementary aggregation with a pandas-like API.
Please rewrite your query such that group-by aggregations are elementary. For example, instead of:

    df.group_by('a').agg(nw.col('b').round(2).mean())

use:

    df.with_columns(nw.col('b').round(2)).group_by('a').agg(nw.col('b').mean())

a5  Found complex group-by expression, which can't be expressed efficiently with the pandas API. If you can, please rewrite your query such that group-by aggregations are simple (e.g. mean, std, min, max, ...). 

Please see: https://narwhals-dev.github.io/narwhals/pandas_like_concepts/improve_group_by_operation/)Ú
stacklevelc                ót  •— g }g }‰D ]m  } |‰j                   j                  | «      «      }|D ]E  }|j                  |j                  j                  d   «       |j                  |j
                  «       ŒG Œo ‰j                   j                  «       }|j                  j                  |||¬«      j                  S )Nr   )r2   Úcontext)	r0   Ú_with_nativeÚappendr1   ÚilocÚnameÚ__narwhals_namespace__Ú_seriesÚfrom_iterable)	rB   Ú	out_groupÚ	out_namesÚexprÚresults_keysÚresult_keysÚnsÚexprsrA   s	          €€rF   Úfuncz#PandasLikeGroupBy.agg.<locals>.func  s®   ø€ ØˆIØˆIØò 7�Ù# D§N¡N×$?Ñ$?ÀÓ$CÓD�Ø#/ò 7�KØ×$Ñ$ [×%7Ñ%7×%<Ñ%<¸QÑ%?Ô@Ø×$Ñ$ [×%5Ñ%5Õ6ñ7ð7ð
 —‘×6Ñ6Ó8ˆBØ—:‘:×+Ñ+¨I¸YÐPRÐ+ÓS×ZÑZÐZrH   )é   rx   )Úinclude_groups)rB   r   Úreturnr   )6r0   r7   r9   r-   Úcopyr.   r   ÚextendÚ
_is_simpleÚcollectionsÚdefaultdictr?   r/   Ú_depthÚ_remap_expr_nameÚ_function_nameÚaddrj   Ú
_leaf_nameÚzipÚ_call_kwargsr   ÚpopÚgetattrr@   r"   r5   ÚaggÚAssertionErrorÚ	enumerateÚvaluesr   ÚitemsÚCounterr<   Ú
ValueErrorrm   Ú_concat_horizontalÚ__native_namespace__Ú	DataFrameÚgroupsr6   ri   r   ÚrenameÚdictr1   ÚemptyÚwarningsÚwarnÚUserWarningr   r8   Úapply),rA   rv   Ú	new_namesÚall_aggs_are_simpleÚexcluderr   rP   ÚaliasesÚnunique_aggsÚsimple_aggsÚsimple_aggs_functionsÚstd_aggsÚvar_aggsÚexpected_old_namesÚsimple_agg_new_namesÚoutput_namesÚfunction_nameÚaliasÚis_n_uniqueÚis_stdÚis_varÚoutput_namerQ   Úresult_aggsÚ
agg_methodÚresult_simple_aggsÚaÚbrE   Úexpected_old_names_indicesÚidxÚitemÚ	index_mapÚiÚresult_nunique_aggsÚoutput_names_counterÚkeyÚvalueÚ	namespaceÚresultrw   Úresult_complexrU   rT   s,   ``                                        @@rF   r‰   zPandasLikeGroupBy.aggR   sî  û€ ØŸ™×7Ñ7ˆØŸ.™.×9Ñ9ˆØ#Ÿz™zŸ™Ó0ˆ	à"ÐØ8�D—J‘JÐ8 ×!7Ñ!7Ñ8ˆØò 	,ˆDÜ:¸4ÀÇÁÐQXÓY‰JˆAˆwØ×Ñ˜WÔ%Ø—?‘? 4Õ(Ø&+Ñ#ð		,ð (*ˆÜ,7×,CÑ,CÄDÓ,IˆÜ*-«%Ðô <G×;RÑ;RÙó<
ˆô <G×;RÑ;RÙó<
ˆð )+ÐØ*,ÐâØó !A�Ü(IØ˜$Ÿ.™.¨'ó)Ñ%�˜gð —;‘; !Ò#à$(×$9Ñ$9¸$×:MÑ:MÓ$N�MØ)×-Ñ-¨mÔ<à!(ò ;˜Ø*×1Ñ1°T·Z±ZÀ±]°OÀ1À]ÀOÐ2TÔUØ# D§J¡J¨q¡MÑ2×9Ñ9¸-ÔHØ,×3Ñ3°EÕ:ð;ð ð !%× 5Ñ 5°d·o±oÀdÓ6KÓ L�Ø+¨yÑ8�Ø&¨%Ñ/�Ø&¨%Ñ/�Ü*-¨l¸GÓ*Dò AÑ&�K Ù"Ø.9˜ UÒ+Ù¨T×->Ñ->¸vÑ-FÐ%F TÈ1Ò$LØ  ™ qÑ)×0Ñ0°Ô=Ø  ™ qÑ)×0Ñ0°Õ7Ù¨T×->Ñ->¸vÑ-FÐ%F TÈ1Ò$LØ  ™ qÑ)×0Ñ0°Ô=Ø  ™ qÑ)×0Ñ0°Õ7à*×1Ñ1°[°MÀÀ=À/Ð2RÔSØ# KÑ0×7Ñ7¸ÔFØ,×3Ñ3°EÔ:Ø-×1Ñ1°-Õ@òAð)!AðF ˆKâô Ð-Ó.°!Ò3Ø'<×'@Ñ'@Ó'BÐB˜ÀvÒMÜ˜KÓ(¨1Ò,ð*¬ØŸ™¤d¨;×+;Ñ+;Ó+=Ó&>Ñ?Àó*ó *Ð&ð 6H×5OÑ5Oö2Ø01˜1˜#˜Q˜z˜lÒ+ò2Ð&Õ.ð *.¯©×):Ñ):¸;Ó)GÐ&à/A×/IÑ/I÷2Ù'+ q¨!˜1˜#˜Q˜q˜cš
ó2Ð&Ô.ô Ð*×2Ñ2Ó3´sÐ;MÓ7NÒNÜÐ.×6Ñ6Ó7¼3Ð?QÓ;RÒRð =Ð=OÐ<Pð QØ1×9Ñ9Ð:ð ;aðað ô
 )¨Ó-Ð-ô  ×+Ñ+¬DÓ1ð +ô "+Ð+=Ó!>ò A‘I�C˜Ø.¨tÑ4×;Ñ;¸CÕ@ðAð !3× :Ñ :ö(àð /¨tÑ4×8Ñ8¸Õ;ð(�	ð (ð PYÖ-YÈ!Ð.BÀ1Ó.EÒ-YÐ"Ô*Ø×"Ñ"Ð#5Ô6áØ&*§m¡m´D¸×9LÑ9LÓ9NÓ4OÑ&P×&XÑ&XØ ð 'Yó 'Ð#ô /3°<×3DÑ3DÓ3FÓ.GÐ#Ô+à×"Ñ"Ð#6Ô7áØ×"Ñ"õ #ð BJÇÁÓAQô#ô ñ Ø×"Ñ"õ #ð BJÇÁÓAQô#ô ñ Ü'2×':Ñ':ñ ;Ø#.ô;ó (Ð$ô ÑDÐ&:×&AÑ&AÓ&CÔDÔDØ�CØ&:×&@Ñ&@Ó&Bò !™
˜˜UØ  1š9Ø U¨3¨%¨r°%°¸Ð#?Ñ?™Cà ð	!ð
 ?¸s¸eÐD�CÜ$ S›/Ð)Ø ŸN™N×AÑAÓC�	Ø"×5Ñ5°kÓB‘ð Ÿ™×<Ñ<Ó>×HÑHÜ˜Ÿ™×-Ñ-×2Ñ2Ó4Ó5¸t¿z¹zð Ió �ð
 ×Ñ tÐÔ,Ø—>‘>×.Ñ.Ü& v¨y¸/È>ÓZóç‰f”Tœ#˜dŸj™j¨$×*@Ñ*@ÓAÓBÓCðDð �>‰>× Ñ ×&Ò&ðfð ô ˜S“/Ð!ä�‰ðgô
 Ü&Ó(õ	
ö		[ð ×#Ñ#Ô%¨/¸VÒ*CØ!Ÿ]™]×0Ñ0°ÀeÐ0ÓL‰Nà!Ÿ]™]×0Ñ0°Ó6ˆNð 	×"Ñ"¨4Ð"Ô0Ø�~‰~×*Ñ*Ü"Ø 	¨?¸Nóó
÷ ‰&””c˜$Ÿ*™* d×&<Ñ&<Ó=Ó>Ó
?ð		@ùòG2ùó
2ùò((ùò .Zs   Í_3Î_8Ñ$_>Ò`c              #  ó@  K  — t        j                  «       5  t        j                  ddt        ¬«       | j                  D ]E  \  }}| | j
                  j                  |«      j                  | j                  j                  Ž f–— ŒG 	 d d d «       y # 1 sw Y   y xY w­w)NÚignorez#.*a length 1 tuple will be returned)ÚmessageÚcategory)
r—   Úcatch_warningsÚfilterwarningsÚFutureWarningr@   r0   ri   r:   r)   r5   )rA   r¹   Úgroups      rF   Ú__iter__zPandasLikeGroupBy.__iter__*  sŒ   è ø€ Ü×$Ñ$Ó&ñ 	Ü×#Ñ#ØØ=Ü&õð #Ÿm™mò ‘
��UàØD�D—N‘N×/Ñ/°Ó6×DÑDÀdÇhÁh×FVÑFVÐWðó ñ÷	÷ 	ñ 	üs   ‚B—A1BÂ		BÂBÂBN)rB   r   r"   z(Sequence[PandasLikeExpr] | Sequence[str]rC   Úboolrz   ÚNone)rv   r   rz   r   )rz   z)Iterator[tuple[Any, PandasLikeDataFrame]])Ú__name__Ú
__module__Ú__qualname__r    Ú__annotations__rG   r‰   rÆ   rL   rH   rF   r   r      si   … àØØØØØØØØØñ@€KÐ<ó ð*àð*ð 7ð*ð ð*ð 
ó*óXV@ôprH   r   )r   r   )Ú
__future__r   r~   r—   Útypingr   r   r   r   r   r	   Únarwhals._compliantr
   Únarwhals._expression_parsingr   Únarwhals._pandas_like.utilsr   r   Únarwhals.utilsr   Únarwhals._compliant.group_byr   Únarwhals._pandas_like.dataframer   Únarwhals._pandas_like.exprr   r   rL   rH   rF   ú<module>rÖ      sO   ðÝ "ã Û Ý  Ý Ý Ý Ý Ý å ,Ý JÝ >Ý 3Ý *áÝ@ÝCÝ9ô^˜Ð%LÑMõ ^rH   