
    bir                        d dl mZ d dlZd dlZd dlmZmZ d dlm	Z	m
Z
 d dlmZmZ d Z G d de      Z G d	 d
e      Z G d de      Zy)    )annotationsN)DropnaSeriesExpr)	make_metameta_nonempty)import_requiredis_series_likec                     | |i |d   S Nr    )consargskwargss      ]/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/dask_expr/_quantile.py_finalize_scalar_resultr      s      ##    c                      e Zd Zg dZddiZej                  d        Zej                  d        Zej                  d        Z	d Z
ej                  d        Zej                  d	        Zd
 Zy)SeriesQuantile)frameqmethodr   defaultc                
   t        j                  | j                  d            }|j                  dkD  r,t	        |      dkD  s
J d|        |j                  d       |S t        j                  | j                  d      g      S )Nr   r   zmust provide non-empty q=	mergesort)kind)nparrayoperandndimlensortasarray)selfr   s     r   r   zSeriesQuantile.q   so    HHT\\#&'66A:q6A:>!:1#>>:FFF$Hzz4<<,-..r   c                N    | j                  d      dk(  ry| j                  d      S )Nr   r   dask)r   r#   s    r   r   zSeriesQuantile.method   s%    <<!Y.<<))r   c                    | j                   j                  }t        | j                   j                        s|j                         }t	        t        |      j                  | j                  d                  S )Nr   )r   _metar	   	to_seriesr   r   quantiler   r#   metas     r   r(   zSeriesQuantile._meta$   sS    zzdjj../>>#Dt,55dll36GHIIr   c                    t        | j                        r>t        j                  | j                        t        j
                  | j                        fS y)N)NN)r	   r(   r   minr   maxr&   s    r   
_divisionszSeriesQuantile._divisions+   s4    $**%FF466NBFF466N33r   c                    | j                   j                  }t        | j                   j                        s|j                         }|j                  S N)r   r(   r	   r)   _constructorr+   s     r   r3   zSeriesQuantile._constructor0   s;    zzdjj../>>#D   r   c                B     t         j                        r fdS  fdS )Nc                v    j                   | j                  d j                  j                  j                  fS r2   )r3   r   r   r(   nametskr#   s    r   <lambda>z+SeriesQuantile._finalizer.<locals>.<lambda>:   s3    !!

  %%  r   c                .    t         j                  | dgfS r   )r   r3   r7   s    r   r9   z+SeriesQuantile._finalizer.<locals>.<lambda>B   s     79J9JCRSQTU r   )r	   r(   r&   s   `r   
_finalizerzSeriesQuantile._finalizer7   s"    $**%  VUr   c                    t        | j                        }| j                  dk(  r+t        || j	                  d      | j	                  d            S t        || j	                  d      | j	                  d            S )Ntdigestr   r   )r   r   r   SeriesQuantileTdigestr   SeriesQuantileDask)r#   r   s     r   _lowerzSeriesQuantile._lowerD   se    TZZ(;;)#(t||C($,,x*@  &eT\\#->X@VWWr   N)__name__
__module____qualname___parameters	_defaults	functoolscached_propertyr   r   r(   r0   r3   r;   r@   r   r   r   r   r      s    *K9%I/ / * * J J
 ! ! 
V 
VXr   r   c                  J     e Zd Zej                   fd       ZddZd Z xZS )r>   c                0    t        dd       t        |   S )Ncrickz<crick is a required dependency for using the tdigest method.)r   superr(   )r#   	__class__s    r   r(   zSeriesQuantileTdigest._metaO   s    S	
 w}r   c                :   ddl m}m} i }t        | j                  j
                        D ]5  }|t        | j                  j                  |fdff|d| j                  z   |f<   7 | j                  || j                  dz  t        |      f      || j                  df<   |S )Nr   )_percentiles_from_tdigest_tdigest_chunkvalueschunk-d   )dask.array.percentilerN   rO   ranger   npartitionsgetattr_namer;   r   sorted)r#   rN   rO   dskis        r   _layerzSeriesQuantileTdigest._layerV   s    Stzz--. 	A4::++Q/:/CDJJ&*+	  $&fSkB 
TZZO 
r   c                     y r2   r   r&   s    r   r@   zSeriesQuantileTdigest._lowere       r   returndict)	rA   rB   rC   rF   rG   r(   r[   r@   __classcell__)rL   s   @r   r>   r>   N   s%     r   r>   c                      e Zd ZddZd Zy)r?   c           	        ddl m} ddlm} i }t	        j
                  | j                  dz  dd      }d|d<   t        | j                  j                        D ]/  }|| j                  j                  |f|f|d	| j                  z   |f<   1 | j                  || j                  dz  |g| j                  j                  z  t        |      d
d df      || j                  df<   |S )Nr   )percentile_lookup)merge_percentilesrR      constant)moderQ   lowerF)dask.array.dispatchrd   rS   re   r   padr   rT   r   rU   rW   r;   rX   )r#   _percentilere   rY   calc_qsrZ   s         r   r[   zSeriesQuantileDask._layerj   s    H;&&#qz:tzz--. 	A!!1%/CDJJ&*+	  $!	DJJ222s
 
TZZO 
r   c                     y r2   r   r&   s    r   r@   zSeriesQuantileDask._lower   r]   r   Nr^   )rA   rB   rC   r[   r@   r   r   r   r?   r?   i   s    8r   r?   )
__future__r   rF   numpyr   dask.dataframe.dask_expr._exprr   r   dask.dataframe.dispatchr   r   
dask.utilsr   r	   r   r   r>   r?   r   r   r   <module>ru      sC    "   = < 6$;XT ;X|N 6 r   