
    [i#                        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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'y)    )annotationsN)TYPE_CHECKINGAnyClassVar)BACKEND_VERSION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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<   	 	 	 	 	 	 	 	 d%dZ	 	 	 	 d&d Zd'd!Zd(d"Zd)d#Zy$)*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&   	any_valuez3ClassVar[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&   r,   _OPTION_ORDERED)r(   r)   _OPTION_VARIANCE)r$   r#   r   _OPTION_SCALARc                  || _         | j                  ||      \  }| _        | _        |r|j	                  | j                        n|| _        || _        y )N)keys)_df_parse_keys_keys_output_key_names
drop_nulls_compliant_frame_drop_null_keys)selfdfr5   drop_null_keysframes        i/var/www/html/userprofiledev.eatanceapp.com/venv/lib/python3.12/site-packages/narwhals/_arrow/group_by.py__init__zArrowGroupBy.__init__C   sP     484D4DRd4D4S1tz41@N 0 0 <TY-    c                  d }| j                  |      }| j                  |      }|| j                  v r|d   }t        j                  |      }n|| j
                  v rt        j                  d      }n|| j                  v rt        j                  d      }n[|| j                  v rt        j                  d      }n6|| j                  v r(|j                  dd	      }t        j                  |
      }| j                  |      |fS )Nddof)rE   r#   mode
only_validr   )	min_countignore_nullsF)
skip_nulls)
_leaf_name_kwargsr2   pcVarianceOptionsr/   CountOptionsr0   r3   ScalarAggregateOptionsr1   get_remap_expr_name)r=   exproptionfunction_namekwargsrE   rJ   s          rA   _configure_aggzArrowGroupBy._configure_aggP   s     +/-d#D111&>D''T2Fd444__%0Fd666__,7Fd111..;Fd222!::ne<L..,GF$$]3V;;rC   c                   d}d}|D ]|  }t        |j                  j                               }|j                  | j                  vr?d}|j
                  j                  dd      x}s`|r||k7  rd| d| d}t        |      |}~ |s1t        dk  r(d	t        j                  t              d
}t        |      |rGt        j                   | j                  j                  |dddj                  | j                   |      S |s6t        j                  | j                  j                  | j                   d      S t        j                  | j                  j                  | j                         S )N TForder_byz?Only one `order_by` can be specified in `group_by`. Found both z and .)   zlUsing `first/last` 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)
descending
nulls_last)use_threads)next	_metadataop_nodes_reversednamer1   rW   rR   NotImplementedErrorr   r   _unparse_versionpaTableGroupBy	compliantsortnativer8   )r=   exprsr[   r`   rT   md_current_order_bymsgs           rA   _configure_groupedzArrowGroupBy._configure_groupedd   sZ   Ddnn6689Bwwd222K$&IIMM*b$AA A 1X =[\d[eejk|j}}~C-c22,  6!!)!:!:?!K N OCD 
 &c**??###X%ERYY

' 
 ??4>>#8#8$**RWXXt~~44djjAArC   c           	     B   | j                  |        | j                  | }g }| j                  j                         }| j                  j                         }g | j                  | j                  }|D ]E  }t        || j                  |      \  }}	|j                  }
t        |
j                               }t        |      dk(  r|d   j                  dk7  rd}t        |      |j                  |	d          |j                  | j                  d    d       |j                  | j                  d   dt        j                  d      f       | j!                  |      \  }}|j#                  |	       |j#                  |D cg c]	  }| d	|  c}       |j#                  |D cg c]  }|||f	 c}       H |j%                  |      }t'        j(                  t              }t+        |      D ]  \  }}||   j                  |        t-        |j.                        t-        |      k(  r!t        |j.                        t        |      k(  sd
| d|j.                   d}t        |      |j.                  D cg c]  }||   j1                  d       }}|D cg c]  }||   	 }}|j3                  |      }| j                  j5                  |      j7                  t9        t;        | j                  | j                                    S c c}w c c}w c c}w c c}w )N   r   r*   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues_countr!   r#   rF   _z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issues)_ensure_all_simplerp   r8   copyr9   r   ri   rb   listrc   r*   rd   AssertionErrorappendrN   rP   rX   extend	aggregatecollectionsdefaultdict	enumeratesetcolumn_namespoprename_columns_with_nativerenamedictzip)r=   rl   groupedaggsexpected_pyarrow_column_namesnew_column_namesexcluderT   output_namesaliasesrm   rc   ro   rV   rU   output_nameresult_simpleexpected_old_names_indicesidxitem	index_mapis                         rA   aggzArrowGroupBy.agg   s   &)$))51GI37::??3D%&*jjoo&78DJJ8!7!78D$Ednng%!L' B $R%9%9%; <$%*$Q',,5{C(-- ''
3-44

1f5MNTZZ]GR__%5PQR$($7$7$=!M6##G,)00EQR\kK=-1\R KKIUV++}f5V- 4  ))$/ <G;R;RSW;X""#@AIC&t,33C8 B **+s3P/QQM../37T3UU 55R4S T$112 3YY 
 !%%@M@Z@Z 
@Z&t,003@Z 	  
 :CCA,Q/C%445EF~~**=9@@TZZ!7!789
 	
7 S W& 
 Ds   L
'L
<LLc           	   #    
K   t        d| j                  j                        }d}| j                  j                  
t	        
fd| j
                  D        ddi\  }}t        j                  } |g ||d|d}
j                  d	||
      
t        j                  |      D ]  }| j                  j                  
j                  t        j                  
|   |            j                  |g            } |j                  | j
                   j                  d	      }	t!        d |	D               |j                  | j"                  j                   f  y w)N   )n_bytescolumns__null_token_value__c              3  (   K   | ]	  }|     y wNrZ   ).0keytables     rA   	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s     /JSeCjJs   	separator replace)null_handlingnull_replacementr   )r   field_columnc              3  2   K   | ]  }t        |        y wr   )r	   )r   els     rA   r   z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s     :c'+cs   )r   ri   r   rk   r   r8   rN   binary_join_element_wise
add_columnuniquer   filterequaldropsimple_selectrowtupler6   )r=   	col_token
null_tokenitseparator_scalar
concat_str
key_valuesvtr   r   s             @rA   __iter__zArrowGroupBy.__iter__   sE    2t~~55
	 1
%%>/DJJ/ 
;= 

 "$!<!<
 

!
1:Z

   1Yz J:&A++RXXeI&6:;@@)MA "!//4::.2215C:c::!1!12  's   EEN)r>   r   r5   z#Sequence[ArrowExpr] | Sequence[str]r?   boolreturnNone)rT   r   r   z+tuple[Aggregation, AggregateOptions | None])rl   r   r   zpa.TableGroupBy)rl   r   r   r   )r   z$Iterator[tuple[Any, ArrowDataFrame]])__name__
__module____qualname__r-   __annotations__r.   	frozensetr/   r0   r1   r2   r3   rB   rX   rp   r   r   rZ   rC   rA   r   r       s   &$HKD $ IME 
 CLC?  ENjDYAY@I&AO=  BK>AZ>Z?H@N< .. 2. . 
.<<	4<(B@:
xrC   r   )r   r   r   )(
__future__r   r|   typingr   r   r   pyarrowrg   pyarrow.computecomputerN   narwhals._arrow.utilsr   r   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   rZ   rC   rA   <module>r      sa    "  / /   
 - J D;;8. 
 ?2z< LM zrC   