Ë
    7Ò^jR?  ã                  ó  — U d dl 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mZ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mZmZmZmZ d dl	mZ d dlZ d dl!m"Z# d dl$m%Z% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z, dZ-de.d<   dZ/de.d<   ed   Z0de.d<   eddddddd d!d"d#d$d%d&d'd(d)d*d+d,e0f   Z1de.d-<   	 d.Z2de.d/<   	 eZ3de.d0<   	 d d1d d2œZ4d3e.d4<    ed5¬6«      d@d7„«       Z5 G d8„ d9«      Z6 G d:„ d;ed<d=e1f   «      Z7dAd>„Z8dBd?„Z9y)Cé    )ÚannotationsN)Ú	lru_cache)Úchain)Úmethodcaller)ÚTYPE_CHECKINGÚAnyÚClassVarÚLiteral)ÚEagerGroupBy)Úissue_warning)Ú!evaluate_output_names_and_aliases)Úmake_group_by_kwargs)Úis_pandas_like_dataframe)ÚCallableÚIterableÚIteratorÚMappingÚSequence)Ú	TypeAlias)ÚDataFrameGroupBy)ÚUnpack)ÚNarwhalsAggregationÚScalarKwargs)ÚPandasLikeDataFrame)ÚPandasLikeExprz._NativeGroupBy[tuple[str, ...], Literal[True]]r   ÚNativeGroupByz(Callable[[pd.DataFrame], pd.Series[Any]]ÚNativeApply)ÚcovÚskewÚInefficientNativeAggregationÚanyÚallÚcountÚidxmaxÚidxminÚmaxÚmeanÚmedianÚminÚmodeÚnthÚnuniqueÚprodÚquantileÚsemÚsizeÚstdÚsumÚvarÚNativeAggregationz.Callable[[Any], pd.DataFrame | pd.Series[Any]]Ú
_NativeAggÚNonStrHashableéÿÿÿÿ)ÚfirstÚlastÚ	any_valuez,Mapping[NarwhalsAggregation, Literal[0, -1]]Ú_REMAP_ORDERED_INDEXé    )Úmaxsizec               óÊ   — | dk(  rt        | d¬«      S | dk(  r d|v sJ ‚d|v sJ ‚t        | |d   |d   ¬«      S |r|j                  d«      dk(  rt        | «      S t        | fi |¤ŽS )	Nr,   F)Údropnar.   Úinterpolation)Úqr@   Úddofé   )r   Úget)ÚnameÚkwdss     úi/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/narwhals/_pandas_like/group_by.pyÚ_native_aggrH   E   s‚   € àˆyÒÜ˜D¨Ô/Ð/ØˆzÒØ˜TÑ!Ð!Ð!Ø $Ñ&Ð&Ð&Ü˜D D¨Ñ$4ÀDÈÑDYÔZÐZÙ�4—8‘8˜FÓ# qÒ(Ü˜DÓ!Ð!Ü˜Ñ% Ñ%Ð%ó    c                  ó’   — e Zd ZU dZded<   ded<   ded<   dd„Zdd„Zdd	„Zdd
„Zdd„Z	dd„Z
dd„Zdd„Zdd„Zedd„«       Zdd„Zy)ÚAggExpraM  Wrapper storing the intermediate state per-`PandasLikeExpr`.

    There's a lot of edge cases to handle, so aim to evaluate as little
    as possible - and store anything that's needed twice.

    Warning:
        While a `PandasLikeExpr` can be reused - this wrapper is valid **only**
        in a single `.agg(...)` operation.
    r   ÚexprzSequence[str]Úoutput_namesÚaliasesc                ó<   — || _         d| _        d| _        d| _        y )N© Ú )rL   rM   rN   Ú
