
    bi|n                       U d dl mZ d dlZ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 d dlmZ d dlmZ d dl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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z; 	 d dl<Z=d dl>Z<dZ? G d de      ZA eddeAd      ZB e.j                  ej                        d        ZE e.j                  ej                         e.j                  ej                         e.j                  ej                         e.j                  ej                        d                             ZE e"j                  ej                  ej                  f      d@d       ZE e"j                  ej                        d@d       ZEej                  ej                  ej                  ej                  fZNdeOd<   	 d dlPmQZR eNeRj                  fz  ZN e'j                  ej                  f      d@d       ZT e)j                  ej                  f      d        ZU ej                  ej                  f      d        ZV e&j                  ej                        d         ZW e%j                  ej                         e"j                  ej                        d@d!              ZY e#j                  eN      d@d"       ZZ e%j                  e[      d#        Z\ e%j                  ej                        d$        Z] e%j                  ej                        d%        Z^ e%j                  ej                        d@d&       Z_ e$j                  e      d'        Z` e$j                  ej                        d(        Zb e+j                  ej                  ej                  ej                  ej                  f      dAd)       Zd ej                  ej                        d*        Ze ej                  ej                        d+        Zf ej                  ej                        d,        Zg ej                  e[      d-        Zh e j                  ej                  ej                  ej                  f      	 dBd.       Zi G d/ d0e6ej      Zk ej                  ej                  ej                  ej                  f      dCd1       Zl	 	 	 	 dDd2Zm ej                  ej                  ej                  ej                  f      	 	 	 	 	 dEd3       Zn ej                  ej                  ej                  ej                  f      dFd4       Zo e*j                  ej                  ej                  ej                  ej                  f      d5        Zp e!j                  ej                  ej                  ej                  j                  j                  ej                  f      d6        Zt ej                  ej                  ej                  f      d7        Zu ej                  ej                  ej                  f      dGd8       Zv e(j                  ej                  ej                  ej                  f      d9        Zw G d: d;eA      ZxeBj                  d ex               ej                  d<       ej                  d<       ej                  d<       ej                  d<       e j                  d<       e%j                  d<       e"j                  d<       e#j                  d<       ej                  d<       e(j                  d<       e)j                  d<       e*j                  d<      d=                                                                                     Z{ e$j                  d>       e*j                  d>      d?               Z|y# e@$ r dZ?Y Dw xY w# e@$ r Y w xY w)H    )annotationsN)Iterable)	is_scalarunion_categoricals)Array)percentile_lookup)_percentile)CreationDispatchDaskBackendEntrypoint)PANDAS_GE_220is_any_real_numeric_dtype)categorical_dtype_dispatchconcatconcat_dispatchfrom_pyarrow_table_dispatchget_parallel_typegroup_split_dispatchgrouper_dispatchhash_object_dispatchis_categorical_dtype_dispatchmake_meta_dispatchmake_meta_objmeta_lib_from_arraymeta_nonemptypartd_encode_dispatchpyarrow_schema_dispatchto_pandas_dispatchto_pyarrow_table_dispatchtolist_dispatchunion_categoricals_dispatch)make_array_nonemptymake_scalar)_empty_series_nonempty_scalar_scalar_from_dtypeis_float_na_dtypeis_integer_na_dtype)SimpleSizeofsizeof)is_arraylikeis_series_liketypenameTFc                  |    e Zd ZdZed	d       Zed
d       Zedd       Zed
d       Zedd       Z	edd       Z
y)DataFrameBackendEntrypointzoDask-DataFrame version of ``DaskBackendEntrypoint``

    See Also
    --------
    PandasBackendEntrypoint
    c                   t         )a  Create a DataFrame collection from a dictionary

        Parameters
        ----------
        data : dict
            Of the form {field : array-like} or {field : dict}.
        npartitions : int
            The desired number of output partitions.
        **kwargs :
            Optional backend kwargs.

        See Also
        --------
        dask.dataframe.io.io.from_dict
        NotImplementedError)datanpartitionskwargss      R/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/backends.py	from_dictz$DataFrameBackendEntrypoint.from_dictD   
    " "!    c                    t         )a$  Read Parquet files into a DataFrame collection

        Parameters
        ----------
        path : str or list
            Source path(s).
        **kwargs :
            Optional backend kwargs.

        See Also
        --------
        dask.dataframe.io.parquet.core.read_parquet
        r0   pathr4   s     r5   read_parquetz'DataFrameBackendEntrypoint.read_parquetW   
     "!r8   c                    t         )a  Read json files into a DataFrame collection

        Parameters
        ----------
        url_path : str or list
            Source path(s).
        **kwargs :
            Optional backend kwargs.

        See Also
        --------
        dask.dataframe.io.json.read_json
        r0   )url_pathr4   s     r5   	read_jsonz$DataFrameBackendEntrypoint.read_jsonh   r=   r8   c                    t         )a  Read ORC files into a DataFrame collection

        Parameters
        ----------
        path : str or list
            Source path(s).
        **kwargs :
            Optional backend kwargs.

        See Also
        --------
        dask.dataframe.io.orc.core.read_orc
        r0   r:   s     r5   read_orcz#DataFrameBackendEntrypoint.read_orcy   r=   r8   c                    t         )a  Read CSV files into a DataFrame collection

        Parameters
        ----------
        urlpath : str or list
            Source path(s).
        **kwargs :
            Optional backend kwargs.

        See Also
        --------
        dask.dataframe.io.csv.read_csv
        r0   )urlpathr4   s     r5   read_csvz#DataFrameBackendEntrypoint.read_csv   r=   r8   c                    t         )aT  Read HDF5 files into a DataFrame collection

        Parameters
        ----------
        pattern : str or list
            Source path(s).
        key : str
            Group identifier in the store.
        **kwargs :
            Optional backend kwargs.

        See Also
        --------
        dask.dataframe.io.hdf.read_hdf
        r0   )patternkeyr4   s      r5   read_hdfz#DataFrameBackendEntrypoint.read_hdf   r7   r8   N)r2   dictr3   int)r;   
str | list)r?   rL   )rD   rL   )rG   rL   rH   str)__name__
__module____qualname____doc__staticmethodr6   r<   r@   rB   rE   rI    r8   r5   r.   r.   <   s     " "$ " "  " "  " "  " "  " "r8   r.   	dataframepandasdataframe_creation_dispatch)module_namedefaultentrypoint_classnamec                    t        |       S N)r%   dtypes    r5   _r_      s    e$$r8   c                    | S r\   rS   xs    r5   r_   r_      s	    
 Hr8   c                `   | j                   d d j                  d      }|j                         D ]  \  }}t        |j                  t
        j                  j                        s5t        j                  j                  t        j                  |j                        t        j                  g d            }|j                  t        j                  ||j                  j                        |j                  |j                        ||<    |j                  j                  d      |_        |S )Nr   Tdeepint32)typer]   indexrZ   )iloccopyitems
