
    Wh:                        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 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 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)cast_to_comparable_string_typesextract_py_scalar)EagerGroupBy)!evaluate_output_names_and_aliases)generate_temporary_column_name)IteratorMappingSequence)ArrowDataFrame)	ArrowExpr)AggregateOptionsAggregation
Incomplete)NarwhalsAggregation)UniqueKeepStrategyc                  t    e Zd ZU 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<   	 	 	 	 	 	 	 	 ddZddZddZy)ArrowGroupBysummeanapproximate_medianmaxminstddevvariancecountcount_distinctallany)r   r   medianr   r   stdvarlenn_uniquer   r!   r"   z3ClassVar[Mapping[NarwhalsAggregation, Aggregation]]_REMAP_AGGS)r"   firstlastz2ClassVar[Mapping[UniqueKeepStrategy, Aggregation]]_REMAP_UNIQUEc                 || _         | j                  ||      \  }| _        | _        |r|j	                  | j                        n|| _        t        j                  | j                  j                  | j                        | _
        || _        y )N)keys)_df_parse_keys_keys_output_key_names
drop_nulls_compliant_framepaTableGroupBy	compliantnative_grouped_drop_null_keys)selfdfr-   drop_null_keysframes        R/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_arrow/group_by.py__init__zArrowGroupBy.__init__1   sp     484D4DRd4D4S1tz41@N 0 0 <TY(=(=tzzJ-    c           	        | j                  |       g }| j                  j                         }| j                  j                         }g | j                  | j                  }|D ]  }t	        || j
                  |      \  }}|j                  dk(  r|j                  dk7  rd}	t        |	      |j                  |d          |j                  | j                  d    d       |j                  | j                  d   dt        j                  d      f       | j                  |      }
|
dv r4d	|j                  v sJ t        j                  |j                  d	   
      }nT|
dv rt        j                  d      }n9|
dk(  rt        j                  d      }n|
dv rt        j                  d      }nd }| j!                  |
      }
|j#                  |       |j#                  |D cg c]	  }| d|
  c}       |j#                  |D cg c]  }||
|f	 c}        | j$                  j'                  |      }t)        j*                  t,              }t/        |      D ]  \  }}||   j                  |        t1        |j2                        t1        |      k(  r!t5        |j2                        t5        |      k(  sd| d|j2                   d}	t        |	      |j2                  D cg c]  }||   j7                  d       }}|D cg c]  }||   	 }}|j9                  |      }| j
                  j;                  |      j=                  t?        tA        | j                  | j                                    S c c}w c c}w c c}w c c}w )Nr   r&   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues_countr   r!   )mode>   r$   r%   ddof)rD   >   r&   r'   
only_valid>   r!   r"   )	min_count_z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issues)!_ensure_all_simpler0   copyr1   r
   r6   _depth_function_nameAssertionErrorappendpcCountOptions
_leaf_name_scalar_kwargsVarianceOptionsScalarAggregateOptions_remap_expr_nameextendr8   	aggregatecollectionsdefaultdictlist	enumeratesetcolumn_namesr&   poprename_columns_with_nativerenamedictzip)r:   exprsaggsexpected_pyarrow_column_namesnew_column_namesexcludeexproutput_namesaliasesmsgfunction_nameoptionoutput_nameresult_simpleexpected_old_names_indicesidxitem	index_mapis                      r>   aggzArrowGroupBy.agg?   sk   &GI37::??3D%&*jjoo&78DJJ8!7!78 $	D$Ednng%!L' {{a&&%/{C(-- ''
3-44

1f5MNTZZ]GR__%5PQR OOD1M.!4!4444 00d6I6I&6QR"55e4')l;.022Q? 11-@M##G,)00EQRkK=-1R KKIUV++}f5VE$	L //5 <G;R;RSW;X""#@A 	9IC&t,33C8	9 **+s3P/QQM../37T3UU 55R4S T$112 3YY 
 !%%@M@Z@Z 
8<&t,003 
	  
 :CCA,Q/CC%445EF~~**=9@@TZZ!7!789
 	
7 S W& 
 Ds   'M;
N 
*NN
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N ).0keytables     r>   	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s     /SeCj/s   	separator replace)null_handlingnull_replacementr   )rt   field_columnc              3  2   K   | ]  }t        |        y wr|   )r   )r~   els     r>   r   z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s     :'+:s   )r   r6   ry   r7   r   r0   rN   binary_join_element_wise
add_columnuniquer_   filterequaldropsimple_selectrowtupler.   )r:   	col_token
null_tokenitseparator_scalar
concat_str
key_valuesvtr   r   s             @r>   __iter__zArrowGroupBy.__iter__   sJ    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   r-   z#Sequence[ArrowExpr] | Sequence[str]r<   boolreturnNone)rc   r   r   r   )r   z$Iterator[tuple[Any, ArrowDataFrame]])	__name__
__module____qualname__r(   __annotations__r+   r?   ru   r   r}   r@   r>   r   r      s    &$HKD  IME .. 2. . 
.D
Lr@   r   )r   r   r   )&
__future__r   rW   typingr   r   r   pyarrowr4   pyarrow.computecomputerN   narwhals._arrow.utilsr   r   narwhals._compliantr	   narwhals._expression_parsingr
   narwhals._utilsr   collections.abcr   r   r   narwhals._arrow.dataframer   narwhals._arrow.exprr   narwhals._arrow.typingr   r   r   narwhals._compliant.typingr   narwhals.typingr   r   r}   r@   r>   <module>r      sX    "  / /   T , J :;;8. 
 ?2C< LM Cr@   