_leaf_name)ÚselfrL   s     rG   Ú__init__zAggExpr.__init__a   s   € ØˆŒ	ØˆÔØˆŒØ57ˆ�rI   c               ó~   — |j                   }|j                  }t        | j                  ||«      \  | _        | _        | S )zd**Mutating operation**.

        Stores the results of `evaluate_output_names_and_aliases`.
        )Ú	compliantÚexcluder   rL   rM   rN   )rS   Úgroup_byÚdfrW   s       rG   Úwith_expand_nameszAggExpr.with_expand_namesg   s@   € ð
 ×ÑˆØ×"Ñ"ˆÜ*KØ�I‰I�r˜7ó+
Ñ'ˆÔ˜4œ<ð ˆrI   c                ó®  — |j                   }| j                  }| j                  «       r"| j                  «       r|j	                  «       }�nÅ| j                  «       rs|j	                  «       }|j
                  j                  «       }|j                  |D �cg c],  }|j                  |«      j                  |«      j                  ‘Œ. c}«      }�nB| j                  «       �r.|j
                  }|j                  | j                  «      }	|	j                  d«      x}
dk7  rd|
› d|j                  › d�}t!        |«      ‚t#        |«      }|j                  }|j$                  |j&                  }}|j                  «       }|j                  |D �cg c]w  }  |j(                  g |¢|‘fi |¤Žj	                  «       j+                  d¬«      j-                  |«      j(                  |fi |¤Ž|   j/                  d«      j1                  «       ‘Œy c}«      }�n| j3                  «       s | j5                  «       s| j7                  «       rœ | j9                  «       |g |j$                  ¢|¢   «      }|j
                  j                  }|j;                  «       }|j=                  «       r#|d	k  r|j?                  |j$                  d
