
    g                    &   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 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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ddddddddd
Z G d d      Z	 	 	 	 	 	 	 	 	 	 	 	 ddZ y)    )annotationsN)TYPE_CHECKING)Any)Callable)Iterator)Sequence)is_simple_aggregation)parse_into_exprs)generate_temporary_column_name)remove_prefix)Self)ArrowDataFrame)ArrowSeries)IntoArrowExpr)CompliantExprsummeanapproximate_medianmaxminstddevvariancecountcount_distinct)
r   r   medianr   r   stdvarlenn_uniquer   c                  H    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZddZy)ArrowGroupByc                   dd l }|r|j                  |      | _        n|| _        t        |      | _         |j
                  | j                  j                  t        | j                              | _        y )Nr   )pyarrow
drop_nulls_dflist_keysTableGroupBy_native_frame_grouped)selfdfkeysdrop_null_keyspas        M/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_arrow/group_by.py__init__zArrowGroupBy.__init__(   sS     	}}T*DHDH$Z
'(>(>TZZ@PQ    c                $   t        |d| j                  j                         i|}|D ]  }|j                  d}t	        |       t        | j                  || j                  | j                  j                  | j                  j                        S )N	namespacezAnonymous expressions are not supported in group_by.agg.
Instead of `nw.all()`, try using a named expression, such as `nw.col('a', 'b')`
)backend_version)
r
   r%   __narwhals_namespace___output_names
ValueError	agg_arrowr*   r'   _from_native_frame_backend_version)r+   aggs
named_aggsexprsexprmsgs         r0   aggzArrowGroupBy.agg4   s    
 !
hh557
 

 D!!)+ 
 !o%  MMJJHH'' HH55
 	
r2   c              #     K   dd l }dd lm t        d j                  j
                        d} j                  j                   j                  g  j                  D cg c]'  } j                  |    |j                               ) c}dd|d}j                  d|       fd	 j                  |      D        E d {    y c c}w 7 
w)
Nr      )n_bytescolumns__null_token_value__ replace)null_handlingnull_replacement)ifield_columnc              3  B  K   | ]  }t         j                  j                  j                   j                     |            j                  g            xj                  j                   j                  d       j                  dd            f  yw)   Fi   )namedbuffer_sizeN)
nextr%   r:   filterequaldropselectr'   head	iter_rows).0v	col_tokenpcr+   ttables     r0   	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>_   s      
 + !XX88!LL%	2BA)FGLLi[Y  VTZZ) T!WYUY<	  +s   BB)r#   pyarrow.computecomputer   r%   rE   r)   binary_join_element_wiser'   caststring
add_columnunique)	r+   r/   
null_tokenkey
key_valuesr[   r\   r]   r^   s	   `    @@@@r0   __iter__zArrowGroupBy.__iter__O   s     $21dhhFVFVW	+
&&0R00 
:>**E*3gbggeCj)"))+.*E

 $'	

   1Yz J
 RYYz*
 	
 	
 F	
s   AC!&,C
AC!CC!N)
r+   r   r,   r   r-   	list[str]r.   boolreturnNone)r+   r   r<   r   r=   r   rm   r   )r+   r   rm   z$Iterator[tuple[Any, ArrowDataFrame]])__name__
__module____qualname__r1   rA   rj    r2   r0   r!   r!   '   sc    
R
R&
R.7
RLP
R	
R


 $
 
	
6
r2   r!   c           	         dd l m} d}|D ]-  }t        |      rt        |j                  d      t
        v r+d} n |sd}t        |      g }	|j                         }
|j                         }|D ]  }|j                  dk(  r|j                  |j                  dk7  rd}t        |      |j                  |j                  d          |
j                  |d    d       |	j                  |d   d	 |j                  d
      f       |j                  dk7  s|j                  |j                  d}t        |      t        |j                  d      }|dv r. |j                  |j                  j!                  dd            }n3|dv r |j                  d
      }n|d	k(  r |j                  d      }nd }t
        |   }|j#                  |j                         |
j#                  |j                  D cg c]	  }| d|  c}       |	j#                  |j                  D cg c]  }|||f	 c}        | j%                  |	      }t'        j(                  t*              }t-        |
      D ]  \  }}||   j                  |        t/        |j0                        t/        |
      k(  r!t3        |j0                        t3        |
      k(  sd|
 d|j0                   d}t        |      |j0                  D cg c]  }||   j5                  d       }}|D cg c]  }||   	 }}|j7                  |      }|dk  r4|j0                  }|j9                  g ||D cg c]	  }||vs| c}      } ||      S c c}w c c}w c c}w c c}w c c}w )Nr   Tzcol->Fau  Non-trivial complex aggregation found.

Hint: you were probably trying to apply a non-elementary aggregation with a pyarrow table.
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())

r   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues_countr   all)moderO   >   r   r   ddof)rw   >   r   r   
only_valid_z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issues)   r   r   )r`   ra   r	   r   _function_namePOLARS_TO_ARROW_AGGREGATIONSr8   copy_depthr7   AssertionErrorappendCountOptions_root_namesVarianceOptions_kwargsgetextend	aggregatecollectionsdefaultdictr&   	enumeratesetcolumn_namesr   poprename_columnsrV   )groupedr>   r-   from_dataframer5   r\   all_simple_aggsr?   r@   r<   expected_pyarrow_column_namesnew_column_namesfunction_nameoption	root_nameresult_simpleexpected_old_names_indicesidxitem	index_maprK   rE   cols                          r0   r9   r9   q   s    !O!$'d117;+, $O  b 	 o=?D/3yy{!"&))+;;! ""*d.A.AU.Jw$S))##D$6$6q$9:)00DG9F1CDKKa'?2??+FGH KK1 0 0 8D<N<N<VsC %%%d&9&97CN*'R''T\\-=-=fa-HIF11$R__%0Fg%$R__,7FF4]C 2 23%,,=A=M=MN=M		{!M?+=MN	
 	AEAQAQRAQIi/AQR	
O V %%d+M 8C7N7Nt7T<=	T"4(//4 > 	M&&'3/L+MM**+s3P/QQ 11N0O P --. /UU 	
 S!!<I<V<V<VD"4(,,Q/<V   6??Y(+Y?!001ABM#,,%,,AdAW@Wc4cW@A
 -((A O S& @
 As$   3M7
!M<
6NN	N
#N
)r   zpa.TableGroupByr>   z$Sequence[CompliantExpr[ArrowSeries]]r-   rk   r   zCallable[[Any], ArrowDataFrame]r5   ztuple[int, ...]rm   r   )!
__future__r   r   typingr   r   r   r   r   narwhals._expression_parsingr	   r
   narwhals.utilsr   r   r#   r/   r`   ra   r\   typing_extensionsr   narwhals._arrow.dataframer   narwhals._arrow.seriesr   narwhals._arrow.typingr   narwhals.typingr   r|   r!   r9   rr   r2   r0   <module>r      s    "        > 9 9 ( &824- "   G
 G
Ti)i)/i) i) 4	i)
 %i) i)r2   