isinstancearraypdarraysArrowExtensionArraypyarrowcomputetake_constructorr^   ri   rZ   )rb   ri   outkvvaluess         r5   r_   r_      s    
&&!*//t/
$C 		 1aggryy<<=__))agg&bw(GF ^^qww}}5QWW166 $ CF 		D)CIJr8   c                ,    | dd j                  d      S )Nr   Trd   rk   rb   ri   s     r5   r_   r_      s    Qq6;;D;!!r8   ztuple[type, ...]meta_object_typesc                D    t         j                  j                  | |      S )N)preserve_index)paSchemafrom_pandas)objr   s     r5   get_pyarrow_schema_pandasr      s    99  ^ DDr8   c                B    t        j                  j                  | fi |S r\   )r   Tabler   )r   r4   s     r5   get_pyarrow_table_from_pandasr      s     88.v..r8   c                \     d fd}|j                  d|      } |j                  dd|i|S )Nc                    | t        j                         t        j                         hv r@t        j                  d      j
                  j                  v rt        j                  d      S y )Nrr   )r   large_stringstringro   StringDtypedtypesry   )pyarrow_dtypemetas    r5   default_types_mapperz?get_pandas_dataframe_from_pyarrow.<locals>.default_types_mapper   sL     boo/==y)T[[-?-??>>),,r8   types_mapper)r   zpa.DataTypereturnobjectrS   )pop	to_pandas)r   tabler4   r   r   s   `    r5   !get_pandas_dataframe_from_pyarrowr      s4     ::n.BCL5??????r8   c                    ddl m} |S )Nr   )PandasBlocks)partdr   )r_   r   s     r5   partd_pandas_blocksr     s    "r8   c                    t        |       S r\   )r$   r|   s     r5   make_meta_pandas_datetime_tzr     s     Ar8   c                `   t        |       r| j                  r| dd S |t        |      }t        | t              rEt        j                  | j                         D ci c]  \  }}|t        |||       c}}|      S t        | t              r"t        |       dk(  rt        | d   | d   |      S t        | t              r{t        | t              skt        d | D              st        d|        t        j                  | D ci c]  \  }}|t        |||       c}}| D cg c]  \  }}|	 c}}|      S t        | d	      s#| !	 t!        j"                  |       }t%        |      S t)        |       rt+        |       S t-        d
