
    bi                    n   d dl mZ d dlZd dlmZ d dlmZ d dlZ	d dl
Zd dlZd dlmZ d dlmZmZmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d d	l$m%Z% d d
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z:m;Z;  G d de'      Z< G d de<      Z= G d de(      Z> G d de(      Z? G d de(      Z@ G d de@      ZA G d deA      ZB G d de@      ZC G d d e@      ZD G d! d"eD      ZE G d# d$eD      ZF G d% d&eD      ZG G d' d(eD      ZH G d) d*e@      ZI G d+ d,eI      ZJ G d- d.eI      ZK G d/ d0eK      ZL G d1 d2eI      ZM G d3 d4eM      ZN G d5 d6eI      Z G d7 d8eI      ZO G d9 d:eI      ZP G d; d<eP      ZQ G d= d>eI      ZR G d? d@eR      ZS G dA dBeI      ZT G dC dDeI      ZU G dE dFeI      ZV G dG dHeI      ZW G dI dJeW      ZX G dK dLeW      ZY G dM dNeI      ZZ G dO dPe'      Z[ G dQ dReI      Z\ G dS dTeI      Z] G dU dVeI      Z^ G dW dXeI      Z_ G dY dZeI      Z` G d[ d\e`      Zad] Zbd^ Zc G d_ d`ea      Zd G da dbed      Ze G dc ddea      Zf G de dfe`      Zg G dg dheI      Zh G di djeh      Zi G dk dleh      Zj G dm dnej      Zk G do dpeI      Zl G dq drel      Zmy)s    )annotationsN)Callable)Anychunk)
moment_aggmoment_chunkmoment_combinenannumel)hyperloglogmethods)_concat_cov_corr_agg_cov_corr_chunk_cov_corr_combine_mode_aggregateidxmaxmin_aggidxmaxmin_chunkidxmaxmin_combineis_dataframe_likeis_index_likeis_series_liketotal_mem_usage)Concat)
	BlockwiseExprIndex
ProjectionRenameFrameRenameSeries
ResetIndexToFramedetermine_column_projectionplain_column_projection)	make_metameta_nonempty)	is_scalar)
no_default)Mapplyfuncnamec                  |    e Zd ZdZg dZed        Zej                  dd       Z	ej                  d	d       Z
d
dZy)ChunkzPartition-wise component of `ApplyConcatApply`

    This class is used within `ApplyConcatApply._lower`.

    See Also
    --------
    ApplyConcatApply
    )framekindr   chunk_kwargsc                    | j                   S Nr   selfs    _/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/dask_expr/_reductions.py	operationzChunk.operation;   s    zz    c                    | j                   gS r2   )r.   r3   s    r5   _argszChunk._args?   s    

|r7   c                "    | j                   xs i S r2   r0   r3   s    r5   _kwargszChunk._kwargsC   s      &B&r7   c                   t        | j                         dt        t        |              d}g }|r5| j                         D ]"  }|j	                  |j                  d             $ | j                  j                         D ]-  \  }}	 || j                  j                  |   k7  r|d| d| z  }/ |g|z   }|D cg c]
  }d|z  |z    }}|S # t        $ r |d| d| z  }Y cw xY wc c}w )N():    =)
r+   r/   typedependenciesextend_tree_repr_linesr<   items	_defaultsKeyError)	r4   indent	recursiveheaderlinesdepkvlines	            r5   rF   zChunk._tree_repr_linesG   s   TYY'((4:*>)?rB((* 6S11!456 LL&&( 	&DAq&		++A..!AaSk)F	& 5 167v$77  &AaS!+%& 8s   'C;C(C%$C%NreturnlistrS   dictr   T)__name__
__module____qualname____doc___parameterspropertyr6   	functoolscached_propertyr9   r<   rF    r7   r5   r-   r-   /   sY     =K    ' 'r7   r-   c                      e Zd ZdZg dZej                  d        Zed        Z	e
d        Zej                  d	d       Zej                  d
d       Zy)	AggregatezPartition-wise aggregation component of `ApplyConcatApply`

    This class is used within `ApplyConcatApply._lower`.
    See Also
    --------
    ApplyConcatApply
    )r.   r/   	aggregateaggregate_kwargsc                F    | j                   t        | j                        d  S r2   )operandslenr\   r3   s    r5   aggregate_argszAggregate.aggregate_argse   s    }}S!1!12455r7   c                &     | t        |      fi |S r2   )rT   )funcargskwargss      r5   _call_with_list_argzAggregate._call_with_list_argi   s    DJ)&))r7   c                V    t        j                  | j                  | j                        S r2   )r^   partialrm   rc   r3   s    r5   r6   zAggregate.operationm   s      !9!94>>JJr7   c                n    | j                   g}| j                  |j                  | j                         |S r2   )r.   rh   rE   r4   rk   s     r5   r9   zAggregate._argsq   s0    

|*KK++,r7   c                "    | j                   xs i S r2   )rd   r3   s    r5   r<   zAggregate._kwargsx   s    $$**r7   NrR   rU   )rX   rY   rZ   r[   r\   r^   r_   rh   staticmethodrm   r]   r6   r9   r<   r`   r7   r5   rb   rb   Z   s     EK6 6 * * K K   + +r7   rb   c                  \    e Zd ZdZg dZdddddddZed        Zd Zed	        Z	d
 Z
d Zy)ShuffleReducezShuffle-reduction component of `ApplyConcatApply`
    when `split_out > 1`

    This class is used within `ApplyConcatApply._lower`.

    See Also
    --------
    ApplyConcatApply
    )r.   r/   _metacombinerc   combine_kwargsrh   rd   split_bysplit_every	split_outsortshuffle_by_indexshuffle_methodignore_index   TN)rz   r{   r|   r}   r~   r   c                z    d| j                   v r-| j                  d      }|du r| j                  j                  S |S y)Nr{   T   )r\   operandr.   npartitionsr4   r{   s     r5   r{   zShuffleReduce.split_out   s?    $***[1ID zz---r7   c                	   ddl m} ddlm}m}m} t        | j                  j                        rD| j                  j                  j                   | j                  j                  j                  ndg}nyt        | j                  j                        rD| j                  j                  j                   | j                  j                  j                  ndg}n| j                  j                  }| j                  xs |}t        |t        t        f      s|g}t!        t#        |      t#        |      z
        }|rg| j                  j$                  dk(  r-t'        | j                  d| j                  j                        }nt'        | j                  d	      }|d gk(  rid
g}net        | j                  j                        st        | j                  j                        rt)        | j                  |d         }n| j                  }|j                  D 	ci c]  }	|	t+        |	      k7  s|	t+        |	       }
}	|
j-                         D ci c]  \  }}||
 }}}|
r+t/        ||
      }|D cg c]  }|
