o
    $&]i                     @  s  U d dl mZ d dlmZ d dlmZmZmZ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r~d d	lmZ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eef Z'de(d< edef Z)de(d< nzd dl*m
  m+Z, W n e-y   d dl+Z,Y nw e,j.jZdZ/de(d< 	 d(ddZ0d(ddZ1d(ddZ2d)d d!Z3d)d"d#Z4G d$d% d%ed&d'e/f Z5dS )*    )annotations)partial)TYPE_CHECKINGAnyCallableClassVarN)DepthTrackingGroupBy)make_group_by_kwargs)!evaluate_output_names_and_aliases)
zip_strict)MappingSequence)GroupBy)SeriesGroupBy)	TypeAlias)NarwhalsAggregationDaskLazyFrame)DaskExprr   PandasSeriesGroupBy._AggFnzstr | _AggFnAggregationreturndd.Aggregationc                  C  $   ddd} ddd	}t jd
| |dS )Nsr   r   pd.Series[Any]c                 S     | j ddS )NF)dropna)nuniquer    r!   U/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/narwhals/_dask/group_by.pychunk(      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'      

r1   c                  C  r   )Nr   r   r   r   c                 S  r   NT)skipnaallr    r!   r!   r"   r#   2   r$   z_all.<locals>.chunkr%   c                 S  r   r3   r5   r(   r!   r!   r"   r)   5   r$   z_all.<locals>.aggr6   r*   r,   r-   r.   r0   r!   r!   r"   _all1   r2   r7   c                  C  r   )Nr   r   r   r   c                 S  r   r3   anyr    r!   r!   r"   r#   <   r$   z_any.<locals>.chunkr%   c                 S  r   r3   r8   r(   r!   r!   r"   r)   ?   r$   z_any.<locals>.aggr9   r*   r,   r-   r.   r0   r!   r!   r"   _any;   r2   r:   ddofintc                 C     t tj| dS Nr;   )r   _DaskGroupByvarr?   r!   r!   r"   rA   E      rA   c                 C  r=   r>   )r   r@   stdr?   r!   r!   r"   rC   I   rB   rC   c                   @  sJ   e Zd ZU dddddeededdeed	Zd
e	d< dddZ
dddZdS )DaskLazyGroupByr'   meanmedianmaxminsizecountquantile)r'   rE   rF   rG   rH   rC   rA   lenr1   rJ   rK   r6   r9   z3ClassVar[Mapping[NarwhalsAggregation, Aggregation]]_REMAP_AGGSdfr   keys"Sequence[DaskExpr] | Sequence[str]drop_null_keysboolr   Nonec               C  sB   | j ||d\| _| _| _t|d}| jjj| jfi || _d S )N)rO   )rQ   )	_parse_keys_compliant_frame_keys_output_key_namesr	   	compliantnativegroupby_grouped)selfrN   rO   rQ   group_by_kwargsr!   r!   r"   __init__^   s
   
zDaskLazyGroupBy.__init__exprsr   c           
        sN  ddl m} |s | jj| j j| jdd dtt| j| j	S | 
| i }g | j| j	R }|D ]Y}t|| j|\}}t|j }tt|j dkrf| jd }	| |j |t||	 f q2| | | t rz d	i |jn  | fddt||D  q2|| jjd	i | | jjdtt| j| j	S )
Nr   r   r9   )keeporder_by   c                 3  s     | ]\}}|| ffV  qd S r&   r!   ).0aliasoutput_nameagg_fnr!   r"   	<genexpr>   s
    

z&DaskLazyGroupBy.agg.<locals>.<genexpr>)versionr!   )narwhals._dask.dataframer   rX   simple_selectrV   uniquerenamedictziprW   _ensure_all_simpler
   next	_metadataop_nodes_reversedrL   list_remap_expr_namer+   updatefromkeys
_leaf_namecallablekwargsr   r[   r)   reset_index_version)
r\   r_   r   simple_aggregationsexcludeexproutput_namesaliases	last_nodecolumnr!   rf   r"   r)   l   s>   



zDaskLazyGroupBy.aggN)rN   r   rO   rP   rQ   rR   r   rS   )r_   r   r   r   )__name__
__module____qualname__rC   rA   r1   r7   r:   rM   __annotations__r^   r)   r!   r!   r!   r"   rD   M   s"   
 
rD   r   r   )r   r   )r;   r<   r   r   )6
__future__r   	functoolsr   typingr   r   r   r   dask.dataframe	dataframer/   narwhals._compliantr   narwhals._dask.utilsr	   narwhals._expression_parsingr
   narwhals._utilsr   collections.abcr   r   pandaspddask.dataframe.apir   r@   pandas.core.groupbyr   _PandasSeriesGroupBytyping_extensionsr   narwhals._compliant.typingr   rj   r   narwhals._dask.exprr   r   r   r   dask.dataframe.dask_expr	dask_exprdxModuleNotFoundError_groupbyr   r1   r7   r:   rA   rC   rD   r!   r!   r!   r"   <module>   sB    