|        c c}}w c c}}w c c}}w # t&        $ r Y Aw xY w)a  Create an empty pandas object containing the desired metadata.

    Parameters
    ----------
    x : dict, tuple, list, pd.Series, pd.DataFrame, pd.Index, dtype, scalar
        To create a DataFrame, provide a `dict` mapping of `{name: dtype}`, or
        an iterable of `(name, dtype)` tuples. To create a `Series`, provide a
        tuple of `(name, dtype)`. If a pandas object, names, dtypes, and index
        should match the desired output. If a dtype or scalar, a scalar of the
        same dtype is returned.
    index :  pd.Index, optional
        Any pandas index to use in the metadata. If none provided, a
        `RangeIndex` will be used.

    Examples
    --------

    >>> make_meta_object([('a', 'i8'), ('b', 'O')])
    Empty DataFrame
    Columns: [a, b]
    Index: []
    >>> make_meta_object(('a', 'f8'))
    Series([], Name: a, dtype: float64)
    >>> make_meta_object('i8')
    np.int64(1)
    Nr   )ri         c              3  \   K   | ]$  }t        |t              xr t        |      d k(   & yw)r   N)rm   tuplelen.0is     r5   	<genexpr>z#make_meta_object.<locals>.<genexpr>B  s'     CA:a'7CFaK7Cs   *,z2Expected iterable of tuples of (name, dtype), got )columnsri   r^   z'Don't know how to create metadata from )r*   shaper   rm   rJ   ro   	DataFramerl   r#   r   r   r   rM   all
ValueErrorhasattrnpr^   r%   	Exceptionr   r$   	TypeError)rb   ri   cdr^   s        r5   make_meta_objectr     s   : A177!u"5)!T||?@wwyIVaQa%00IQV
 	
 !UA!QqT1Q4u55	Ax	 As);CCCQRSQTUVV||?@AVaQa%00A#$%41aQ%
 	

 Q Q]	HHQKE%e,,
 |""
=aSA
BB5 J B%  		s$   F
F
&FF! !	F-,F-c                n    t        |       rt        |       S t        dt        t	        |                    )zCreate a nonempty pandas object from the given metadata.

    Returns a pandas DataFrame, Series, or Index that contains two rows
    of fake data.
    z>Expected Pandas-like Index, Series, DataFrame, or scalar, got )r   r$   r   r,   rg   ra   s    r5   meta_nonempty_objectr   Z  s<     |""DG$%'
 	