j1                  ||       }}t3        | dd      xs |j4                  }t3        | dd      }| j6                  | j6                   }t9        |j4                  |z  | j:                        }| j<                  r |||||      }n' |||||| xr | j6                  | j>                        }|rt/        ||      }|r<|d
gk7  r)t        | j                  j@                  jB                        n|} |||dd       }| j6                  durt        | j                        rkt        | j                  j                        rL||j                  d      }|j                  dk(  rtE        || j                  j                  j                        }nt        | j                        ro|j                  d   }|jF                  d   d n|jF                  }tI         |||d|            }|dk(  r*tE        || j                  j                  j                        }tK        || jL                  | jN                  | jP                  g| jR                   }| j:                  |j4                  k  r ||| j:                        S |S c c}	w c c}}w c c}w )Nr   Repartition)RearrangeByColumnSetIndexBlockwise
SortValues	__index__
__series__r   F)dropname)r   indexr   rz   r   T)r   r   )r   index_shufflemethodnew_partitions)*%dask.dataframe.dask_expr._repartitionr   !dask.dataframe.dask_expr._shuffler   r   r   r   r.   rv   r   r   columnsry   
isinstancerT   tupleboolsetndimr!   r"   strrG   r   getgetattrr   r}   maxr{   r|   r~   r   namesr    	divisionsr   rb   r/   rc   rd   rh   )r4   r   r   r   r   r   ry   split_by_indexchunkedcolmap_columnsrO   rP   unmap_columnscrz   r   shuffle_npartitionsshuffledidxcolumndivsresults                          r5   _lowerzShuffleReduce._lower   sJ   E	
 	
 ))* zz'',,8 JJ$$))$	G DJJ,,- zz'',,8 JJ$$))%	G jj((G ==+G(T5M2 zHc(mc'l:; zz!#$TZZe$**//R$TZZe<D6!#94::++,tzz?O?O0Pdjjwqz:GjjG 18S3#c(?sCH}SS*5*;*;*=>$!QA>>!';7G7?@!1-@H@ dM15L9L9Lt^T:  ,#444L!;.NN
 99!/)	H )#)"00JT5J5J**H "8];H 2:wi2G$tzz''--.XC(3dCH   -djj)nTZZ=M=M.N#H$4$4Q$78==L0+Hdjj6F6F6K6KLHtzz*!))!,'11!4<t(BTBT !28VT4!PQ[(+Hdjj6F6F6K6KLH IINN!!	

   
 >>F...vdnnEEE T> As   S/&S/	S4+S:c                $    | j                  d      S Nrv   r   r3   s    r5   rv   zShuffleReduce._meta      ||G$$r7   c                &    d| j                   dz   z  S )Nr2   r   )r{   r3   s    r5   
_divisionszShuffleReduce._divisions#  s    $..1,--r7   c                    t        | j                        }t        | dd      }t        |       j                   d| dt        | j                         d| dS Nrz   r   r>   z, kind=z, split_every=)r   r.   r   rC   rX   r+   r/   r4   r   rz   s      r5   __str__zShuffleReduce.__str__&  T    djj/dM15t*%%&ay8K7LN[fZgghiir7   )rX   rY   rZ   r[   r\   rH   r]   r{   r   rv   r   r   r`   r7   r5   ru   ru   }   sc    K$  I  qf % %.jr7   ru   c                      e Zd ZdZg dZddiZej                  d        Zd Z	ej                  d        Z
d Zed	        Zd
 Zd ZddZy)
TreeReducezTree-reduction component of `ApplyConcatApply`

    This class is used within `ApplyConcatApply._lower`.

    See Also
    --------
    ApplyConcatApply
    )r.   r/   rv   rw   rc   rx   rd   rz   rz   r   c                    t        | j                        dv r1t        | j                  j                        j                         dz   }nt        | j                        }|dz   | j                  z   S )N)rw   rc   z-tree-)r+   rw   __self__lowerdeterministic_tokenr4   r   s     r5   _namezTreeReduce._nameB  sY    DLL!%==DLL11288:WDDDLL)DczD4444r7   c                &    t         j                  dfS Nr`   toolzfirstr3   s    r5   __dask_postcompute__zTreeReduce.__dask_postcompute__J      {{Br7   c                v    | j                  d      }|y|du st        |t              r|dk\  r|S t        d      )Nrz   r   Fr@   z+split_every must be greater than 1 or False)r   r   int
ValueErrorr4   outs     r5   rz   zTreeReduce.split_everyM  s?    ll=);%<:c3/C1HJFGGr7   c                   d}i }| j                   j                         }| j                  }|durt        |      |kD  rg }t	        t        j                  |xs t        |      |            D ]  \  }}t        |      }| j                  r0t        | j                  |g| j                  f|| j                  ||f<   n| j                  |f|| j                  ||f<   |j                  | j                  ||f        |dz  }|}|durt        |      |kD  rt        | j                  |g| j                  f|| j                  df<   |S )Nr   Fr   )r.   __dask_keys__rz   rg   	enumerater   partition_allrT   rx   r*   rw   r   appendrc   rd   )r4   jdkeysrz   new_keysibatchs           r5   _layerzTreeReduce._layerV  s?   zz'')&&&3t9{+BH%##K$<3t9dC 45 U&&++	+Adjj!Q&' ,0<<*?Adjj!Q&'Q 234 FAD# &3t9{+B( "4>>D64;P;PQ$**a-r7   c                $    | j                  d      S r   r   r3   s    r5   rv   zTreeReduce._metat  r   r7   c                     yNNNr`   r3   s    r5   r   zTreeReduce._divisionsx      r7   c                    t        | j                        }t        | dd      }t        |       j                   d| dt        | j                         d| dS r   r   r   s      r5   r   zTreeReduce.__str__{  r   r7   c                <   t        | j                         dt        t        |              d}g }|r5| j                         D ]"  }|j	                  |j                  d             $ t        | dd      }|d| z  }|g|z   }|D cg c]
  }d|z  |z    }}|S c c}w )Nr>   r?   r@   rz   r   z split_every=rA   )r+   r/   rC   rD   rE   rF   r   )r4   rJ   rK   rL   rM   rN   rz   rQ   s           r5   rF   zTreeReduce._tree_repr_lines  s    TYY'((4:*>)?rB((* 6S11!456 dM15M+//5 167v$77 8s   BNrW   )rX   rY   rZ   r[   r\   rH   r^   r_   r   r   rz   r   r]   rv   r   r   rF   r`   r7   r5   r   r   ,  s|    	K "I5 5 H H< % %j
