o
    h                     @  s  U 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m	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ zd d	lm  mZ W n ey[   d d	lZY nw erd 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" eeef Z#de$d< edef Z%de$d< d dl&m'Z( nej)j'Z(dZ*de$d< 	 d&ddZ+d'ddZ,d'd d!Z-G d"d# d#ed$d%e*f Z.d	S )(    )annotations)partial)TYPE_CHECKING)Any)Callable)ClassVar)Mapping)SequenceN)DepthTrackingGroupBy)!evaluate_output_names_and_aliases)SeriesGroupBy)	TypeAlias)NarwhalsAggregationDaskLazyFrame)DaskExprr   PandasSeriesGroupBy._AggFn)GroupByzstr | _AggFnAggregationreturndd.Aggregationc                  C  s$   ddd} ddd	}t jd
| |dS )Nsr   r   pd.Series[Any]c                 S  s   | j ddS )NF)dropna)nunique)r    r   K/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_dask/group_by.pychunk*   s   zn_unique.<locals>.chunks0c                 S  s   |   S N)sum)r   r   r   r   agg-   s   zn_unique.<locals>.aggr   )namer   r"   )r   r   r   r   )r   r   r   r   )ddr   )r   r"   r   r   r   n_unique)   s   

r%   ddofintc                 C     t tj| dS Nr&   )r   _DaskGroupByvarr*   r   r   r   r,   3      r,   c                 C  r(   r)   )r   r+   stdr*   r   r   r   r.   7   r-   r.   c                   @  sD   e Zd ZU dddddeededd
Zd	ed
< dddZdddZ	dS )DaskLazyGroupByr!   meanmedianmaxminsizecount)
r!   r0   r1   r2   r3   r.   r,   lenr%   r5   z3ClassVar[Mapping[NarwhalsAggregation, Aggregation]]_REMAP_AGGSdfr   keysSequence[str]drop_null_keysboolr   Nonec               C  s0   || _ t|| _| jjjt| j|dd| _d S )NT)r   observed)_compliant_framelist_keys	compliantnativegroupby_grouped)selfr8   r9   r;   r   r   r   __init__I   s
   
zDaskLazyGroupBy.__init__exprsr   c                   s   ddl m} |s| jj| j j| jddS | | i }|D ]M}t|| j| j\}}|jdkrF| jd }| 	|j
 |t|| f q| 	| | t rZ di |jn  | fddt||D  q|| jjdi | | jj| jjdS )	Nr   r   any)keepc                 3  s     | ]\}}|| ffV  qd S r    r   ).0aliasoutput_nameagg_fnr   r   	<genexpr>n   s
    

z&DaskLazyGroupBy.agg.<locals>.<genexpr>)backend_versionversionr   )narwhals._dask.dataframer   rB   simple_selectrA   unique_ensure_all_simpler   _depth_remap_expr_name_function_nameupdatedictfromkeys
_leaf_namecallable_call_kwargsziprE   r"   reset_index_backend_version_version)rF   rH   r   simple_aggregationsexproutput_namesaliasescolumnr   rN   r   r"   R   s4   




zDaskLazyGroupBy.aggN)r8   r   r9   r:   r;   r<   r   r=   )rH   r   r   r   )
__name__
__module____qualname__r.   r,   r%   r7   __annotations__rG   r"   r   r   r   r   r/   ;   s   
 
	r/   r   r   )r   r   )r&   r'   r   r   )/
__future__r   	functoolsr   typingr   r   r   r   r   r	   dask.dataframe	dataframer$   narwhals._compliantr
   narwhals._expression_parsingr   dask.dataframe.dask_expr	dask_exprdxModuleNotFoundErrorpandaspdpandas.core.groupbyr   _PandasSeriesGroupBytyping_extensionsr   narwhals._compliant.group_byr   rS   r   narwhals._dask.exprr   r   rl   r   dask_expr._groupbyr   r+   _groupbyr   r%   r,   r.   r/   r   r   r   r   <module>   sB    



