o
    Lh:                     @  s   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rfd 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 ded Z%dS )    )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                   @  sf   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dZd%ddZd&d!d"Zd#S )'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_UNIQUEdfr   keys#Sequence[ArrowExpr] | Sequence[str]drop_null_keysboolreturnNonec               C  sR   || _ | j||d\}| _| _|r|| jn|| _t| 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-   frame r?   Y/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_arrow/group_by.py__init__1   s
   
zArrowGroupBy.__init__exprsr   c                   s:  |  | g }| j }| j g | j| jR }|D ]}t|| j|\}}|jdkrY|jdkr7d}t|	|d  |	| jd  d |	| jd dt
jddf q| |dv rsd	|jv siJ t
j|jd	 d
n#dv r~t
jddndkrt
jddndv rt
jddnd | | |fdd|D  |fdd|D  q| j|}	tt t|D ]\}
} | 	|
 qt|	jt|krt|	jt|ksd| d|	j d}t| fdd|	jD }fdd|D |	}	| j|	tt| j| jS )Nr   r$   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues_countr   r   )mode>   r"   r#   ddof)rE   >   r$   r%   
only_valid>   r   r    )	min_countc                   s   g | ]	}| d   qS )_r?   .0output_name)function_namer?   r@   
<listcomp>f   s    z$ArrowGroupBy.agg.<locals>.<listcomp>c                   s   g | ]}| fqS r?   r?   rI   )rL   optionr?   r@   rM   i   s    z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issuesc                   s   g | ]	} |  d qS )r   )pop)rJ   item)expected_old_names_indicesr?   r@   rM   |   s    c                   s   g | ]} | qS r?   r?   )rJ   i)new_column_namesr?   r@   rM      s    ) _ensure_all_simpler3   copyr4   r	   r9   _depth_function_nameAssertionErrorappendpcCountOptions
_leaf_name_scalar_kwargsVarianceOptionsScalarAggregateOptions_remap_expr_nameextendr;   	aggregatecollectionsdefaultdictlist	enumeratesetcolumn_namesr$   rename_columns_with_nativerenamedictzip)r=   rB   aggsexpected_pyarrow_column_namesexcludeexproutput_namesaliasesmsgresult_simpleidxrP   	index_mapr?   )rQ   rL   rS   rN   r@   agg?   sn   










zArrowGroupBy.agg$Iterator[tuple[Any, ArrowDataFrame]]c           
   	   #  s    t d| jjd}d}| jj t fdd| jD ddi\}}tj}|g ||R d|d	} jd
||d t	|D ]/}| j
 t | ||g}|j| j d
}	tdd |	D |j| jj fV  q=d S )N   )n_bytescolumns__null_token_value__c                 3  s    | ]} | V  qd S Nr?   )rJ   keytabler?   r@   	<genexpr>       z(ArrowGroupBy.__iter__.<locals>.<genexpr>	separator replace)null_handlingnull_replacementr   )rR   field_columnc                 s  s    | ]}t |V  qd S r~   )r   )rJ   elr?   r?   r@   r      r   )r
   r9   r|   r:   r   r3   rZ   binary_join_element_wise
add_columnuniquerj   filterequaldropsimple_selectrowtupler1   )
r=   	col_token
null_tokenitseparator_scalar
concat_str
key_valuesvtr   r?   r   r@   __iter__   s:   
zArrowGroupBy.__iter__N)r*   r   r+   r,   r-   r.   r/   r0   )rB   r   r/   r   )r/   ry   )	__name__
__module____qualname__r&   __annotations__r)   rA   rx   r   r?   r?   r?   r@   r      s*   
 

Fr   )r   r   r   )&
__future__r   rc   typingr   r   r   pyarrowr7   pyarrow.computecomputerZ   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?   r@   <module>   s"    