r7   r   c                  P   e Zd ZU dZdgZdZded<   dZded<   dZded<   i Z	ded	<   i Z
ded
<   g Zded<   i Zded<   eZed        Zd Zej&                  d        Zej&                  d        Zd Zed        Zed        Zej&                  d        Zej&                  d        Zd Zy)ApplyConcatApplya  Perform reduction-like operation on dataframes

    This pattern is commonly used for reductions, groupby-aggregations, and
    more.  It requires three methods to be implemented:

    -   `chunk`: applied to each input partition
    -   `combine`: applied to lists of intermediate partitions as they are
        combined in batches
    -   `aggregate`: applied at the end to finalize the computation

    These methods should be easy to serialize, and can take in keyword
    arguments defined in `chunks/combine/aggregate_kwargs`.

    In many cases people don't define all three functions.  In these cases
    combine takes from aggregate and aggregate takes from chunk.
    r.   NCallable | Noner   rw   rc   rV   r0   rx   rT   rh   rd   c                    d| j                   v rL| j                  d      }t        |t              r || j                  j
                        }|t        d      |S y)Nr{   zsplit_out can't be Noner   )r\   r   r   r   r.   r   r   r   s     r5   r{   zApplyConcatApply.split_out  sW    $***[1I)X.%djj&<&<=	  !:;;r7   c                    t               r2   )NotImplementedErrorr3   s    r5   r   zApplyConcatApply._layer  s    !##r7   c                z    t        | j                  j                        } | j                  |fi | j                  S r2   )r&   r.   rv   r   r0   )r4   metas     r5   _meta_chunkzApplyConcatApply._meta_chunk  s2    TZZ--.tzz$4$"3"344r7   c                    | j                   }| j                  xs d }| j                  r| j                  }| j                  }n|}| j                  } ||gfi |} ||gfi | j                  }t        |      S )Nc                    | S r2   r`   xs    r5   <lambda>z(ApplyConcatApply._meta.<locals>.<lambda>  s     r7   )r   rc   rw   rx   rd   r%   )r4   r   rc   rw   rx   s        r5   rv   zApplyConcatApply._meta  sx    NN3{	<<llG!00NG!22Nv00$94#8#89r7   c                    t        | dd      ry| j                  du rd| j                  j                  dz   z  S d| j                  dz   z  S )Nr|   Fr   Tr2   r   )r   r{   r.   r   r3   s    r5   r   zApplyConcatApply._divisions  sK    4'>>T!djj44q899$..1,--r7   c                    g S r2   r`   r3   s    r5   _chunk_cls_argsz ApplyConcatApply._chunk_cls_args  s    	r7   c                ~    t        | dd      }t        | j                  t               xr | j                  dk(  xs | S )Nr|   Fr   )r   r   r{   r   )r4   r|   s     r5   should_shufflezApplyConcatApply.should_shuffle  s>    tVU+4>>400HT^^q5HPD
 	
r7   c                    | j                   xs | j                  j                  t        fd| j                  j                  D              ryy)Nc              3  r   K   | ].  }t              t        |t              rt        |      n|hk\   0 y wr2   )r   r   r   ).0colsry   s     r5   	<genexpr>z3ApplyConcatApply.need_to_shuffle.<locals>.<genexpr>  s3      
 M:dE+Bc$iO
s   47FT)ry   r.   r   any-unique_partition_mapping_columns_from_shuffle)r4   ry   s    @r5   need_to_shufflez ApplyConcatApply.need_to_shuffle  sB    ==6DJJ$6$6 


PP
 
 r7   c                   | j                   r"| j                  s| j                  j                  S | j                   r=t	        | j
                  t              s| j
                  hS t        | j
                        hS t               S r2   )	r   r   r.   r   r   ry   rT   r   r   r3   s    r5   r   z>ApplyConcatApply.unique_partition_mapping_columns_from_shuffle  sk    t';';::KKK   "$--6  DMM*+ 5Lr7   c                   | j                   }| j                  }| j                  r| j                  }| j                  }n|}|}| j                  r| j                  }| j
                  }n|}|}t        | dd       } | j                  | j                  t        |       ||g| j                   }| j                  s&t        |t        |       | j                  |||||      S | j                  st        |t        |       ||g| j                    }	| j"                  dur3| j"                  |	j$                  k  rddlm}
  |
|	| j"                        S | j*                  |	j*                  k  r|	|	j,                  d      }	|	S t/        |t        |       | j                  |||| j                   || j0                  | j"                  |t        | dd      t        | d	d       t        | d
d       t        | dd            S )Nrz   )rz   Tr   r   r   r|   Fr}   r~   r   )ry   r{   rz   r|   r}   r~   r   )r   r0   rc   rd   rw   rx   r   
_chunk_clsr.   rC   r   r   r   rv   r   rb   rh   r{   r   dask.dataframe.dask_exprr   r   r   ru   ry   )r4   r   r0   rc   rd   rw   rx   rz   r   r   r   s              r5   r   zApplyConcatApply._lower  s   

((>>I#44I+<<llG!00NG-NdM48!$//JJT
E<
:>:N:N
 ""T


 '	 	 %%T
 	
 $$F ~~T)dnnv?Q?Q.Q@"6$..IIyy6;;&q 12M JJJ]]nn#vu-$T+=tD"4)94@ ~t<
 	
r7   )rX   rY   rZ   r[   r\   r   __annotations__rw   rc   r0   rx   rh   rd   r-   r  r]   r{   r   r^   r_   r   rv   r   r   r   r   r   r   r`   r7   r5   r   r     s   " )K!E?!#G_#!%I%L$NDNDdJ	 	$ 5 5  .   
 
   
 
E
r7   r   c                      e Zd Zg dZddddZ eej                        Z eej                        Z	e
j                  d        Zed        Zed        Zed	        Zedd
       Zedd       Zy)Unique)r.   rz   r{   r~   NTtasks)rz   r{   r~   c                    | j                  t        | j                  j                        | j                  j                  j                        S )N)series_name)r   r&   r.   rv   r   r3   s    r5   rv   zUnique._metaF  s<    zz$****+9I9I9N9N  
 	
r7   c                    | j                   S r2   r   r3   s    r5   ry   zUnique.split_byL  s    yyr7   c                2    d| j                   j                  iS )Nr
  )rv   r   r3   s    r5   r0   zUnique.chunk_kwargsP  s    tzz//r7   c                    | j                   S r2   r;   r3   s    r5   rd   zUnique.aggregate_kwargsT         r7   c                    t        |      S r2   r   clsinputsrl   s      r5   rw   zUnique.combineX      vr7   c                >    t        |      } | j                  |fi |S r2   r   aggregate_funcr  r  rl   dfs       r5   rc   zUnique.aggregate\  #    V_!s!!"///r7   r  rT   )rX   rY   rZ   r\   rH   rs   r   uniquer   r  r^   r_   rv   r]   ry   r0   rd   classmethodrw   rc   r`   r7   r5   r  r  @  s    IK $47SI(E!'..1N
 

   0 0 ! !   0 0r7   r  c                      e Zd Zg dZdddddddZej                  Zej                  Ze	d        Z
ej                  d	        Ze	d
        Zd Zy)DropDuplicates)r.   subsetr   rz   r{   r~   keepNFTr  r   )r   r   rz   r{   r~   r!  c                    | j                   S r2   )r   r3   s    r5   ry   zDropDuplicates.split_byw  s    {{r7   c                    t         | j                  t        | j                  j                        fi | j
                        S r2   )r%   r   r&   r.   rv   r0   r3   s    r5   rv   zDropDuplicates._meta{  s7    DJJ}TZZ%5%56L$:K:KL
 	
r7   c                    d| j                   i}t        | j                  j                        r| j                  |d<   t        | j                  j                        s| j                  |d<   |S )Nr!  r   r   )r!  r   r.   rv   r   r   r   r   s     r5   r0   zDropDuplicates.chunk_kwargs  sV    tyy!TZZ--. KKCMTZZ--."&"3"3C
r7   c                   | j                   t        |t              rt        | ||| j                         }t	        |      t	        | j
                  j                        k(  ry | j
                  j                  D cg c]	  }||v s| }} t        |       t        |       | j
                  |   g| j                  dd   g|j                  dd   S y y c c}w )N)additional_columnsr   )	r   r   r   r#   r   r.   r   rC   rf   )r4   parent