¬«       nS|j?                  |j$                  «      }n7tA        |«      dk(  r|d   n
t#        |«      } | j9                  «       ||   «      }tC        |«      rt#        | jD                  «      |_#        |S | jD                  d   |_$        |S c c}w c c}w )z8Evaluate the wrapped expression as a group_by operation.Úkeepr!   z`Expr.mode(keep='z7')` is not implemented in group by context for backend z3

Hint: Use `nw.col(...).mode(keep='any')` instead.F)Ú	ascendingrC   ©é   r   T©Úinplacer   )%Ú_groupedrM   Úis_lenÚis_top_level_functionr0   rV   Ú__narwhals_namespace__Ú_concat_horizontalÚfrom_nativeÚaliasÚnativeÚis_modeÚ_kwargsrL   rD   Ú_implementationÚNotImplementedErrorÚlistÚ_keysÚ_group_by_kwargsÚgroupbyÚsort_valuesÚreset_indexÚheadÚ
sort_indexÚis_lastÚis_firstÚis_any_valueÚ
native_aggÚ_backend_versionÚ	is_pandasÚ	set_indexÚlenr   rN   ÚcolumnsrE   )rS   rX   ÚgroupedÚnamesÚresultÚresult_singleÚnsrE   rV   Únode_kwargsr\   ÚmsgÚcolsri   ÚkeysÚkwargsÚcolÚimplÚbackend_versionÚselects                       rG   Ú_getitem_aggszAggExpr._getitem_aggss   sí  € à×#Ñ#ˆà×!Ñ!ˆØ�;‰;Œ=˜T×7Ñ7Ô9Ø—\‘\“^ŠFØ�[‰[Œ]Ø#ŸL™L›NˆMØ×#Ñ#×:Ñ:Ó<ˆBØ×*Ñ*ØNSÖTÀd�—‘ Ó.×4Ñ4°TÓ:×AÓAÒTóŠFð �\‰\�^Ø ×*Ñ*ˆIØ"×*Ñ*¨4¯9©9Ó5ˆKØ#Ÿ™¨Ó/Ð/�°EÒ9à'¨ vð .Ø(×8Ñ8Ð9ð :HðHð ô
 *¨#Ó.Ð.ä˜“;ˆDØ×%Ñ%ˆFØ#Ÿ>™>¨8×+DÑ+D�&ˆDð ×1Ñ1Ó3ˆBØ×*Ñ*ð  $ö	ð ð�N�F—N‘N < T <¨3 <Ñ:°6Ñ:ß‘T“Vß ‘[¨5�[Ó1ß ‘[ Ó%ß‘W˜Tñ	-ð &,ñ	-ð .1ñ	2÷
 ‘T˜!“Wß‘Z“\ñ"ò	óŠFð �\‰\Œ^˜tŸ}™}œ°$×2CÑ2CÔ2EØ&�T—_‘_Ó& wÐ/H°·±Ð/HÀ%Ð/HÑ'IÓJˆFØ×%Ñ%×5Ñ5ˆDØ"×3Ñ3Ó5ˆOØ�~‰~Ô O°fÒ$<à× Ñ  §¡¸Ð Õ>à×)Ñ)¨(¯.©.Ó9‘ä!$ U£¨q¢�U˜1’X´d¸5³kˆFØ&�T—_‘_Ó& w¨v¡Ó7ˆFÜ# FÔ+Ü! $§,¡,Ó/ˆFŒNð ˆð Ÿ,™, q™/ˆFŒKØˆùòa Uùò*	s   Â1MÆA<Mc                ó    — | j                   dk(  S )Nr}   ©Ú	leaf_name©rS   s    rG   rc   zAggExpr.is_len°   s   € Ø�~‰~ Ñ&Ð&rI   c                ó    — | j                   dk(  S )Nr9   r�   r‘   s    rG   rv   zAggExpr.is_last³   ó   € Ø�~‰~ Ñ'Ð'rI   c                ó    — | j                   dk(  S )Nr8   r�   r‘   s    rG   rw   zAggExpr.is_first¶   s   € Ø�~‰~ Ñ(Ð(rI   c                ó    — | j                   dk(  S )Nr*   r�   r‘   s    rG   rj   zAggExpr.is_mode¹   r“   rI   c                ó    — | j                   dk(  S )Nr:   r�   r‘   s    rG   rx   zAggExpr.is_any_value¼   s   € Ø�~‰~ Ñ,Ð,rI   c                ót   — t        t        | j                  j                  j	                  «       «      «      dk(  S )NrC   )r}   rn   rL   Ú	_metadataÚop_nodes_reversedr‘   s    rG   rd   zAggExpr.is_top_level_function¿   s*   € ä”4˜Ÿ	™	×+Ñ+×=Ñ=Ó?Ó@ÓAÀQÑFÐFrI   c                ó‚   — | j                   x}r|S t        j                  | j                  «      | _         | j                   S ©N)rR   ÚPandasLikeGroupByrL   )rS   rE   s     rG   r�   zAggExpr.leaf_nameÃ   s6   € à—?‘?Ð"ˆ4Ð"ØˆKÜ+×6Ñ6°t·y±yÓAˆŒØ�‰ÐrI   c                óv  — t         j                  | j                  «      }t        | j                  j
                  j                  «       «      }| j                  t        v rF|j                  j                  d«      rd}t        |«      ‚t        dt        | j                     ¬«      S t        |fi |j                  ¤ŽS )z@Return a partial `DataFrameGroupBy` method, missing only `self`.Úignore_nullszd`Expr.any_value(ignore_nulls=True)` is not supported in a `group_by` context for pandas-like backendr+   )Ún)rœ   Ú_remap_expr_namer�   ÚnextrL   r˜   r™   r;   rˆ   rD   rm   r   rH   )rS   Únative_nameÚ	last_noder…   s       rG   ry   zAggExpr.native_aggÊ   s˜   € ä'×8Ñ8¸¿¹ÓHˆÜ˜Ÿ™×,Ñ,×>Ñ>Ó@ÓAˆ	Ø�>‰>Ô1Ñ1Ø×Ñ×#Ñ# NÔ3ð6ð ô *¨#Ó.Ð.Ü Ô)=¸d¿n¹nÑ)MÔNÐNÜ˜;Ñ;¨)×*:Ñ*:Ñ;Ð;rI   N)rL   r   ÚreturnÚNone)rX   rœ   r¤   rK   )rX   rœ   r¤   zpd.DataFrame | pd.Series[Any])r¤   Úbool)r¤   zNarwhalsAggregation | Any)r¤   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__rT   rZ   r�   rc   rv   rw   rj   rx   rd   Úpropertyr�   ry   rP   rI   rG   rK   rK   R   sc   … ñð ÓØÓØÓó8ó
