
    }i                       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rOd 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&	 d dl*m
c m+Z, n# e-$ r d dl+Z,Y nw xY we,j.        j        ZdZ/de(d<   	 d#dZ0d#dZ1d#dZ2d$dZ3d$dZ4 G 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                 @    d
d} dd}t          j        d| |	          S )Nsr   r   pd.Series[Any]c                .    |                      d          S )NF)dropna)nuniquer   s    K/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_dask/group_by.pychunkzn_unique.<locals>.chunk(   s    yyy&&&    s0c                *    |                                  S N)sumr%   s    r"   aggzn_unique.<locals>.agg+   s    vvxxr$   r    namer#   r*   r   r   r   r   r%   r   r   r   ddr   r#   r*   s     r"   n_uniquer2   '   sC    ' ' ' '    >y3????r$   c                 @    d
d} dd}t          j        d| |	          S )Nr   r   r   r   c                .    |                      d          S NT)skipnaallr!   s    r"   r#   z_all.<locals>.chunk2       uuDu!!!r$   r%   c                .    |                      d          S r5   r7   r)   s    r"   r*   z_all.<locals>.agg5       vvTv"""r$   r8   r+   r-   r.   r/   r1   s     r"   _allr<   1   C    " " " "# # # # >uEs;;;;r$   c                 @    d
d} dd}t          j        d| |	          S )Nr   r   r   r   c                .    |                      d          S r5   anyr!   s    r"   r#   z_any.<locals>.chunk<   r9   r$   r%   c                .    |                      d          S r5   r@   r)   s    r"   r*   z_any.<locals>.agg?   r;   r$   rA   r+   r-   r.   r/   r1   s     r"   _anyrC   ;   r=   r$   ddofintc                8    t          t          j        |           S NrD   )r   _DaskGroupByvarrH   s    r"   rJ   rJ   E       <#$////r$   c                8    t          t          j        |           S rG   )r   rI   stdrH   s    r"   rM   rM   I   rK   r$   c                  J    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Z
ddZdS )DaskLazyGroupByr(   meanmedianmaxminsizecountquantile)r(   rP   rQ   rR   rS   rM   rJ   lenr2   rU   rV   r8   rA   z3ClassVar[Mapping[NarwhalsAggregation, Aggregation]]_REMAP_AGGSdfr   keys"Sequence[DaskExpr] | Sequence[str]drop_null_keysboolr   Nonec                  |                      ||          \  | _        | _        | _        t	          |          } | j        j        j        | j        fi || _        d S )N)rZ   )r\   )	_parse_keys_compliant_frame_keys_output_key_namesr
   	compliantnativegroupby_grouped)selfrY   rZ   r\   group_by_kwargss        r"   __init__zDaskLazyGroupBy.__init__^   sq     EIDTDTT EU E
 E
Atz4+A /nMMM5-5djTTOTTr$   exprsr   c                  
 ddl m} |sg | j        j        | j                             | j        dd                               t          t          | j        | j	                                      S | 
                    |           i }g | j        | j	        R }|D ]F}t          || j        |          \  }}t          |j                                                  }t          t!          |j                                                            dk    rX| j        d         }	|                     |j                  
|                    t                              ||	
f                     |                     |                     |                    
t-          
          r 
di |j        n

|                    
fdt1          ||          D                        H | | j        j        di |                                | j        j                                      t          t          | j        | j	                                      S )	Nr   r   rA   )keeporder_by   c              3  *   K   | ]\  }}||ffV  d S r'    ).0aliasoutput_nameagg_fns      r"   	<genexpr>z&DaskLazyGroupBy.agg.<locals>.<genexpr>   sE       ' '&E; f-.' ' ' ' ' 'r$   )versionrq   )narwhals._dask.dataframer   rd   simple_selectrb   uniquerenamedictziprc   _ensure_all_simpler   next	_metadataop_nodes_reversedrW   list_remap_expr_namer,   updatefromkeys
_leaf_namecallablekwargsr   rg   r*   reset_index_version)rh   rk   r   simple_aggregationsexcludeexproutput_namesaliases	last_nodecolumnru   s             @r"   r*   zDaskLazyGroupBy.aggl   sh   :::::: 	 -,dj9
>>ST-CDDEEFF 	&&& CE8DJ8!788 	 	D$Edng% %!L' T^==??@@I488::;;<<AAA..y~>>#**4==66BR+S+STTT **4??4+@+@AAF3;F3C3COVV//i.///F&& ' ' ' '*4Wl*K*K' ' '     }DM44 344@@BBN+
 
 
 &c$*d&<==>>
?
?	@r$   N)rY   r   rZ   r[   r\   r]   r   r^   )rk   r   r   r   )__name__
__module____qualname__rM   rJ   r2   r<   rC   rX   __annotations__rj   r*   rq   r$   r"   rO   rO   M   s         H HK     U U U U(@ (@ (@ (@ (@ (@r$   rO   r   r   )r   r   )rD   rE   r   r   )6
__future__r   	functoolsr   typingr   r   r   r   dask.dataframe	dataframer0   narwhals._compliantr	   narwhals._dask.utilsr
   narwhals._expression_parsingr   narwhals._utilsr   collections.abcr   r   pandaspddask.dataframe.apir   rI   pandas.core.groupbyr   _PandasSeriesGroupBytyping_extensionsr   narwhals._compliant.typingr   rx   r   narwhals._dask.exprr   r   r   r   dask.dataframe.dask_expr	dask_exprdxModuleNotFoundError_groupbyr   r2   r<   rC   rJ   rM   rO   rq   r$   r"   <module>r      s   " " " " " " "       9 9 9 9 9 9 9 9 9 9 9 9       4 4 4 4 4 4 5 5 5 5 5 5 J J J J J J & & & & & & '11111111::::::IIIIII++++++>>>>>>666666,,,,,,%9#s(%CCCCC c*F*****----------   ;&L' ' ' ' ' B@ @ @ @< < < << < < <0 0 0 00 0 0 0G@ G@ G@ G@ G@*?J+ST G@ G@ G@ G@ G@s   
	B 	B B 