dependentsr   r   s        r5   _simplify_upzDropDuplicates._simplify_up  s    ;;"z&*'E1fjT[[G 7|s4::#5#566&*jj&8&8KsC7NsKGK4<T
4::g.Cqr1BC$  (F" Ls   :	CC)rX   rY   rZ   r\   rH   r)   drop_duplicatesr   r  r]   ry   r^   r_   rv   r0   r)  r`   r7   r5   r  r  b  s    K !I E&&N  
 

  r7   r  c                  L    e Zd Zg dZdddddZej                  d        Zd Zy)
PivotTabler.   r   r   valuesaggfuncNmeanr   r   r.  r/  c                T   | j                   j                  }| j                  d      }| j                  d      }| j                  d      }t        j                  ||   j
                  j                  |      }t        |      r|}n.t        j                  j                  t        |      |fd |g      }| j                  d      dv rt        |      r=t        j                  |||   j                  t        j                  ||               }|S t        j                  |t        j                  ||         	      }|D ])  }||   j                  ||   j                  |         ||<   + |S t        j                  |t         j"                  t        j                  ||               }|S )
Nr   r.  r   r   )r   r/  )r   last)r   dtyper   )r   r   )r.   rv   r   pdCategoricalIndexcat
categoriesr'   
MultiIndexfrom_productsorted	DataFramer4  r   astypedtypesnpfloat64)	r4   r  r   r.  r   columns_contentsnew_columnsr   	value_cols	            r5   rv   zPivotTable._meta  s{   ZZ,,y)h'W%..r'{/I/IPWXV*K--44!124/ 5 K <<	"&77 ||'V***((2e9-&  ||'((2e9- "( I&*9o&<&<6
)))4'DO  <<#2::RXXbi=PD r7   c                   | j                   | j                  d      | j                  d      | j                  d      g}| j                  dk(  rt        | S | j                  dk(  rt        | t	        | z  S | j                  dk(  rt	        | S | j                  dk(  rt        | S | j                  dk(  rt        | S t        d	| j                  d
      )Nr   r   r.  sumr0  countr   r3  zself.aggfunc=z is not implemented)r.   r   r/  PivotTableSumPivotTableCountPivotTableFirstPivotTableLastr   rq   s     r5   r   zPivotTable._lower  s    JJLL#LL!LL"	
 <<5  $''\\V# $'/4*@@@\\W$"D))\\W$"D))\\V#!4((%7J&KLLr7   	rX   rY   rZ   r\   rH   r^   r_   rv   r   r`   r7   r5   r,  r,    s4    DK 44FSI$ $LMr7   r,  c                  V    e Zd Zg dZdddddZed        Zedd       Zedd       Z	y)	PivotTableAbstractr-  Nr0  r1  c                h    | j                  d      | j                  d      | j                  d      dS )Nr   r   r.  )r   r   r.  r   r3   s    r5   r0   zPivotTableAbstract.chunk_kwargs  s2     \\'*||I.ll8,
 	
r7   c                    t        |      S r2   r  r  s      r5   rw   zPivotTableAbstract.combine  r  r7   c                >    t        |      } | j                  |fi |S r2   r  r  s       r5   rc   zPivotTableAbstract.aggregate  r  r7   r  )
rX   rY   rZ   r\   rH   r]   r0   r  rw   rc   r`   r7   r5   rM  rM    sO    DK 44FSI
 
   0 0r7   rM  c                  T    e Zd Z eej
                        Z eej                        Zy)rG  N)	rX   rY   rZ   rs   r   	pivot_sumr   	pivot_aggr  r`   r7   r5   rG  rG    s"    **+E!'"3"34Nr7   rG  c                  T    e Zd Z eej
                        Z eej                        Zy)rH  N)	rX   rY   rZ   rs   r   pivot_countr   rS  r  r`   r7   r5   rH  rH    s"    ,,-E!'"3"34Nr7   rH  c                  T    e Zd Z eej
                        Z eej                        Zy)rI  N)	rX   rY   rZ   rs   r   pivot_firstr   pivot_agg_firstr  r`   r7   r5   rI  rI    s"    ,,-E!'"9"9:Nr7   rI  c                  T    e Zd Z eej
                        Z eej                        Zy)rJ  N)	rX   rY   rZ   rs   r   
pivot_lastr   pivot_agg_lastr  r`   r7   r5   rJ  rJ    s"    ++,E!'"8"89Nr7   rJ  c                      e Zd ZU dZdddddZded<   dZd	ed
<   dZd	ed<   dZd	ed<   e	d        Z
ed        Zedd       Zed        Zd Zd Zd Zd Zy)	Reductiona  A common pattern of apply concat apply

    Common reductions like sum/min/max/count/... have some shared code around
    `_concat` and so on.  This class inherits from `ApplyConcatApply` in order
    to leverage this shared structure.

    I wouldn't be surprised if there was a way to merge them both into a single
    abstraction in the future.

    This class implements `{chunk,combine,aggregate}` methods of
    `ApplyConcatApply` by depending on `reduction_{chunk,combine,aggregate}`
    methods.
    TFr   )skipnanumeric_only	min_countdropnaAnyTrH   Nr   reduction_chunkreduction_combinereduction_aggregatec                .    | j                   j                  S r2   )r.   r   r3   s    r5   _projection_columnszReduction._projection_columns  s    zz!!!r7   c                v     | j                   |fi |}t        |      r|j                         j                  S |S r2   )rc  r   to_frameT)r  r  rl   r   s       r5   r   zReduction.chunk!  s7    !c!!"//#1##6s||~?C?r7   c                    | j                   xs | j                  xs | j                  }t        |      } ||fi |}t	        |      r|j                         j                  S |S r2   )rd  re  rc  r   r   ri  rj  r  r  rl   rj   r  r   s         r5   rw   zReduction.combine'  sY    $$V(?(?V3CVCVV_2  #1##6s||~?C?r7   c                ^    | j                   xs | j                  }t        |      } ||fi |S r2   )re  rc  r   r  r  rl   rj   r  s        r5   rc   zReduction.aggregate/  s1    &&=#*=*=V_B!&!!r7   c                &    t         j                  dfS r   r   r3   s    r5   r   zReduction.__dask_postcompute__5  r   r7   c                    | j                   dk(  s"t        | j                  j                        dk(  ryt	        | j                  j                        t        | j                  j                        fS )Nr   r   )r   rg   r.   r   minr   r3   s    r5   r   zReduction._divisions8  sO    99>S!3!349DJJ&&'TZZ-?-?)@AAr7   c                R     j                   dd  D ci c]  }| j                  |       }}dj                   fd|j                         D              }t	         j
                        }d|v rd|z   dz   }| d j                  j                  j                          d| dS c c}w )Nr   z, c              3     K   | ]5  \  }}|j                   j                  |      ur|d z   t        |      z    7 yw)rB   N)rH   r   repr)r   rO   rP   r4   s      r5   r   z$Reduction.__str__.<locals>.<genexpr>?  sA      
1**1-- Gd1g
s   ;>rA   r>   r   .)	r\   r   joinrG   r   r.   	__class__rX   r   )r4   paramparamssbases   `    r5   r   zReduction.__str__=  s    :>:J:J12:NO%e,,OOII 

 

 4::$;:#Dq0066891#Q?? Ps   B$c                >    t        |t              rt        | ||      S y r2   )r   r   r$   r4   r'  r(  s      r5   r)  zReduction._simplify_upI  s     fj)*4DD *r7   r  )rX   rY   rZ   r[   rH   r  rc  rd  re  r]   rg  r  r   rw   rc   r   r   r   r)  r`   r7   r5   r]  r]    s     	It  (,O_+)--+//" " @ @
 @ @ " "
