
    h43                        S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  \(       a  S SKJr  S SKJr  S SKJr   " S S\S   5      rg)    )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                  h    \ rS rSr% SSSSSSSS	S
SS.
rS\S'           SS jrSS jrSS jrSr	g)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                 Xl         [        U5      U l        [        UR                  R
                  R                  5      R                  UR                  5      (       a  UR                  R                  SS9nOUR                  nU R                  R                  R                  5       (       a  U R                  R                  S:  a  U(       di  U R                  R                  " U R                  6 R                  R                  5       R!                  5       R!                  5       (       a  Sn[#        U5      eUR%                  [        U R                  5      SSSS9U l        g UR%                  [        U R                  5      SSUSS9U l        g )NT)drop)   r$   z:Grouping by null values is not supported in pandas < 1.1.0F)sortas_indexobserved)r%   r&   dropnar'   )_compliant_framelist_keyssetnativeindexnamesintersectioncolumnsreset_index	compliant_implementation	is_pandas_backend_versionsimple_selectisnaanyNotImplementedErrorgroupby_grouped)selfdfkeysdrop_null_keysnative_framemsgs         P/var/www/html/env/lib/python3.13/site-packages/narwhals/_pandas_like/group_by.py__init__PandasLikeGroupBy.__init__&   s6    !# $T

 ryy$$%222::>>9900d0;L99LNN**4466//&8 #NN00$**=DDIIKOOQUUWWR)#..(00TZZ 	 1 DM )00TZZ % 1 DM    c                  ^ ^^)^* T R                   R                  m*T R                   R                  m)T R                  R	                  5       nSnT HQ  n[        UT R                   T R                  5      u  pVUR                  U5        T R                  U5      (       a  MO  SnMS     0 n[        R                  " [        5      n[        5       n	[        R                  " S 5      n
[        R                  " S 5      n/ n/ nU(       Ga  T GH  n[        UT R                   T R                  5      u  pUR                  S:X  a  T R                  UR                  5      nU	R                  U5        U HX  nUR!                  T R                  S    SU 35        UT R                  S      R!                  U5        UR!                  U5        MZ     M  T R                  T R#                  U5      5      nUS:H  nUS:H  nUS	:H  n[%        X5       H  u  nnU(       a  UUU'   M  U(       aE  UR&                  S
   =nS:w  a0  U
U   S   R!                  U5        U
U   S   R!                  U5        M`  U(       aE  UR&                  S
   =nS:w  a0  UU   S   R!                  U5        UU   S   R!                  U5        M  UR!                  U SU 35        UU   R!                  U5        UR!                  U5        U	R                  U5        M     GM     / nU(       Ga  [)        U	5      S:X  a  U	R+                  5       =nS:w  al  [)        U5      S:  a]  [-        T R.                  [        UR1                  5       5         U5      " 5       nUR2                   Vs/ s H
  nU SU 3PM     snUl        OGT R.                  R5                  U5      nUR2                   VVs/ s H  u  nnU SU 3PM     snnUl        [        UR2                  5      [        U5      :X  a"  [)        UR2                  5      [)        U5      :X  d  SU SUR2                   S3n[7        U5      e[        R                  " [        5      n[9        U5       H  u  nnUU   R!                  U5        M     UR2                   Vs/ s H  nUU   R+                  S5      PM     nnU V s/ s H  n UU    PM
     sn Ul        UR!                  U5        U(       ab  T R.                  [        UR;                  5       5         R=                  SS9n![        UR1                  5       5      U!l        UR!                  U!5        U
(       a+  UR                  U)U*U 4S jU
R?                  5        5       5        U(       a+  UR                  U)U*U 4S jUR?                  5        5       5        U(       a  [        R@                  " S U 5       5      n"[C        S U"R;                  5        5       5      (       a@  SnU"R?                  5        H  u  n#n$U$S:  a  USU# SU$ S3-  nM  M     SU 3n[E        U5      eT R                   RG                  5       n%U%RI                  U5      n&O]T R                   RK                  5       RM                  [        T R.                  RN                  R1                  5       5      T R                  S9n&U&RQ                  SS9  T R                   RS                  [U        U&UT)T*5      5      $ T R                   RV                  RX                  (       a  Sn[E        U5      e[Z        R\                  " S[^        [a        5       S9  S"UU 4S jjn'T*Rc                  5       (       a!  T)S :  a  T R.                  Re                  U'SS!9n(OT R.                  Re                  U'5      n(U(RQ                  SS9  T R                   RS                  [U        U(UT)T*5      5      $ s  snf s  snnf s  snf s  sn f )#NTFc                 
    / / 4$ N rJ   rF   rC   <lambda>'PandasLikeGroupBy.agg.<locals>.<lambda>f       RHrF   c                 
    / / 4$ rI   rJ   rJ   rF   rC   rK   rL   i   rM   rF   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  z   >#    U  H0  u  nu  p#[        TR                  U   R                  US 9UTTS9v   M2     g7f)rP   )r1   implementationbackend_versionN)r   r<   r   ).0rP   std_output_namesstd_aliasesrT   rS   r=   s       rC   	<genexpr>(PandasLikeGroupBy.agg.<locals>.<genexpr>   R      # BR==/  &67;;;F +'5(7	 BR   8;c              3  z   >#    U  H0  u  nu  p#[        TR                  U   R                  US 9UTTS9v   M2     g7frR   )r   r<   r   )rU   rP   var_output_namesvar_aliasesrT   rS   r=   s       rC   rX   rY      rZ   r[   c              3  6   #    U  H  o  H  o"v   M     M     g 7frI   rJ   )rU   framecs      rC   rX   rY      s      ;#.%1AA;s   c              3  *   #    U  H	  oS :  v   M     g7f)r$   NrJ   )rU   vs     rC   rX   rY      s     D&C1u&Cs    z
- 'z' z timesz"Expected unique output names, got:)r1   )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  > / n/ nT Hp  nU" TR                   R                  U 5      5      nU HF  nUR                  UR                  R                  S   5        UR                  UR
                  5        MH     Mr     TR                   R                  5       nUR                  R                  XUS9R                  $ )Nr   )r.   context)	r3   _with_nativeappendr-   ilocname__narwhals_namespace___seriesfrom_iterable)	r>   	out_group	out_namesexprresults_keysresult_keysnsexprsr=   s	          rC   func#PandasLikeGroupBy.agg.<locals>.func  s    II#DNN$?$?$CD#/K$$[%7%7%<%<Q%?@$$[%5%56 $0 
 668B::++IPR+SZZZrF   )   ry   )include_groups)r>   r   returnr   )3r3   r4   r6   r+   copyr   extend
_is_simplecollectionsdefaultdictr*   r,   _depth_remap_expr_name_function_nameaddrj   
_leaf_namezip_call_kwargsr   popgetattrr<   r?   r1   aggAssertionError	enumeratevaluesr   itemsCounterr9   
ValueErrorrm   _concat_horizontal__native_namespace__	DataFramegroupsr2   ri   r   r-   emptywarningswarnUserWarningr   r5   apply)+r=   rv   	new_namesall_aggs_are_simplerr   rO   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_namerP   result_aggs
agg_methodresult_simple_aggsabrB   expected_old_names_indicesidxitem	index_mapiresult_nunique_aggsoutput_names_counterkeyvalue	namespaceresultrw   result_complexrT   rS   s+   ``                                       @@rC   r   PandasLikeGroupBy.aggO   s   77..99#zz0	"D:dnndjjJA W%??4((&+#  (*,7,C,CD,I*-% <G;R;R<
 <G;R;R<
 )+*,(I$..$**)% ;;!#$($9$9$:M:M$NM)--m<!(*11TZZ]O1]O2TU#DJJqM299-H,33E: ")  !% 5 5dood6K L+y8&%/&%/*-l*D&K".9U+T->->v-F%FT1$L q)00= q)007T->->v-F%FT1$L q)00= q)007*11[M=/2RS#K077F,33E:-11-@ +E) F K -.!3'<'@'@'BBvMK(1,)0d;+;+;+=&>?* *& 6H5O5O25O1#Qzl+5O2&. *.):):;)G&/A/I/I2/Itq!1#Qqc
/I2&. *223s;M7NN.6673?Q;RR ==O<P Q199: ;aa 
 )--  ++D1 + "++=!>IC.t4;;C@ "? !3 : :( : /t488; :  ( PY-Yy!.B1.Ey-Y"*""#56&*mmD9L9L9N4O&P&X&X  'Y '# /3<3D3D3F.G#+""#67"" # BJAQ#  "" # BJAQ#  '2':': ;#.; ($ D&:&A&A&CDDDC&:&@&@&B
U 19U3%r%#??C 	 'C
 ?seDC$S/) NNAAC	"55kB <<>HH--2245tzz I 
 t,>>..&vy/>Z  >>  &&f  S/!g
 &(	
		[ 		[ ##%%/V*C!]]00e0LN!]]006N 	""4"0~~**"	?N
 	
I2
2(( .Zs   _	_#_)=_.c              #    #    [         R                  " 5          [         R                  " SS[        S9  U R                   H#  u  pXR
                  R                  U5      4v   M%     S S S 5        g ! , (       d  f       g = f7f)Nignorez#.*a length 1 tuple will be returned)messagecategory)r   catch_warningsfilterwarningsFutureWarningr<   r3   ri   )r=   r   groups      rC   __iter__PandasLikeGroupBy.__iter__)  s]     $$&##=&
 #mm
NN77>?? , '&&s   B AA/&	B /
A=9B )r)   r<   r+   N)r>   r   r?   zSequence[str]r@   boolr{   None)rv   r   r{   r   )r{   z)Iterator[tuple[Any, PandasLikeDataFrame]])
__name__
__module____qualname____firstlineno__r!   __annotations__rD   r   r   __static_attributes__rJ   rF   rC   r   r      si    @K< '' ' ' 
'RX
t@rF   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   rJ   rF   rC   <module>r      sQ    "          , J > 3 *@C9Y@%LM Y@rF   