
    }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'dS )    )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<   d3d'Zd4d+Zd5d.Zd6d/Zd7d1Zd2S )8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_SCALARdfr   keys#Sequence[ArrowExpr] | Sequence[str]drop_null_keysboolreturnNonec                  || _         |                     ||          \  }| _        | _        |r|                    | j                  n|| _        || _        d S )N)r5   )_df_parse_keys_keys_output_key_names
drop_nulls_compliant_frame_drop_null_keys)selfr4   r5   r7   frames        L/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_arrow/group_by.py__init__zArrowGroupBy.__init__C   s`     484D4DRd4D4S4S1tz41@N Y 0 0 < < <TY-    exprr   +tuple[Aggregation, AggregateOptions | None]c                  d }|                      |          }|                     |          }|| j        v r|d         }t          j        |          }n|| j        v rt          j        d          }nr|| j        v rt          j        d          }nS|| j        v rt          j	        d          }n4|| j
        v r+|                    dd	          }t          j	        |
          }|                     |          |fS )Nddof)rK   r#   mode
only_validr   )	min_countignore_nullsF)
skip_nulls)
_leaf_name_kwargsr2   pcVarianceOptionsr/   CountOptionsr0   r3   ScalarAggregateOptionsr1   get_remap_expr_name)rC   rH   optionfunction_namekwargsrK   rP   s          rE   _configure_aggzArrowGroupBy._configure_aggP   s    +/--d##D111&>D'T222FFd444_%000FFd666_,777FFd111.;;;FFd222!::ne<<L.,GGGF$$]33V;;rG   exprspa.TableGroupByc                r   d}d}|D ]x}t          |j                                                  }|j        | j        vr7d}|j                            dd          x}r"|r||k    rd| d| d}t          |          |}y|s7t          dk     r,d	t          j
        t                    d
}t          |          |r2t          j         | j        j        |dddj        | j        |          S |s&t          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   r\   rX   NotImplementedErrorr   r   _unparse_versionpaTableGroupBy	compliantsortnativer>   )rC   r^   rb   rg   rH   md_current_order_bymsgs           rE   _configure_groupedzArrowGroupBy._configure_groupedd   s    
	- 
	-Ddn668899Bwd222K$&IMM*b$A$AA  - 3 1X = =\dk|C-c222, 	+66D!)!:?!K!KD D D 
 &c*** 	?##X%ERRRY
'   
  	Y?4>#8$*RWXXXXt~4djAAArG   c                0   |                      |            | j        | }g }| j                                        }| j                                        g | j        | j        R }|D ]^}t          || j        |          \  }}|j        }	t          |		                                          }
t          |
          dk    r|
d         j        dk    rd}t          |                              |d                    |                    | j        d          d           |                    | j        d         dt          j        d          f           |                     |          \                      |           |                    fd	|D                        |                    fd
|D                        `|                    |          }t'          j        t                    t+          |          D ] \  }}|                             |           !t-          |j                  t-          |          k    r%t          |j                  t          |          k    sd| d|j         d}t          |          fd|j        D             }fd|D             |                              }| j                            |                              t7          t9          | j        | j                                      S )N   r   r*   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues_countr!   r#   rL   c                    g | ]	}| d  
S )_ra   ).0output_namer[   s     rE   
<listcomp>z$ArrowGroupBy.agg.<locals>.<listcomp>   s'    RRRkK11-11RRRrG   c                    g | ]}|fS ra   ra   )r|   r}   r[   rZ   s     rE   r~   z$ArrowGroupBy.agg.<locals>.<listcomp>   s     VVV++}f5VVVrG   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)r|   itemexpected_old_names_indicess     rE   r~   z$ArrowGroupBy.agg.<locals>.<listcomp>   s:      
  
  
8<&t,0033 
  
  
rG   c                     g | ]
}|         S ra   ra   )r|   inew_column_namess     rE   r~   z$ArrowGroupBy.agg.<locals>.<listcomp>   s    CCCA,Q/CCCrG   )_ensure_all_simplerv   r>   copyr?   r   rp   ri   listrj   r*   rk   AssertionErrorappendrT   rV   r]   extend	aggregatecollectionsdefaultdict	enumeratesetcolumn_namesrename_columns_with_nativerenamedictzip)rC   r^   groupedaggsexpected_pyarrow_column_namesexcluderH   output_namesaliasesrs   rj   ru   result_simpleidxr   	index_mapr   r[   r   rZ   s                   @@@@rE   aggzArrowGroupBy.agg   sn   &&&)$)51GI37:??3D3D%&*joo&7&78DJ8!788 	 	D$Edng% %!L' B $R%9%9%;%; < <$%%**$Q',55{C(--- ''
333-44
15M5M5MNNNTZ]GR_%5P5P5PQRRR$($7$7$=$=!M6##G,,,)00RRRR\RRR   KKVVVVVVVV     ))$// <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~**=99@@TZ!78899
 
 	
rG   $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_bytescolumns__null_token_value__c              3  (   K   | ]}|         V  d S Nra   )r|   keytables     rE   	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s'      //SeCj//////rG   	separator replace)null_handlingnull_replacementr   )r   field_columnc              3  4   K   | ]}t          |          V  d S r   )r	   )r|   els     rE   r   z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s+      ::'++::::::rG   )r   rp   r   rr   r   r>   rT   binary_join_element_wise
add_columnuniquer   filterequaldropsimple_selectrowtupler<   )rC   	col_token
null_tokenitseparator_scalar
concat_str
key_valuesvtr   r   s             @rE   __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    	 	rG   N)r4   r   r5   r6   r7   r8   r9   r:   )rH   r   r9   rI   )r^   r   r9   r_   )r^   r   r9   r   )r9   r   )__name__
__module____qualname__r-   __annotations__r.   	frozensetr/   r0   r1   r2   r3   rF   r]   rv   r   r   ra   rG   rE   r   r       s        &$H HK    $ I IM    
 CL)C C     ENIjDYDYYYYY@I	&A AO     BK>AZAZZZZZ?Hy@ @N    . . . .< < < <(B B B B@:
 :
 :
 :
x     rG   r   )r   r   r   )(
__future__r   r   typingr   r   r   pyarrowrn   pyarrow.computecomputerT   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   ra   rG   rE   <module>r      s   " " " " " "     / / / / / / / / / /                   
 - , , , , , J J J J J J D D D D D D D D 3;;;;;;;;;;888888......         
 ?>>>>>222222z z z z z< LM z z z z zrG   