B

@Er7   r]  c                       e Zd Zg dZej
                  d        Zed        Zedd       Z	ed        Z
ej
                   fd       Zed        Zed        Zed	        Zd
 Zd Z xZS )CustomReduction)r.   r   r0   rd   rx   rz   tokenc                    | j                  d      xs" t        t        |             j                         }|dz   | j                  z   S )Nr  r   )r   r+   rC   r   r   r   s     r5   r   zCustomReduction._nameY  s<    ||G$Dd(<(B(B(DczD4444r7   c                    |j                  d      } ||fi |}t        |      r|j                         j                  S |S Nrj   )popr   ri  rj  )r  r  rl   rj   r   s        r5   r   zCustomReduction.chunk^  s=    zz&!2  #1##6s||~?C?r7   c                    |j                  d      }t        |      } ||fi |}t        |      r|j                         j                  S |S r  )r  r   r   ri  rj  rl  s         r5   rw   zCustomReduction.combinee  sF    zz&!V_2  #1##6s||~?C?r7   c                L    |j                  d      }t        |      } ||fi |S r  )r  r   rn  s        r5   rc   zCustomReduction.aggregatem  s)    zz&!V_B!&!!r7   c                h    | j                  d      t        ur| j                  d      S t        |   S )Nr   )r   r(   superrv   r4   rw  s    r5   rv   zCustomReduction._metas  s-    <<z1<<''w}r7   c                $    | j                  d      S )Nr0   r   r3   s    r5   r0   zCustomReduction.chunk_kwargsy  s    ||N++r7   c                $    | j                  d      S )Nrx   r   r3   s    r5   rx   zCustomReduction.combine_kwargs}  s    ||,--r7   c                $    | j                  d      S )Nrd   r   r3   s    r5   rd   z CustomReduction.aggregate_kwargs  s    ||.//r7   c                     y r2   r`   r}  s      r5   r)  zCustomReduction._simplify_up      r7   c                     yr   r`   r3   s    r5   r   zCustomReduction._divisions  r   r7   r  )rX   rY   rZ   r\   r^   r_   r   r  r   rw   rc   rv   r]   r0   rx   rd   r)  r   __classcell__rw  s   @r5   r  r  N  s    K 5 5 @ @ @ @ " "
  
 , , . . 0 0r7   r  c                  j    e Zd Zg dZdddddZej                  Zed        Z	ed        Z
ed        Zy	)
Sumr.   r^  r_  rz   axisFTr   rz   r_  r^  r  c                Z    t        | j                  | j                  | j                        S Nr^  r_  r  )rV   r^  r_  r  r3   s    r5   r0   zSum.chunk_kwargs  s    4;;T5F5FTYYWWr7   c                D    t        | j                  | j                        S N)r^  r  rV   r^  r  r3   s    r5   rx   zSum.combine_kwargs      4;;TYY77r7   c                D    t        | j                  | j                        S r  r  r3   s    r5   rd   zSum.aggregate_kwargs  r  r7   N)rX   rY   rZ   r\   rH   r)   rE  rc  r]   r0   rx   rd   r`   r7   r5   r  r    sa    LK	I eeOX X 8 8 8 8r7   r  c                  $    e Zd Zej                  Zy)ProdN)rX   rY   rZ   r)   prodrc  r`   r7   r5   r  r    s    ffOr7   r  c                  j    e Zd Zg dZdddddZej                  Zed        Z	ed        Z
ed        Zy	)
Maxr  FTr   r  c                    | j                   j                  j                  dk  rt        | j                        S t        | j                  | j
                  | j                        S )Nr@   r^  r  )r.   rv   r   rV   r^  r_  r  r3   s    r5   r0   zMax.chunk_kwargs  sK    ::  1$t{{++{{1B1B r7   c                D    t        | j                  | j                        S r  r  r3   s    r5   rx   zMax.combine_kwargs  r  r7   c                D    t        | j                  | j                        S r  r  r3   s    r5   rd   zMax.aggregate_kwargs  r  r7   N)rX   rY   rZ   r\   rH   r)   r   rc  r]   r0   rx   rd   r`   r7   r5   r  r    s_    LK	I eeO  8 8 8 8r7   r  c                  $    e Zd Zej                  Zy)MinN)rX   rY   rZ   r)   rq  rc  r`   r7   r5   r  r    s    eeOr7   r  c                  F    e Zd Zg dZdddZej                  Zed        Z	y)r   r.   r^  rz   TF)r^  rz   c                .    t        | j                        S Nr  rV   r^  r3   s    r5   r0   zAny.chunk_kwargs      ;;
 	
r7   N)
rX   rY   rZ   r\   rH   r)   r   rc  r]   r0   r`   r7   r5   r   r     s,    4K6IeeO
 
r7   r   c                  D    e Zd Zg dZddiZej                  Zed        Z	y)Allr  rz   Fc                .    t        | j                        S r  r  r3   s    r5   r0   zAll.chunk_kwargs  r  r7   N)
rX   rY   rZ   r\   rH   r)   allrc  r]   r0   r`   r7   r5   r  r    s,    4K&IeeO
 
r7   r  c                  `    e Zd Zg dZddddZeZeZe	Z
dZed        Zed        Zed        Zy	)
IdxMin)r.   r^  r_  rz   TFr^  r_  rz   idxminc                Z    t        | j                  | j                  | j                        S )N)r^  fnr_  )rV   r^  _reduction_attributer_  r3   s    r5   r0   zIdxMin.chunk_kwargs  s(    ;;((**
 	
r7   c                D    t        | j                  | j                        S )N)r^  r  )rV   r^  r  r3   s    r5   rx   zIdxMin.combine_kwargs  s    4;;4+D+DEEr7   c                `    i | j                   dt        | j                  j                        iS )Nscalar)r0   r   r.   rv   r3   s    r5   rd   zIdxMin.aggregate_kwargs  s)    P$##PX~djj>N>N/OPPr7   N)rX   rY   rZ   r\   rH   r   rc  r   rd  r   re  r  r]   r0   rx   rd   r`   r7   r5   r  r    sh    DKuMI%O)'#
 
 F F Q Qr7   r  c                      e Zd ZdZy)IdxMaxidxmaxN)rX   rY   rZ   r  r`   r7   r5   r  r    s    #r7   r  c                      e Zd Zg dZddddZ ee      Z ee      Z	 ee
      ZdZed        Zed        Zed        Zy)	Cov)r.   min_periodsrz   r  r@   F)r  rz   r  c                    d| j                   iS )Ncorr)r  r3   s    r5   r0   zCov.chunk_kwargs      		""r7   c                    | j                   S r2   r;   r3   s    r5   rx   zCov.combine_kwargs  r  r7   c                    i | j                   | j                  | j                  j                  | j                  j                  dS )N)r  like_dfr   )r0   r  r.   rv   r   r3   s    r5   rd   zCov.aggregate_kwargs  s@    

kkzz''JJ&&	
 	
r7   N)rX   rY   rZ   r\   rH   rs   r   rc  r   rd  r   re  r  r]   r0   rx   rd   r`   r7   r5   r  r    ss    CK !%5II"?3O$%67&}5D# # ! ! 
 
