o
    hx                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
Zd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ erpd dlmZ d dl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)Iterator)Mapping)Sequence)cast_to_comparable_string_typesextract_py_scalar)EagerGroupBy)!evaluate_output_names_and_aliases)generate_temporary_column_name)ArrowDataFrame)	ArrowExpr)
Incomplete)NarwhalsAggregationc                   @  sN   e Zd ZU dddddd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)
r   r   medianr   r   stdvarlenn_uniquer   z+ClassVar[Mapping[NarwhalsAggregation, Any]]_REMAP_AGGScompliant_framer   keysSequence[str]drop_null_keysboolreturnNonec               C  s:   |r	| || _n|| _t|| _t| jj| j| _d S N)	
drop_nulls_compliant_framelist_keyspaTableGroupBy	compliantnative_grouped)selfr#   r$   r&    r5   L/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_arrow/group_by.py__init__)   s
   
zArrowGroupBy.__init__exprsr   c                   s(   | g }j }j |D ]}t|jj\}}|jdkrQ|jdkr/d}t||d  |jd  d |jd dt	j
ddf q|dv rdt	j|jd	 d
ndv rot	j
ddndkrzt	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jdk r|j}|g jfdd|D }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)r<   >   r    r!   
only_validc                   s   g | ]	}| d   qS )_r5   .0output_name)function_namer5   r6   
<listcomp>[       z$ArrowGroupBy.agg.<locals>.<listcomp>c                   s   g | ]}| fqS r5   r5   r?   )rB   optionr5   r6   rC   ^   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)r@   item)expected_old_names_indicesr5   r6   rC   q   s    c                   s   g | ]} | qS r5   r5   )r@   i)new_column_namesr5   r6   rC   t   s    )   r   r   c                   s   g | ]	}| j vr|qS r5   )r.   )r@   col)r4   r5   r6   rC   y   rD   )_ensure_all_simpler.   copyr   r1   _depth_function_nameAssertionErrorappendpcCountOptions
_leaf_nameVarianceOptions_call_kwargs_remap_expr_nameextendr3   	aggregatecollectionsdefaultdictr-   	enumeratesetcolumn_namesr    rename_columns_backend_versionselect_with_native)r4   r8   aggsexpected_pyarrow_column_namesexproutput_namesaliasesmsgresult_simpleidxrG   	index_mapcolumnsr5   )rH   rB   rJ   rE   r4   r6   agg8   sl   











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 |fV  q=d S )N   )n_bytesrm   __null_token_value__c                 3  s    | ]} | V  qd S r*   r5   )r@   keytabler5   r6   	<genexpr>       z(ArrowGroupBy.__iter__.<locals>.<genexpr>	separator replace)null_handlingnull_replacementr   )rI   field_columnc                 s  s    | ]}t |V  qd S r*   r
   )r@   elr5   r5   r6   rv      rw   )r   r1   rm   r2   r	   r.   rS   binary_join_element_wise
add_columnuniquerc   filterequaldropsimple_selectrowtuple)
r4   	col_token
null_tokenitseparator_scalar
concat_str
key_valuesvtr   r5   rt   r6   __iter__}   s8   
zArrowGroupBy.__iter__N)r#   r   r$   r%   r&   r'   r(   r)   )r8   r   r(   r   )r(   ro   )__name__
__module____qualname__r"   __annotations__r7   rn   r   r5   r5   r5   r6   r      s   
 

Er   )r   r   )!
__future__r   r[   typingr   r   r   r   r   r   pyarrowr/   pyarrow.computecomputerS   narwhals._arrow.utilsr	   r   narwhals._compliantr   narwhals._expression_parsingr   narwhals.utilsr   narwhals._arrow.dataframer   narwhals._arrow.exprr   narwhals._arrow.typingr   narwhals._compliant.group_byr   r   r5   r5   r5   r6   <module>   s*    