ó;óz'ó(ó)ó(ó-óGð òó ðô<rI   rK   c                  ó,  — e Zd ZU i dd“dd“dd“dd“dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“Zded<   ded<   	 ded<   	 ded<   	 ded<   	 ed'd„«       Z	 	 	 	 	 	 	 	 d(d„Zd)d „Z	 	 	 	 	 	 d*d!„Z		 	 	 	 d+d"„Z
	 	 	 	 	 	 d,d#„Zd-d$„Zd.d%„Zy&)/rœ   r2   r'   r(   r&   r)   r*   r1   r3   r}   r0   Ún_uniquer,   r#   r.   r"   r!   r8   r+   r9   r:   z9ClassVar[Mapping[NarwhalsAggregation, NativeAggregation]]Ú_REMAP_AGGSútuple[str, ...]Ú_original_columnsz	list[str]ro   Ú_output_key_nameszMapping[str, bool]rp   c                ó   — | j                   S )z>Group keys to ignore when expanding multi-output aggregations.)Ú_excluder‘   s    rG   rW   zPandasLikeGroupBy.excludeû   s   € ð �}‰}ÐrI   c              ó  — t        |j                  «      | _        || _        | j	                  ||«      \  | _        | _        | _        g | j                  ¢| j                  ¢­| _        t        |¬«      | _
        | j                  j                  | _        t        | j                  j                  j                   «      j#                  | j                  j                  «      r"| j                  j%                  d¬«      | _        y y )N)Údrop_null_keysT)Údrop)Útupler~   r±   Ú_drop_null_keysÚ_parse_keysÚ_compliant_framero   r²   r´   r   rp   rV   ri   Ú_nativeÚsetÚindexr€   Úintersectionrs   )rS   rY   r‡   r¶   s       rG   rT   zPandasLikeGroupBy.__init__   sÌ   € ô "' r§z¡zÓ!2ˆÔØ-ˆÔØDH×DTÑDTØ�óE
ÑAˆÔ˜tœz¨4Ô+Að *P¨4¯:©:Ð)O¸×8NÑ8NÑ)OˆŒÜ 4ÀNÔ SˆÔð —~‘~×,Ñ,ˆŒÜˆt�|‰|×!Ñ!×'Ñ'Ó(×5Ñ5°d·n±n×6LÑ6LÔMØŸ<™<×3Ñ3¸Ð3Ó>ˆD�Lð NrI   c                óþ  — d}g }d}|D ]�  }|j                  t        |«      j                  | «      «       | j                  |«      sd}t	        |j
                  j                  «       «      }|j                  j                  dd«      x}sŒ�|r||k7  rd|› d|› d�}t        |«      ‚|}ŒŸ |rZ | j                  j                  t        |«      d¬	«      j                  | j                  j                  «       fi | j                   ¤Ž}	n? | j                  j                  | j                  j                  «       fi | j                   ¤Ž}	|	| _        |r†|r;| j$                  j'                  «       }