r7   r  c                      e Zd ZdZy)CorrTN)rX   rY   rZ   r  r`   r7   r5   r  r    s    Dr7   r  c                  ,    e Zd Z ee      ZeZd Zd Z	y)Lenc                (   ddl m} t        | j                  t              r?| j                  j                  j
                  rt        | j                  j                        S | j                  j
                  rKt        | j                  t              s1t        | j                  j                         d       }t        |      S t        | j                  |      r| S t        | j                  t              rH| j                  j                  d      dk(  r*t        d | j                  j                         D              S | j                  j                  dk(  r?t        | j                  j                        rt        | j                  j                        S y y )Nr   )IOc                    | j                   S r2   )r   )exprs    r5   r   z$Len._simplify_down.<locals>.<lambda>'  s    DDTDT r7   )keyr  c              3  2   K   | ]  }t        |        y wr2   )r  )r   objs     r5   r   z%Len._simplify_down.<locals>.<genexpr>/  s     ECs3xEs   r@   )dask.dataframe.dask_expr.io.ior  r   r.   r   _is_length_preservingr  r   rD   r   r   rE  r   rg   r   r   )r4   r  childs      r5   _simplify_downzLen._simplify_down  s   5 djj%(TZZ-=-=-S-Stzz''(( ::++Jtzz54Q

//17TUEu: djj"%Kdjj&)djj.@.@.HA.ME4::+B+B+DEEE ::??aC

(:(:$;tzz''(( %<r7   c                     y r2   r`   r}  s      r5   r)  zLen._simplify_up5  r  r7   N)
rX   rY   rZ   rs   rg   rc  rE  re  r  r)  r`   r7   r5   r  r    s    "3'O).r7   r  c                  ,    e Zd ZeZed        Zd Zd Zy)Sizec                    | j                   S r2   )size)r  s    r5   rc  zSize.reduction_chunk<  s    wwr7   c                   t        | j                  j                        rWt        | j                  j                        dkD  r5t        | j                  j                        t        | j                        z  S t        | j                        S )Nr   )r   r.   rv   rg   r   r  r3   s    r5   r  zSize._simplify_down@  sZ    TZZ--.3tzz7I7I3JQ3Ntzz))*S_<<tzz?"r7   c                     y r2   r`   r}  s      r5   r)  zSize._simplify_upF  r  r7   N)	rX   rY   rZ   rE  re  rs   rc  r  r)  r`   r7   r5   r  r  9  s$     #r7   r  c                       e Zd ZeZed        Zy)NBytesc                    | j                   S r2   )nbytes)sers    r5   rc  zNBytes.reduction_chunkN  s    zzr7   N)rX   rY   rZ   rE  re  rs   rc  r`   r7   r5   r  r  J  s     r7   r  c                  >    e Zd Zed        Zedd       Zed        Zy)ArrayReductionc                (     | j                   |fi |S r2   rc  r  r  rl   s      r5   r   zArrayReduction.chunkT      "s""2000r7   c                d    | j                   xs | j                  xs | j                  } ||fi |S r2   )rd  re  rc  r  r  rl   rj   s       r5   rw   zArrayReduction.combineX  s3    $$V(?(?V3CVCVF%f%%r7   c                    | j                   xs | j                  } ||fi |}t        |      r t        |      ||j                  |      S |S )N)r   r   )re  rc  r   rC   r   )r  r  r   r   rl   rj   r   s          r5   rc   zArrayReduction.aggregate]  sM    &&=#*=*=f''$4:f499EBBMr7   Nr  )rX   rY   rZ   r  r   rw   rc   r`   r7   r5   r  r  S  s<    1 1 & &  r7   r  c                      e Zd Zg dZdddddZej                  d        Zed        Z	ed        Z
ed	        Zed
        Zed        Zed        Zy)Var)r.   r^  ddofr_  rz   Tr   F)r^  r  r_  rz   c                    t        t        | j                  j                        j	                  | j
                  | j                              S )N)r^  r_  )r%   r&   r.   rv   varr^  r_  r3   s    r5   rv   z	Var._metam  s@    $****+//{{1B1B 0 
 	
r7   c                .    t        | j                        S r  r  r3   s    r5   r0   zVar.chunk_kwargsu  s    4;;''r7   c                    d| j                   iS )Nr^  r  r3   s    r5   rx   zVar.combine_kwargsy      $++&&r7   c                    | j                   j                  dk(  r| j                   j                  n| j                   j                  j                  }t	        | j
                  | j                  | j                  |      S )Nr   )r  r^  r   r   )r.   r   r   rv   rV   r  r^  )r4   r   s     r5   rd   zVar.aggregate_kwargs}  sW    %)ZZ__%9tzz!!tzz?O?O?W?W;;	
 	
r7   c                    |j                   j                  d      }|r"t        |t        j                  t
        dd      S t        |dd      S )Nf8Tr   )rE  numelkeepdimsr  )r  r  )r.  r=  r	   r   nansumr   )r  r   r^  r.  s       r5   rc  zVar.reduction_chunk  sD    &ELL4d   DAAr7   c                X    |rt        |t        j                  d      S t        |d      S )Nr  )rE  r  )r  )r
   r?  r  )r  partsr^  s      r5   rd  zVar.reduction_combine  s%    !%RYYTBB!%d33r7   c                d    |rt        |t        j                  |d      }|S t        ||d      }|S )Nr  )rE  r  r  )r  r  )r   r?  r  )r  valsr  r^  r   s        r5   re  zVar.reduction_aggregate  s5    "))$TJF   4d;Fr7   N)rX   rY   rZ   r\   rH   r^   r_   rv   r]   r0   rx   rd   r  rc  rd  re  r`   r7   r5   r  r  g  s     MKERWXI
 
 ( ( ' ' 
 
 B B 4 4  r7   r  c                      e Zd ZddgZej
                  d        Zed        Zed        Z	ed        Z
ed        Zed        Zed	        Zy
)Momentr.   orderc                n    t        t        | j                  j                        j	                               S r2   )r%   r&   r.   rv   r  r3   s    r5   rv   zMoment._meta  s'     tzz'7'78<<>??r7   c                .    t        | j                        S )N)r  )rV   r  r3   s    r5   r0   zMoment.chunk_kwargs  s    $**%%r7   c                    | j                   S r2   r;   r3   s    r5   rx   zMoment.combine_kwargs  r  r7   c                n    t        | j                  | j                  | j                  j                        S )N)r  r   r   )rV   r  rv   r.   r   r3   s    r5   rd   zMoment.aggregate_kwargs  s*    ****$$
 	