r8   c           	        t        | j                        }t               }t               }t        t	        | j
                              D ]N  }| j                  d d |f   }|j                  }||vr!t        | j                  d d |f   |      ||<   ||   ||<   P t        j                  ||t        j                  t	        | j
                                    }| j
                  |_        | j                  |_        |S )N)idx)ri   r   )r   ri   rJ   ranger   r   rj   r^   _nonempty_seriesro   r   r   arangeattrs)rb   r   	dt_s_dictr2   r   seriesdtress           r5   meta_nonempty_dataframer   j  s    

 CI6D3qyy>"  1\\Y,QVVAqD\sCIbMB-Q  ,,t3		#aii.0I
JC))CKCIJr8   c           	     	   t        |       }|t        j                  u r,t        j                  d| j                  | j                        S t        |       r! |ddg| j                  | j                        S |t        j                  u rFd}	 t        j                  |d| j                  | j                  | j                  | j                        S |t        j                  u r-t        j                  dd| j                  | j                        S |t        j                  u rDt        j                   dd	      }	 t        j"                  |d| j                  | j                        S |t        j$                  u rt'        | j(                        d
k(  r5t        j*                  t-        | j(                        | j.                        }n8t        j*                  j1                  dd
g| j(                  | j.                        }t        j$                  || j                        S |t        j2                  u r`| j4                  D cg c]  }t-        |       }}| j4                  D cg c]  }d
d
g }}	 t        j2                  ||| j6                        S |t        j:                  u rt        | j                        t<        j>                  v r?t        j:                  t=        | j                        | j                  | j                        S | j                  t@        k(  r#t        j:                  ddg| j                        S t        j:                  ddg| j                  | j                        S t9        dtC        t        |                    # t        $ rN | j                  |dgnd }t        j                  ||d| j                  | j                  | j                        cY S w xY w# t        $ r\ t        j                   dd	      }| j                  ||dz   gnd }t        j                  ||d| j                  | j                        cY S w xY wc c}w c c}w # t8        $ r% t        j2                  ||| j6                        cY S w xY w)Nr   )rZ   r^   r   
1970-01-01)startperiodsfreqtzrZ   unitz
1970-01-02)r   r   r   r   rZ   )r   r   r   rZ   Dr   )ordered
categoriesr   rZ   )levelscodesnames)r   labelsr   )r^   rZ   TFabz'Don't know how to handle index of type )"rg   ro   
RangeIndexrZ   r^   r   DatetimeIndex
date_ranger   r   r   r   PeriodIndexperiod_rangeTimedeltaIndexr   timedelta64timedelta_rangeCategoricalIndexr   r   Categorical_nonempty_indexr   
from_codes
MultiIndexr   r   r   Indexr!   _lookupboolr,   )r   typr   r2   lr   r   r   s           r5   r   r   {  s   
s)C
bmm}}QSXXSYY??	"3	'Aq6		::	  	 	==XX66XXXX  
	sxx
 	
 
!!	!q#&		%%QSXXCHH  
##	#s~~!#>>/#.."A3;;WD>>,,QCNNCKK - D ""4chh77		.1jj9/!$99!$,A!Q,,	O==e399MM 
		?199988#CII.ciichh  YY$88T5M99 88S#JSXXSYYGG
=htCy>Q=RS
TTc  	,/HH,<E<($D##E1388SXX 	  	NN1c*E),)9E519%tD$$E1388#(( 	 :,  	O==uCIINN	OsE   AN 6,O! ;Q	Q+!Q AOO!A"QQ+R Rc                z   |t        | j                        }| j                  }t        |       dkD  r| j                  d   gdz  }nAt        |t        j                        r<t        j                  d|j                        }t        j                  ||g|      }nt        |t        j                        rUt        | j                  j                        rddg}nddg}t        j                  j                  || j                        }n|t!        |      rt        j                  dd g|      }nVt#        |      rt        j                  dd g|      }n0t        |t        j$                        r9|j&                  }t        j(                  d	|      t        j(                  d
|      g}nt        |t        j*                        r/t-        |j.                        }t        j                  ||g|      }nt        |t        j0                        r/t-        |j.                        }t        j                  ||g|      }nKt3        |      t4        j6                  v rt5        |      }n$t-        |      }t9        j                  ||g|      }t        j:                  || j<                  |      }| j>                  |_        |S )Nr   r   r   )r   r]   r   r   g      ?20002001)rZ   ri   ) r   ri   r^   r   rj   rm   ro   DatetimeTZDtype	Timestampr   rn   CategoricalDtypecatr   r   r   r'   r&   PeriodDtyper   PeriodSparseDtyper%   subtypeIntervalDtyperg   r!   r   r   SeriesrZ   r   )sr   r^   r2   entryr   r   rv   s           r5   r   r     s    {agg&GGE
1vzq	{Q	E2--	.\ehh7xxe4	E2..	/quu FEHE~~((agg(>	U	#xxD	/	5	!xxd51	E2>>	*zz		&$'64)@A	E2>>	*"5==1xxe4	E2++	,"5==1xxe4	e+33	3"5)"5)xxe4
))DqvvS
1CCIJr8   c                ,    t        | j                        S r\   )r   _metara   s    r5   _meta_lib_from_array_dar     s     qww''r8   c                    t         S r\   )ro   ra   s    r5   _meta_lib_from_array_numpyr     s	     Ir8   c                Z    t         j                  j                  j                  | ||      S )N)sort_categoriesignore_order)ro   apitypesr   )to_unionr   r   s      r5   union_categoricals_pandasr     s+     66<<**/ +  r8   c                    ddl m} |S )Nr   )r   )$dask.dataframe.dask_expr._collectionr   )r_   r   s     r5   get_parallel_type_seriesr    
    ;Mr8   c                    ddl m} |S )Nr   )r   )r  r   )r_   r   s     r5   get_parallel_type_dataframer    s    >r8   c                    ddl m} |S )Nr   )r   )r  r   )r_   r   s     r5   get_parallel_type_indexr    s
    :Lr8   c                    ddl m} |S )Nr   )Scalar)r  r
  )r_   r
  s     r5   get_parallel_type_objectr    r  r8   c                J    t         j                  j                  | ||||      S )N)ri   encodinghash_key
categorize)ro   utilhash_pandas_object)r   ri   r  r  r  s        r5   hash_object_pandasr  "  s+     77%%58h: &  r8   c                        e Zd Zd fdZ xZS )ShuffleGroupResultc                    t         |          }| j                         D ]!  \  }}|t        |      z  }|t        |      z  }# |S )ag  
        The result of the shuffle split are typically small dictionaries
        (#keys << 100; typically <= 32) The splits are often non-uniformly
        distributed. Some of the splits may even be empty. Sampling the
        dictionary for size estimation can cause severe errors.

        See also https://github.com/dask/distributed/issues/4962
        )super
__sizeof__rl   r)   )self
total_sizerw   df	__class__s       r5   r  zShuffleGroupResult.__sizeof__,  sO     W')
ZZ\ 	%EAr&)#J&*$J	% r8   )r   rK   )rN   rO   rP   r  __classcell__)r  s   @r5   r  r  +  s     r8   r  c                   t        |      r|j                  }t        j                  j                  j                  |j                  t        j                  d      |      \  }}| j                  |      }|j                         }t        |d d |dd        D cg c]5  \  }}|r|j                  || j                  d      n|j                  || 7 }	}}t        t        t        |      |	            S c c}}w )NFr{   r   r   Tdrop)r+   ry   ro   _libsalgosgroupsort_indexerastyper   intprt   cumsumziprj   reset_indexr  r   )
r  r   rw   ignore_indexindexer	locationsdf2r   r   partss
             r5   group_split_pandasr-  <  s    aHH99	u%qGY '''
C  "I 	#2	!"6Aq 1=1!!t!,#((1Q-OE  c%(E233	s   :C5c                   | D ch c],  }|j                   j                  j                   j                  . }}d|v rd|v r| D cg c]  }|j                   j                  j                   j                  dk(  rSt        |      dk(  rE t	        |      t        j                  t        j                  g d            |j                        n| } }t        | fi |S c c}w c c}w )a  
    A wrapper around pandas' union_categoricals that handles some dtype issues.

    union_categoricals requires that the dtype of each array's categories match.
    So you can't union ``Categorical(['a', 'b'])`` and ``Categorical([1, 2])``
    since the dtype (str vs. int) doesn't match.

    *Somewhere* in Dask, we're possibly creating an empty ``Categorical``
    with a dtype of ``object``. In pandas 2.x, we could union that with string
    categories since they both used object dtype. But pandas 3.x uses string
    dtype for categories.

    This wrapper handles that by creating a new ``Categorical`` with the
    correct dtype.
    r   rM   r   r]   r   )	r^   r   rZ   r   rg   ro   r   r   r   )dfsr4   r   categories_dtypess       r5   _union_categoricals_wrapperr1  L  s    $ EHHS--3388HH$$2C)C 
  99''--22h>3s8q= S	".."E)BC#((S
 
 c,V,, I
s   1CB	C c                   |j                  dd      }|dk(  rt        j                  | f||d|S t        | d   t        j                        rt        | d   t        j
                        r~t        dt        |             D ]7  }t        | |   t        j
                        r!| |   j                  d      | |<   9 t        j
                  t        | |      | d   j                        S t        | d   t        j                        r| d   | dd  c}	t        fd	|	D              rut        j                        D 
cg c]*  }
t        | D cg c]  }|j                  |
       c}      , }}
}t        j                  j                  |j                   
      S j"                  ft%        d |	D              z   }t'        j(                  |      }	 t        j                  j+                  |j                   
      S | d   j/                  | dd        S | d   j0                  }t        |t        j
                        xs8 t        |t        j                        xr t3        d |j4                  D              }|rC| D cg c]  }|j7                  d       }}t        | D cg c]  }|j0                   c}      }n| }d }|rt        |d   t        j8                        rMnt3        d |D              r9|st:        r|}|d   j<                  dk(  }n|D cg c]J  }t        |t        j8                        r|n+|j?                         jA                  |j                  di      L }}tC        jD                         5  tC        jF                  dtH               |rtC        jF                  dtJ               t        j                  |D cg c])  }|j<                  dk(  j?                         jL                  + c}fd|i|j3                         }d d d        t        t        jN                        r|j3                         r||    j0                  }t        j                  |D cg c]   }||jP                  jS                  |         " c}fd|i|}|j0                  }|j0                  jU                  |      D ]  }|D ]  }|jW                  |      }| n g }|D ]  }||jP                  v r|j/                  ||          &t'        jX                  t        |      dd      }t        jZ                  j]                  |j^                  j`                  |j^                  jb                        }|j/                  |        t        ||      ||<   t        |      r||_         |je                  |j0                        }n9tC        jD                         5  tC        jF                  dtH               |rtC        jF                  dtJ               t        j                  ||d      }d d d        nt        |d   jf                  t        jh                        rU|#t        |D cg c]  }|j0                   c}      }t        jN                  tk        ||      ||d   j                        S tC        jD                         5  |rtC        jF                  dtJ               t        j                  |fd|i|}d d d        ||_        S c c}w c c}}