|
j)                  | j+                  |«      «      }n…| j$                  j-                  «       j/                  t        |	j0                  «      | j                  ¬
«      }n<| j$                  j2                  j4                  r
t7        «       ‚| j9                  |	|«      }| j$                  j:                  }|j=                  «       }|j?                  «       r|dk  r|jA                  d¬«       n|jA                  «       }| jC                  ||«      S )NTrP   FÚorder_byz?Only one `order_by` can be specified in `group_by`. Found both z and ú.r8   )Úna_position)r~   r^   r`   )"ÚappendrK   rZ   Ú
_is_simpler¡   r˜   r™   rˆ   rD   rm   r¼   rr   rn   rq   ro   Úcopyrp   rb   rV   re   rf   r�   Ú__native_namespace__Ú	DataFrameÚgroupsri   ÚemptyÚempty_results_errorÚ_apply_aggsrl   rz   r{   rs   Ú_select_results)rS   ÚexprsÚall_aggs_are_simpleÚ	agg_exprsrÁ   rL   ÚmdÚ_current_order_byr…   r   rƒ   r�   rŠ   r‹   s                 rG   ÚaggzPandasLikeGroupBy.agg  s6  € Ø"ÐØ#%ˆ	ØˆØò 		-ˆDØ×ÑœW T›]×<Ñ<¸TÓBÔCØ—?‘? 4Ô(Ø&+Ð#Ü�d—n‘n×6Ñ6Ó8Ó9ˆBØ$&§I¡I§M¡M°*¸bÓ$AÐAÐ ÑAÙÐ 1°XÒ =Ø[Ð\dÐ[eÐejÐk|Ðj}Ð}~Ð�CÜ-¨cÓ2Ð2Ø,‘ð		-ñ ð& T§\¡\×%=Ñ%=Ü�X“¨Gð &>ó &ç‰g�d—j‘j—o‘oÓ'ñ&Bà+/×+@Ñ+@ñ&B‰Gð +�d—l‘l×*Ñ*¨4¯:©:¯?©?Ó+<ÑVÀ×@UÑ@UÑVˆGØˆŒááØ—^‘^×:Ñ:Ó<�Ø×.Ñ.¨t×/AÑ/AÀ)Ó/LÓM‘àŸ™×<Ñ<Ó>×HÑHÜ˜Ÿ™Ó(°$·*±*ð Ió ‘ð �^‰^×"Ñ"×(Ò(Ü%Ó'Ð'à×%Ñ% g¨uÓ5ˆFà�~‰~×-Ñ-ˆØ×/Ñ/Ó1ˆØ�>‰>Ô °&Ò 8à×Ñ tÐÕ,à×'Ñ'Ó)ˆFà×#Ñ# F¨IÓ6Ð6rI   c          	     ó  — t        j                  d„ |D «       «      } | j                  j                  |d¬«      j                  g | j
                  ¢|¢­Ž j                  t        t        | j
                  | j                  d¬«      «      «      S )zgResponsible for remapping temp column names back to original.

        See `ParseKeysGroupBy`.
        c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr›   )rN   )Ú.0Úes     rG   ú	<genexpr>z4PandasLikeGroupBy._select_results.<locals>.<genexpr>L  s   è ø€ Ò'E°a¨¯	­	Ñ'Eùs   ‚F)Úvalidate_column_names)Ústrict)
r   Úfrom_iterablerV   Ú_with_nativeÚsimple_selectro   ÚrenameÚdictÚzipr²   )rS   rY   rÐ   Ú	new_namess       rG   rÍ   z!PandasLikeGroupBy._select_resultsE  sz   € ô ×'Ñ'Ñ'E¸9Ô'EÓEˆ	ðˆD�N‰N×'Ñ'¨À%Ð'ÓHß‰]ð4Ø ŸJ™Jð4Ø)2ò4ç‰V”Dœ˜TŸZ™Z¨×)?Ñ)?ÈÔNÓOÓPð	
rI   c               óJ   — |D �cg c]  }|j                  | «      ‘Œ c}S c c}w r›   )r�   )rS   rÎ   r×   s      rG   r�   zPandasLikeGroupBy._getitem_aggsS  s!   € ð 05Ö5¨!�—‘ Õ%Ò5Ð5ùÒ5s   … c                óæ   — t        «        | j                  j                  }| j                  |«      }|j                  }|j                  «       r|j                  «       dk\  r
 ||d¬«      S  ||«      S )a"  Stub issue for `include_groups` [pandas-dev/pandas-stubs#1270].

        - [User guide] mentions `include_groups` 4 times without deprecation.
        - [`DataFrameGroupBy.apply`] doc says the default value of `True` is deprecated since `2.2.0`.
        - `False` is explicitly the only *non-deprecated* option, but entirely omitted since [pandas-dev/pandas-stubs#1268].

        [pandas-dev/pandas-stubs#1270]: https://github.com/pandas-dev/pandas-stubs/issues/1270
        [User guide]: https://pandas.pydata.org/pandas-docs/stable/user_guide/groupby.html
        [`DataFrameGroupBy.apply`]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.DataFrameGroupBy.apply.html
        [pandas-dev/pandas-stubs#1268]: https://github.com/pandas-dev/pandas-stubs/pull/1268
        )é   rä   F)Úinclude_groups)Úwarn_complex_group_byrV   rl   Ú_apply_exprs_functionÚapplyr{   rz   )rS   r   rÎ   rŠ   Úfuncrè   s         rG   rÌ   zPandasLikeGroupBy._apply_aggsX  sc   € ô 	ÔØ�~‰~×-Ñ-ˆØ×)Ñ)¨%Ó0ˆØ—‘ˆØ�>‰>Ô × 5Ñ 5Ó 7¸6Ò AÙ˜¨eÔ4Ð4Ù�T‹{ÐrI   c                ó€   ‡ ‡‡‡— ‰ j                   j                  «       Š‰j                  j                  Šdˆˆˆˆ fd„}|S )Nc                ó¤   •‡— ‰j                   j                  | «      Šˆfd„‰D «       }|rt        |ddiŽng g f\  }} ‰||‰¬«      j                  S )Nc              3  ó‚   •K  — | ]6  } |‰«      D ])  }|j                   j                  d    |j                  f–— Œ+ Œ8 y­w)r   N)ri   ÚilocrE   )rÖ   rL   r‡   rV   s      €rG   rØ   zFPandasLikeGroupBy._apply_exprs_function.<locals>.fn.<locals>.<genexpr>t  sJ   øè ø€ ò àÙ  ›Oòð ð —‘×!Ñ! !Ñ$ d§i¡iÔ0ðØ0ñùs   ƒ<?rÚ   T)r¾   Úcontext)rV   rÜ   rà   ri   )	rY   ÚresultsÚ	out_groupÚ	out_namesrV   rÎ   Úinto_seriesrƒ   rS   s	       @€€€€rG   Úfnz3PandasLikeGroupBy._apply_exprs_function.<locals>.fnr  s\   ù€ ØŸ™×3Ñ3°BÓ7ˆIóà!ôˆGñ
 BI¤3¨Ð#=¸Ò#=ÈrÐSUÈhÑ ˆI�yÙ˜y°	À2ÔF×MÑMÐMrI   )rY   úpd.DataFramer¤   zpd.Series[Any])rV   re   Ú_seriesrÛ   )rS   rÎ   ró   rò   rƒ   s   `` @@rG   rç   z'PandasLikeGroupBy._apply_exprs_functionn  s7   û€ Ø�^‰^×2Ñ2Ó4ˆØ—j‘j×.Ñ.ˆ÷	Nð 	Nð ˆ	rI   c              #  óœ  K  —  | j                   j                  | j                  j                  «       fi | j                  ¤Ž}t        j                  «       5  t        j                  ddt        ¬«       | j                  j                  }|D ](  \  }}|  ||«      j                  | j                  Ž f–— Œ* 	 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¼   rq   ro   rÆ   rp   ÚwarningsÚcatch_warningsÚfilterwarningsÚFutureWarningrV   rÜ   rÝ   r±   )rS   r   Úwith_nativeÚkeyÚgroups        rG   Ú__iter__zPandasLikeGroupBy.__iter__~  s·   è ø€ Ø&�$—,‘,×&Ñ& t§z¡z§¡Ó'8ÑR¸D×<QÑ<QÑRˆÜ×$Ñ$Ó&ñ 	WÜ×#Ñ#ØØ=Ü&õð
 Ÿ.™.×5Ñ5ˆKØ%ò W‘
��UØÐ<™K¨Ó.×<Ñ<¸d×>TÑ>TÐUÐVÓVñW÷	W÷ 	Wñ 	Wüs   ‚ACÁA C Â7	CÃ C	ÃCN)r¤   r°   )rY   r   r‡   z(Sequence[PandasLikeExpr] | Sequence[str]r¶   r¦   r¤   r¥   )rÎ   r   r¤   r   )rÐ   zSequence[AggExpr]rY   rô   r¤   r   )rÎ   zIterable[AggExpr]r¤   z#list[pd.DataFrame | pd.Series[Any]])r   r   rÎ   úIterable[PandasLikeExpr]r¤   rô   )rÎ   r  r¤   r   )r¤   z)Iterator[tuple[Any, PandasLikeDataFrame]])r§   r¨   r©   r¯   r«   r¬   rW   rT   rÓ   rÍ   r�   rÌ   rç   r  rP   rI   rG   rœ   rœ   Ù   s®  … ðNØˆuðNà�ðNð 	�(ðNð 	ˆuð	Nð
 	ˆuðNð 	�ðNð 	ˆuðNð 	ˆuðNð 	ˆvðNð 	�IðNð 	�ðNð 	�JðNð 	ˆuðNð 	ˆuðNð 	�ðNð  	�ð!Nð" 	�Uð#N€KÐJó ð& 'Ó&ØEàÓØOà Ó Ø8à(Ó(ØKàòó ðð?àð?ð 7ð?ð ð?ð 
ó?ó,-7ð^
Ø.?ð
Øð
à	ó
ð6Ø&ð6à	,ó6ð
Ø$ðØ-Eðà	óó,ô 
WrI   rœ   r   r   c                 ó   — d} t        | «      S )zJDon't even attempt this, it's way too inconsistent across pandas versions.au  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())

)Ú
ValueError)r…   s    rG   rË   rË   ‹  s   € ð	^ð ô �c‹?ÐrI   c                 ó$   — t        dt        «       y )Na)  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/concepts/improve_group_by_operation/)r   ÚUserWarningrP   rI   rG   ræ   ræ   š  s   € Üð	Wô
 	õrI   )rE   r4   rF   zUnpack[ScalarKwargs]r¤   r5   )r¤   r  )r¤   r¥   ):Ú
__future__r   rú   Ú	functoolsr   Ú	itertoolsr   Úoperatorr   Útypingr   r   r	   r
   Únarwhals._compliantr   Únarwhals._exceptionsr   Únarwhals._expression_parsingr   Únarwhals._pandas_like.utilsr   Únarwhals.dependenciesr   Úcollections.abcr   r   r   r   r   r   ÚpandasÚpdÚpandas.api.typingr   Ú_NativeGroupByÚtyping_extensionsr   Únarwhals._compliant.typingr   r   Únarwhals._pandas_like.dataframer   Únarwhals._pandas_like.exprr   r   r«   r   r    r4   r5   r6   r;   rH   rK   rœ   rË   ræ   rP   rI   rG   ú<module>r     sM  ðÞ "ã Ý Ý Ý !ß 8Ó 8å ,Ý .Ý JÝ <Ý :áßOÕOÝ ãÝDÝ(çLÝCÝ9àO€M�9ÓOàC€ˆYÓ CØ*1°-Ñ*@Ð ˜iÓ @Ø&Ø	Ø	ØØØØ	Ø
ØØ	Ø
Ø	ØØ
ØØ	Ø
Ø	Ø	Ø	Ø ð'"ñ Ð �9ó ð, hàH€
ˆIÓ HØ @ð  €�	Ó Ø 6ð ØØñFÐ ÐBó ñ �2Ôò	&ó ð	&÷D<ñ D<ôNoWØÐ&Ð(8Ð:KÐKÑLôoWódôrI   