r7   c                V    |j                   j                  d      }t        ||dd      S )Nr  r  T)r  r  r  )r.  r=  r	   )r  r   r  r.  s       r5   rc  zMoment.reduction_chunk  s%    &F%dTJJr7   c                    t        ||d      S Nr  )r  r  )r
   )r  r  r  s      r5   rd  zMoment.reduction_combine  s    e5t<<r7   c                "    t        ||d      }|S r
  )r   )r  r   r  r   s       r5   re  zMoment.reduction_aggregate  s    DD9r7   N)rX   rY   rZ   r\   r^   r_   rv   r]   r0   rx   rd   r  rc  rd  re  r`   r7   r5   r  r    s    G$K@ @ & & ! ! 
 
 K K = =  r7   r  c                  L    e Zd Zg dZdddddZej                  d        Zd Zy)	Meanr  TFr   )r^  r_  rz   r  c                    t        t        | j                  j                        j	                  | j
                  | j                  | j                              S r  )r%   r&   r.   rv   r0  r^  r_  r  r3   s    r5   rv   z
Mean._meta  sF    $****+00{{1B1B 1 
 	
r7   c                l   | j                   j                  | j                  | j                  | j                        }| j                   j                  | j                  | j                        }| j                  0|j                  dk(  r!|j                         |j                         z  S t        ||      S )Nr  rz   r_  r   )	r.   rE  r^  r_  rz   rF  r  r   MeanAggregate)r4   rz  r   s      r5   r   zMean._lower  s    JJNN;;**((  

 JJ((t7H7H  
 991557QUUW$$ A&&r7   NrK  r`   r7   r5   r  r    s3    LKuVWXI
 
'r7   r  c                  8    e Zd ZddgZ eej                        Zy)r  r.   counterN)rX   rY   rZ   r\   rs   r   mean_aggregater6   r`   r7   r5   r  r    s    I&KW334Ir7   r  c                  V    e Zd Zg dZdddZej                  Zed        Z	e
d        Zy)Count)r.   r_  rz   Fr  c                @    |j                         j                  d      S )Nint64)rE  r=  )r  r  s     r5   re  zCount.reduction_aggregate  s    vvxw''r7   c                    | j                   j                  j                  dk  r
t               S t        | j                        S )Nr@   )r_  )r.   rv   r   rV   r_  r3   s    r5   r0   zCount.chunk_kwargs  s2    ::  1$6MT%6%677r7   N)rX   rY   rZ   r\   rH   r)   rF  rc  r  re  r]   r0   r`   r7   r5   r  r    s@    :K %u=IggO( ( 8 8r7   r  c                  d    e Zd ZddgZddiZ eej                        Z ee	j                        Zy)
IndexCountr.   rz   FN)rX   rY   rZ   r\   rH   rs   r   index_countrc  r?  rE  re  r`   r7   r5   r  r    s5    M*K&I"7#6#67O&rvv.r7   r  c                      e Zd ZdZg dZdddZej                  Zej                  Z
 ee      Zd Zed        Zed        Zy	)
Modezl

    Mode was a bit more complicated than class reductions, so we retreat back
    to ApplyConcatApply
    )r.   ra  rz   TF)ra  rz   c                f    | j                   j                  d   | j                   j                  d   fS )Nr   )r.   r   r3   s    r5   r   zMode._divisions  s+    zz##A&