w # t,        $ r t        j                  |      cY S w xY wc c}w c c}w c c}w c c}w # 1 sw Y   ?xY wc c}w # 1 sw Y   ixY wc c}w # 1 sw Y   zxY w)Nr   Fr   )axisjoinr   category)r   r   c              3     K   | ]9  }t        |t        j                        xr |j                  j                  k\   ; y wr\   )rm   ro   r   nlevels)r   ofirsts     r5   r   z concat_pandas.<locals>.<genexpr>  s9       Ar}}-L!))u}}2LLs   ?A)r   c              3  4   K   | ]  }|j                     y wr\   )_values)r   rw   s     r5   r   z concat_pandas.<locals>.<genexpr>  s     /Ha		/Hs   c              3  P   K   | ]  }t        |t        j                           y wr\   )rm   ro   r   r   s     r5   r   z concat_pandas.<locals>.<genexpr>  s     Nq
1b112N   $&Tr  c              3  P   K   | ]  }t        |t        j                           y wr\   )rm   ro   r   )r   r  s     r5   r   z concat_pandas.<locals>.<genexpr>  s     ="B-=r=  )r   ignorer4  r   i8r]   )r4  sortrh   )6r   ro   r   rm   r   r   r   r   r#  r1  rZ   r   r   r7  _get_level_valuesfrom_arraysr   ry   r   r   concatenatefrom_tuplesr   appendri   anyr   r'  r   r   r   to_framerenamewarningscatch_warningssimplefilterRuntimeWarningFutureWarningTr   r   intersection
differencegetfullr   r   r   r   r   reindexr^   r   r   )r/  r3  r4  uniformfilter_warningr(  r4   r   r   restnrp   	to_concat
new_tuples
dfs0_indexhas_categoricalindexr  dfs2inddfs3cat_masknot_catrv   temp_indcolsampler,  r   r2   r9  s                                @r5   concat_pandasre  l  sz    ::ne4Lqyyy=4d=f== #a&"((#c!fb1121c#h' 7!#a&"*=*=> V]]:6CF7 &&+ClKV[[  A.a&#ab'KE4   #5==1 C@qA//2@A  }}00u{{0KK%/H4/H*HHI	2J,}}005;;0OO 1v}}SW%% QJ%j"2E2EF :r}}- 	ONJ<M<MNN 
 478bD)88-2bhh-.
  	47BLL)===mDAw~~3H   ""bll3 --rwwl-CDD  ((* %%h?!))(MB99FJKbii:-779;;K  #%	 	 h		*x||~y)//G))@DE"BJJ++G45E C
 yyH~~009 ) BVVC[F)
  +Bbjj(RW- "B4 @!~~88!6::#8#8&**:L:L  T*+ 7u<XC 8} (CI+), ++hnn+5C ((* =%%h?!))(MBii4e<	= = d1gmmR%8%89{62bhh6799"4lC!W\\ 
 $$& 	7%%h>))D6t6v6C		7 	Ji A  ,xx
