
    -Ph{                        d dl mZ d dlZd dlmZmZmZ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 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$dS )    )annotationsN)TYPE_CHECKINGAnyClassVarIteratorMappingSequence)cast_to_comparable_string_typesextract_py_scalar)EagerGroupBy)!evaluate_output_names_and_aliases)generate_temporary_column_name)ArrowDataFrame)	ArrowExpr)AggregateOptionsAggregation
Incomplete)NarwhalsAggregation)UniqueKeepStrategyc                  b    e Zd ZU 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dS )"ArrowGroupBysummeanapproximate_medianmaxminstddevvariancecountcount_distinct)
r   r   medianr   r   stdvarlenn_uniquer   z3ClassVar[Mapping[NarwhalsAggregation, Aggregation]]_REMAP_AGGS)anyfirstlastz2ClassVar[Mapping[UniqueKeepStrategy, Aggregation]]_REMAP_UNIQUEdfr   keys#Sequence[ArrowExpr] | Sequence[str]drop_null_keysboolreturnNonec                 || _         |                     ||          \  }| _        | _        |r|                    | j                  n|| _        t          j        | j        j	        | j                  | _
        || _        d S )N)r,   )_df_parse_keys_keys_output_key_names
drop_nulls_compliant_framepaTableGroupBy	compliantnative_grouped_drop_null_keys)selfr+   r,   r.   frames        X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_arrow/group_by.py__init__zArrowGroupBy.__init__-   sz     484D4DRd4D4S4S1tz41@N Y 0 0 < < <TY(=tzJJ-    exprsr   c                2                          |           g } j                                        } j                                        g  j         j        R }|D ]}t	          | j        |          \  }}|j        dk    r|j        dk    rd}t          |          	                    |d                    |	                     j        d          d           |	                     j        d         dt          j        d          f                                |          dv r,d	|j        v sJ t          j        |j        d	         
          n8dv rt          j        d          ndk    rt          j        d          nd                                                    |           |                    fd|D                        |                    fd|D                         j                            |          }	t'          j        t*                    t-          |          D ] \  }
}|         	                    |
           !t/          |	j                  t/          |          k    r%t3          |	j                  t3          |          k    sd| d|	j         d}t          |          fd|	j        D             }fd|D             |	                              }	 j        j        dk     r1|	j        }|	                    g  j         fd|D                       }	 j                            |	                              t?          tA           j         j                                      S )Nr   r$   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues_countr   all)mode>   r"   r#   ddof)rI   >   r$   r%   
only_validc                    g | ]	}| d  
S )_ ).0output_namefunction_names     rA   
<listcomp>z$ArrowGroupBy.agg.<locals>.<listcomp>`   s'    RRRkK11-11RRRrC   c                    g | ]}|fS rM   rM   )rN   rO   rP   options     rA   rQ   z$ArrowGroupBy.agg.<locals>.<listcomp>c   s     VVV++}f5VVVrC   z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issuesc                F    g | ]}|                              d           S )r   )pop)rN   itemexpected_old_names_indicess     rA   rQ   z$ArrowGroupBy.agg.<locals>.<listcomp>v   s:      
  
  
8<&t,0033 
  
  
rC   c                     g | ]
}|         S rM   rM   )rN   inew_column_namess     rA   rQ   z$ArrowGroupBy.agg.<locals>.<listcomp>y   s    CCCA,Q/CCCrC   )   r   r   c                &    g | ]}|j         v|S rM   )r5   )rN   colr?   s     rA   rQ   z$ArrowGroupBy.agg.<locals>.<listcomp>~   s%    PPP#TZ:O:O:O:O:OrC   )!_ensure_all_simpler5   copyr6   r   r;   _depth_function_nameAssertionErrorappendpcCountOptions
_leaf_name_scalar_kwargsVarianceOptions_remap_expr_nameextendr=   	aggregatecollectionsdefaultdictlist	enumeratesetcolumn_namesr$   rename_columns_backend_versionselect_with_nativerenamedictzip)r?   rD   aggsexpected_pyarrow_column_namesexcludeexproutput_namesaliasesmsgresult_simpleidxrV   	index_mapcolumnsrW   rP   rZ   rS   s   `             @@@@rA   aggzArrowGroupBy.agg;   s   &&&GI37:??3D3D%&*joo&7&78DJ8!788 "	 "	D$Edng% %!L' {a&%//{C(--- ''
333-44
15M5M5MNNNTZ]GR_%5P5P5PQRRR OOD11M..!44444 0d6I&6QRRR"555e444'))l;;; 11-@@M##G,,,)00RRRR\RRR   KKVVVVVVVV    //55 <G;RSW;X;X""#@AA 	9 	9IC&t,33C8888*++s3P/Q/QQQM.//37T3U3UUUY5R Y Y$1Y Y Y 
 !%%% 
  
  
  
@M@Z 
  
  
	 DCCCCCC%445EFF>*Z77#0G)00Q$*QPPPPwPPPQ M ~**=99@@TZ!78899
 
 	
rC   $Iterator[tuple[Any, ArrowDataFrame]]c           	   #    
K   t          d| j        j                  }d}| j        j        
t	          
fd| j        D             ddi\  }}t          j        } |g ||R d|d}
                    d	||
          
t          j	        |          D ]}| j        
                    
                    t          j        
|         |                                        |g                    } |j        | j                             d	          }	t!          d |	D                        |j        | j        j         fV  d S )N   )n_bytesr   __null_token_value__c              3  (   K   | ]}|         V  d S NrM   )rN   keytables     rA   	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s'      //SeCj//////rC   	separator replace)null_handlingnull_replacementr   )rY   field_columnc              3  4   K   | ]}t          |          V  d S r   )r   )rN   els     rA   r   z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s+      ::'++::::::rC   )r   r;   r   r<   r
   r5   rd   binary_join_element_wise
add_columnuniqueru   filterequaldropsimple_selectrowtupler3   )r?   	col_token
null_tokenitseparator_scalar
concat_str
key_valuesvtr   r   s             @rA   __iter__zArrowGroupBy.__iter__   s     2t~5
 
 
	 1
%>////DJ/// 
;= 
  

 "$!<
Z 

!
 
1:Z
 
 

   1Yz JJ:&& 	 	A++RXeI&6::;;@@)MM A "!/4:.22155C::c:::::!12    	 	rC   N)r+   r   r,   r-   r.   r/   r0   r1   )rD   r   r0   r   )r0   r   )	__name__
__module____qualname__r&   __annotations__r*   rB   r   r   rM   rC   rA   r   r      s         &$H HK     I IM    . . . .H
 H
 H
 H
T     rC   r   )r   r   r   )%
__future__r   rl   typingr   r   r   r   r   r	   pyarrowr9   pyarrow.computecomputerd   narwhals._arrow.utilsr
   r   narwhals._compliantr   narwhals._expression_parsingr   narwhals._utilsr   narwhals._arrow.dataframer   narwhals._arrow.exprr   narwhals._arrow.typingr   r   r   narwhals._compliant.group_byr   narwhals.typingr   r   rM   rC   rA   <module>r      s   " " " " " "     L L L L L L L L L L L L L L L L           T T T T T T T T , , , , , , J J J J J J : : : : : : 	3888888......         
 A@@@@@222222E E E E E< LM E E E E ErC   