(<(<R(@@@r7   c                    d| j                   iS Nra  ra  r3   s    r5   r0   zMode.chunk_kwargs  r  r7   c                    d| j                   iS r"  r#  r3   s    r5   rd   zMode.aggregate_kwargs  r  r7   N)rX   rY   rZ   r[   r\   rH   r)   value_countsrc  rE  rd  rs   r   re  r   r]   r0   rd   r`   r7   r5   r  r    sd     5K6InnO&7A ' ' ' 'r7   r  c                      e Zd Zg dZdddZej                  Zej                  Z	ej                  Zej                  d        Zed        Zed        Zed        Zy)	NuniqueApprox)r.   brz      N)r(  rz   c                     y)Ng      ?r`   r3   s    r5   rv   zNuniqueApprox._meta!  s    r7   c                    d| j                   iS )Nr(  )r(  r3   s    r5   r0   zNuniqueApprox.chunk_kwargs%  s    TVV}r7   c                    | j                   S r2   r;   r3   s    r5   rx   zNuniqueApprox.combine_kwargs)  r  r7   c                    | j                   S r2   r;   r3   s    r5   rd   zNuniqueApprox.aggregate_kwargs-  r  r7   )rX   rY   rZ   r\   rH   r   compute_hll_arrayrc  reduce_staterd  estimate_countre  r^   r_   rv   r]   r0   rx   rd   r`   r7   r5   r'  r'    s    /K.I!33O#00%44    ! ! ! !r7   r'  c                  8    e Zd ZdZed        Zedd       Zd Zy)ReductionConstantDimz
    Some reductions reduce the number of rows in your object but keep the original
    dimension, e.g. a DataFrame stays a DataFrame instead of getting reduced to
    a Series.
    c                (     | j                   |fi |S r2   r  r  s      r5   r   zReductionConstantDim.chunk9  r  r7   c                z    | j                   xs | j                  xs | j                  }t        |      } ||fi |S r2   )rd  re  rc  r   rn  s        r5   rw   zReductionConstantDim.combine=  s<    $$V(?(?V3CVCVV_B!&!!r7   c                     yr   r`   r3   s    r5   r   zReductionConstantDim._divisionsC      r7   Nr  )rX   rY   rZ   r[   r  r   rw   r   r`   r7   r5   r2  r2  2  s4     1 1 " "
r7   r2  c                      e Zd Zg dZddddZej                  Zej                  Zd Z	e
d        Ze
d        Ze
d        Zy)	NLargest)r.   n_columnsrz      N)r9  r:  rz   c                :    | j                   i S d| j                   iS )Nr   )r:  r3   s    r5   _columns_kwargzNLargest._columns_kwargN  s     == I4==))r7   c                >    d| j                   i| j                         S )Nr9  )r9  r=  r3   s    r5   r0   zNLargest.chunk_kwargsS  s    TVV5t22455r7   c                    | j                   S r2   r;   r3   s    r5   rx   zNLargest.combine_kwargsW  r  r7   c                    | j                   S r2   r;   r3   s    r5   rd   zNLargest.aggregate_kwargs[  r  r7   )rX   rY   rZ   r\   rH   r)   nlargestrc  re  r=  r]   r0   rx   rd   r`   r7   r5   r8  r8  H  sg    ;KT$?IjjO***
 6 6 ! ! ! !r7   r8  c                F    | j                  ||      j                  |      S N)by	ascending)sort_valuesheadr  r   r9  rE  s       r5   _nfirstrI  `       >>W	>:??BBr7   c                F    | j                  ||      j                  |      S rC  )rF  tailrH  s       r5   _nlastrM  d  rJ  r7   c                  ^     e Zd Zg dZdddddZ ee      Z ee      Ze	 fd       Z
 xZS )NFirst)r.   r9  r:  rE  rz   r;  N)r9  r:  rE  rz   c                4    d| j                   it        |   S )NrE  )rE  r  r0   r  s    r5   r0   zNFirst.chunk_kwargsn  s    T^^Duw/CDDr7   )rX   rY   rZ   r\   rH   rs   rI  rc  re  r]   r0   r  r  s   @r5   rO  rO  h  s?    HKTTRI"7+O&w/E Er7   rO  c                  ,    e Zd Z ee      Z ee      Zy)NLastN)rX   rY   rZ   rs   rM  rc  re  r`   r7   r5   rR  rR  s  s    "6*O&v.r7   rR  c                  <    e Zd Zej                  Zej                  Zy)	NSmallestN)rX   rY   rZ   r)   	nsmallestrc  re  r`   r7   r5   rT  rT  x  s    kkO++r7   rT  c                     e Zd ZddddddddZg dZej                  Zej                  Z
ej                  ZdZej                  d        Zed        Zed	        Zed
        Zed        Zed        Zed        Zd Zd Zy)ValueCountsNFTr   )r|   rE  ra  	normalizerz   r{   total_length)r.   r|   rE  ra  rX  rz   r{   rY  c                b    | j                   j                  j                  | j                        S )N)rX  )r.   rv   r%  rX  r3   s    r5   rv   zValueCounts._meta  s$    zz,,t~~,FFr7   c                    | j                   xs | j                  }t        |d         r |t        |d d       |d   fddi|S  |t        |      fddi|S )Nr   observedT)re  rc  r'   r   r  s       r5   rc   zValueCounts.aggregate  sc    &&=#*=*=VBZ s,fRjR4R6RRA$A&AAr7   c                     y)NTr`   r3   s    r5   r}   zValueCounts.shuffle_by_index  s    r7   c                J    | j                   | j                  | j                  dS )Nr|   rE  ra  r_  r3   s    r5   r0   zValueCounts.chunk_kwargs  s    		$++VVr7   c                r    | j                   r*| j                  dkD  s| j                  du r| j                  gS g S )Nr   T)rX  r{   rY  r3   s    r5   rh   zValueCounts.aggregate_args  s3    >>t~~1T^^t5K%%&&	r7   c                :    i | j                   d| j                  iS )NrX  )r0   rX  r3   s    r5   rd   zValueCounts.aggregate_kwargs  s    A$##A[$..AAr7   c                    | j                   S r2   r;   r3   s    r5   rx   zValueCounts.combine_kwargs  r  r7   c                     y r2   r`   r}  s      r5   r)  zValueCounts._simplify_up  s    r7   c                    | j                   ry| j                  du rd| j                  j                  dz   z  S d| j                  dz   z  S )Nr   Tr2   r   )r|   r{   r.   r   r3   s    r5   r   zValueCounts._divisions  sF    99>>T!djj44q899$..1,--r7   )rX   rY   rZ   rH   r\   r)   r%  rc  r   value_counts_aggregatere  value_counts_combinerd  ry   r^   r_   rv   r  rc   r]   r}   r0   rh   rd   rx   r)  r   r`   r7   r5   rW  rW  }  s    I	K nnO!8844HG G B B   W W  
 B B ! !.r7   rW  c                  F    e Zd Zej                  Zej                  ZdZd Z	y)MemoryUsageFc                     yr   r`   r3   s    r5   r   zMemoryUsage._divisions  r6  r7   N)
rX   rY   rZ   r)   memory_usagerc  rE  re  rz   r   r`   r7   r5   rh  rh    s    nnO%%Kr7   rh  c                  ,    e Zd ZddgZddiZed        Zy)MemoryUsageIndexr.   deepFc                    d| j                   iS )Nrm  )rm  r3   s    r5   r0   zMemoryUsageIndex.chunk_kwargs  r  r7   N)rX   rY   rZ   r\   rH   r]   r0   r`   r7   r5   rl  rl    s'    F#KI# #r7   rl  c                  N    e Zd Zg dZdddZed        Zed        Zed        Z	y)	MemoryUsageFrame)r.   rm  _indexFTrm  rq  c                4    | j                   | j                  dS )N)rm  r   rr  r3   s    r5   r0   zMemoryUsageFrame.chunk_kwargs  s    		DKK88r7   c                D    dt        | j                  j                        iS )Nis_dataframe)r   r.   rv   r3   s    r5   rx   zMemoryUsageFrame.combine_kwargs  s     1$**2B2B CDDr7   c                x    |r)| j                  | j                        j                         S | j                         S r2   )groupbyr   rE  r   ru  s     r5   rd  z"MemoryUsageFrame.reduction_combine  s,    99QWW%))++uuwr7   N)
rX   rY   rZ   r\   rH   r]   r0   rx   rs   rd  r`   r7   r5   rp  rp    sM    -K$/I9 9 E E  r7   rp  c                  0    e Zd ZeZed        Zed        Zy)TotalMemoryUsageFramec                    | S r2   r`   rx  s     r5   rd  z'TotalMemoryUsageFrame.reduction_combine      r7   c                    | S r2   r`   r   s    r5   re  z)TotalMemoryUsageFrame.reduction_aggregate  r|  r7   N)rX   rY   rZ   r   rc  rs   rd  re  r`   r7   r5   rz  rz    s-    %O   r7   rz  c                  x    e Zd Zej                  d        Zej                  Zej                  Z
ej                  Zy)IsMonotonicIncreasingc                     t        t              S r2   )r%   r   r3   s    r5   rv   zIsMonotonicIncreasing._meta  s    r7   N)rX   rY   rZ   r^   r_   rv   r   monotonic_increasing_chunkrc  monotonic_increasing_combinerd  monotonic_increasing_aggregatere  r`   r7   r5   r  r    s?      88O<<!@@r7   r  c                  T    e Zd Zej                  Zej                  Zej                  Z	y)IsMonotonicDecreasingN)
rX   rY   rZ   r   monotonic_decreasing_chunkrc  monotonic_decreasing_combinerd  monotonic_decreasing_aggregatere  r`   r7   r5   r  r    s%    88O<<!@@r7   r  )n
__future__r   r^   collections.abcr   typingr   rb  numpyr?  pandasr5  r   
dask.arrayr   dask.array.reductionsr   r	   r
   r   dask.dataframer   r   dask.dataframe.corer   r   r   r   r   r   r   r   r   r   r   r    dask.dataframe.dask_expr._concatr   dask.dataframe.dask_expr._exprr   r   r   r   r   r    r!   r"   r#   r$   dask.dataframe.dispatchr%   r&   dask.dataframe.utilsr'   dask.typingr(   
dask.utilsr)   r*   r+   r-   rb   ru   r   r   r  r  r,  rM  rG  rH  rI  rJ  r]  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r2  r8  rI  rM  rO  rR  rT  rW  rh  rl  rp  rz  r  r  r`   r7   r5   <module>r     s   "  $      T T /    4   = * " ) )(I (V +  +FljD lj^` `Fn
t n
b0 0D5V 5p=M! =M@0) 0,5& 5
5( 5
;( ;
:' :
GE  GET;i ;|8) 8.3 8) 88# 	
) 	
	
) 	
QY Q2$V $
) 
43 ) >9 "Y Y (7. 7t$^ $N'9 '65I 5
8I 8"/ /'9 '2!I !09 ,!# !0CCEX E/F /
& &
E.& E.P) #{ #{ &	, 	AI AA1 Ar7   