++, 9-$ L  F<= = 7	7 	7s   ?\
\%	\
*\ =\4!\9A\>;A
].]
3]"%]A]]&=5]+\
\10\1]]]#+]4c                X    t         j                  j                  j                  | |      S )Nr   )ro   r   r   r   r   s     r5   categorical_dtype_pandasrg    s     66<<((J(PPr8   c                "    | j                         S r\   tolistr   s    r5   tolist_numpy_or_pandasrl    s    ::<r8   c                l    t        | d      r| j                  }n| }t        |t        j                        S )Nr^   )r   r^   rm   ro   r   )r   r^   s     r5   is_categorical_dtype_pandasrn    s/     sG		eR0011r8   c                J    t         j                  j                  j                  S r\   )ro   coregroupbyGrouperrk  s    r5   get_grouper_pandasrs    s    77??"""r8   c                    t        | j                  t        j                        r| j	                         } t        | ||      S r\   )rm   r^   ro   
ArrowDtypeto_numpyr	   )r   qinterpolations      r5   
percentilery    s.    !''2==)JJLq!]++r8   c                    | S r\   rS   )r2   r4   s     r5   to_pandas_dispatch_from_pandasr{  $  s    Kr8   c                  0    e Zd ZdZed        Zed        Zy)PandasBackendEntrypointzPandas-Backend Entrypoint Class for Dask-DataFrame

    Note that all DataFrame-creation functions are defined
    and registered 'in-place' within the ``dask.dataframe``
    ``io`` module.
    c                    t         S r\   )r   )clss    r5   to_backend_dispatchz+PandasBackendEntrypoint.to_backend_dispatch1  s    !!r8   c                    t        |j                  t        j                  t        j                  t        j
                  f      r|S  |j                  | j                         fi |S r\   )rm   r   ro   r   r   r   map_partitionsr  )r  r2   r4   s      r5   
to_backendz"PandasBackendEntrypoint.to_backend5  sI    djj2<<BHH"EFK"t""3#:#:#<GGGr8   N)rN   rO   rP   rQ   classmethodr  r  rS   r8   r5   r}  r}  )  s1     " " H Hr8   r}  cudfc                     dd l } y )Nr   	dask_cudfr  s    r5   _register_cudfr  E  s     r8   cupyc                     	 dd l dd l} t        j                  | j                        fd       }t        j                  | j                        d        }y # t        $ r Y y w xY w)Nr   c                    S r\   rS   )rb   r  s    r5   meta_lib_from_array_cupyz8_register_cupy_to_cudf.<locals>.meta_lib_from_array_cupy]  s
     Kr8   c                "    | j                         S r\   ri  ra   s    r5   tolist_cupyz+_register_cupy_to_cudf.<locals>.tolist_cupyb  s    88:r8   )r  r  r   registerndarrayr   ImportError)r  r  r  r  s      @r5   _register_cupy_to_cudfr  U  sf    		%	%dll	3	 
4	 
	!	!$,,	/	 
0	  s   AA 	A$#A$r\   )FF)Tutf8NT)F)r/  z+list[pd.CategoricalIndex] | list[pd.Series]r   zpd.Categorical)r   outerFTF)NF)linear)}
__future__r   rJ  collections.abcr   numpyr   rU   ro   pandas.api.typesr   r   
dask.arrayr   dask.array.dispatchr   dask.array.percentiler	   dask.backendsr
   r   dask.dataframe._compatr   r   dask.dataframe.dispatchr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    dask.dataframe.extensionsr!   r"   dask.dataframe.utilsr#   r$   r%   r&   r'   dask.sizeofr(   r)   
dask.utilsr*   r+   r,   rr   r   pyarrow.computeHAS_PYARROWr  r.   rV   r  r^   r_   r   	Timedeltar   Intervalr   r   r   r   r}   __annotations__scipy.sparsesparsespspmatrixr   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r  r  r  r  r  rJ   r  r-  r1  re  rg  rl  r   
extensionsExtensionDtypern  rs  ry  r{  r}  register_backendregister_lazyr  r  rS   r8   r5   <module>r     sA   "  $   :  1 - A K     * G  - = = Kp"!6 p"f //	&	  bhh%  % bll#bll#bii bkk" # ! $ $ bii67 8, RXX&" '" (*yy",,"--&X # X	"++'
 "!!2<</2E 3E $##R\\O4/ 5/
 &%%r||o6@ 7@"  - . **+R//0 1 , )*>C +>CB 
  
 % &  !GU "GUT 		"' #'T e$( %(
 bjj) *
 &%%\\299bhh7 BII& ' BLL) * BHH% & F# $ biiBC@D Dt " biiBC4 D4-	4--@ 2<<BHH=> 
	S ?Sl %$$bllBIIrxx%HIQ JQ 2::ryy"((BNNKL M (''YY"&&++::BHHE22 BLL"))45# 6# RYY12, 3, bllBIIrxx@A BH8 H(  , ,X7N7P Q v&***62###F+   (###F+V$!!!&)V$   (!!!&)(((0v& ' 1 * ) % * % , ) , 3 ' #""6*v& ' +C  Kh  		s$   _ _) _&%_&)_21_2