
    >ie                       d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlZd dlm	Z
 d dlmZ  ed          Z ej        e          Ze                    e          d             Ze                    e          e                    e          d	                         Ze                    e          d
             Ze                    e          d             Ze                    e          e                    e          e                    e          e                    e          d                                                 Z G d d          Ze                    e          d             Z e                    e!          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)e#                    d          d             Z*d Z+ e+             dS )     )annotationsN)array)parse)Dispatchsizeof)namec                *    t          j        |           S Nsys	getsizeofos    +lib/python3.11/site-packages/dask/sizeof.pysizeof_defaultr          =    c                     t          |           S r
   lenr   s    r   sizeof_bytesr      s     q66Mr   c                    | j         S r
   )nbytesr   s    r   sizeof_memoryviewr      s	    8Or   c                0    | j         t          |           z  S r
   )itemsizer   r   s    r   sizeof_arrayr   #   s    :Ar   c           
        t          |           }d}||k    rt          | t          t          f          rt	          j        | |          }nt          j        | |          }t          j	        |           t          ||z  t          t          t          |                    z            z   S t          j	        |           t          t          t          |                     z   S )N
   )r   
isinstanceset	frozenset	itertoolsislicerandomsampler   r   intsummapr   )seq	num_itemsnum_samplessampless       r   sizeof_python_collectionr.   (   s    
 CIK;cC+,, 	6  &sK88GGmC55G}S!!C#c#fg*>*>&?&??%
 %
 
 	
 }S!!CFC(8(8$9$999r   c                      e Zd ZdZdS )SimpleSizeofa<  Sentinel class to mark a class to be skipped by the dispatcher. This only
    works if this sentinel mixin is first in the mro.

    Examples
    --------
    >>> def _get_gc_overhead():
    ...     class _CustomObject:
    ...         def __sizeof__(self):
    ...             return 0
    ...
    ...     return sys.getsizeof(_CustomObject())

    >>> class TheAnswer(SimpleSizeof):
    ...     def __sizeof__(self):
    ...         # Sizeof always add overhead of an object for GC
    ...         return 42 - _get_gc_overhead()

    >>> sizeof(TheAnswer())
    42

    N)__name__
__module____qualname____doc__ r   r   r0   r0   >   s           r   r0   c                *    t          j        |           S r
   r   ds    r   sizeof_blockedr9   V   r   r   c                $   t          j        |           t          t          |                                                     z   t          t          |                                                     z   dt          t                                z  z
  S )N   )r   r   r   listkeysvaluesr7   s    r   sizeof_python_dictr?   [   sm     	a
affhh
 
 	!
ahhjj!!
"
"	# fTVVnn
	r   cupyc                 ^    dd l } t                              | j                  d             }d S )Nr   c                *    t          | j                  S r
   r'   r   xs    r   sizeof_cupy_ndarrayz*register_cupy.<locals>.sizeof_cupy_ndarrayi       18}}r   )r@   r   registerndarray)r@   rF   s     r   register_cupyrJ   e   s=    KKK__T\""  #"  r   numbac                 |    dd l } t                              | j        j        j        j                  d             }d S )Nr   c                *    t          | j                  S r
   rC   rD   s    r   sizeof_numba_devicendarrayz2register_numba.<locals>.sizeof_numba_devicendarrayr   rG   r   )
numba.cudar   rH   cudacudadrvdevicearrayDeviceNDArray)rK   rN   s     r   register_numbarT   n   sJ    __UZ'3ABB  CB  r   rmmc                     dd l } t          | d          r*t                              | j                  d             }d S d S )Nr   DeviceBufferc                *    t          | j                  S r
   rC   rD   s    r   sizeof_rmm_devicebufferz-register_rmm.<locals>.sizeof_rmm_devicebuffer~   s    qx== r   )rU   hasattrr   rH   rW   )rU   rY   s     r   register_rmmr[   w   s\    JJJ sN## !	)	*	*	! 	! 
+	*	! 	! 	!! !r   numpyc                 ^    dd l } t                              | j                  d             }d S )Nr   c                    d| j         v r+| t          d | j         D                                }|j        S t          | j                  S )Nr   c              3  ^   K   | ](}|d k    rt          d          nt          d          V  )dS )r   N   )slice).0ss     r   	<genexpr>z?register_numpy.<locals>.sizeof_numpy_ndarray.<locals>.<genexpr>   s:      PPQtE!HHPPPPPPr   )stridestupler   r'   )rE   xss     r   sizeof_numpy_ndarrayz,register_numpy.<locals>.sizeof_numpy_ndarray   sF    	>>5PPaiPPPPPQB918}}r   )r\   r   rH   rI   )nprh   s     r   register_numpyrj      s@    __RZ    !   r   pandasc                    dd l dd l} t          |                     d          ffdt                              | j                  fd            }t                              | j                  fd            }t                              | j                  fd            }t                              | j	                  d             }d S )Nr   pythonc                    | sdS t          d | D                       }|sdS i }| D ]H}j                            |dd          }|                                D ]}||t	          |          <   Idt          |           z  }t          d |                                D                       }t          |          |z  dk    rt          ||z  |z            S |S )Nr   c              3  4   K   | ]}t          |          V  d S r
   r   )rb   rE   s     r   rd   z7register_pandas.<locals>.object_size.<locals>.<genexpr>   s(      ((SVV((((((r   d   T)sizereplacec              3  4   K   | ]}t          |          V  d S r
   r   )rb   is     r   rd   z7register_pandas.<locals>.object_size.<locals>.<genexpr>   s(      GG!F1IIGGGGGGr   g      ?)r(   r%   choicetolistidr   r>   r'   )	rg   ncellsunique_samplesrE   r&   ru   nsamplessample_nbytesri   s	           r   object_sizez$register_pandas.<locals>.object_size   s    	1((R((((( 	1  	* 	*AY%%ac4%@@F]]__ * *()r!uu%%* R=GG~/D/D/F/FGGGGG~)C// }v-8999 ! r   c                r   t          | j                  t          | j                  z   }g }d }| j                                        D ]X}||j        |k    r|j        }|dz  }||                    dd          z  }|j        v r|                    |j                   Y| | z  }t          d|          S Ni  F)indexdeep)
r   r   columns_seriesr>   dtypememory_usageappend_valuesmax)dfpobject_cols
prev_dtypecolOBJECT_DTYPESr}   s        r   sizeof_pandas_dataframez0register_pandas.<locals>.sizeof_pandas_dataframe   s    28vbj111
 :$$&& 	0 	0C!SY*%<%< Y
T	!!E!:::AyM))""3;/// 	
[[+&&4||r   c                    dt          | j                  z   |                     dd          z   }| j        v r| | j                  z  }|S r   )r   r   r   r   r   )rc   r   r   r}   s     r   sizeof_pandas_seriesz-register_pandas.<locals>.sizeof_pandas_series   sT     6!'??"Q^^%e^%L%LL7m##QY'''Ar   c                h    d|                      d          z   }| j        v r| |           z  }|S )Ni  F)r   )r   r   )ru   r   r   r}   s     r   sizeof_pandas_indexz,register_pandas.<locals>.sizeof_pandas_index   s?    !..e.,,,7m##QAr   c                j    t          d | j        D                       }| j        D ]}||j        z  }|S )Nc              3  4   K   | ]}t          |          V  d S r
   rt   )rb   levs     r   rd   zDregister_pandas.<locals>.sizeof_pandas_multiindex.<locals>.<genexpr>   s(      00s000000r   )r(   levelscodesr   )ru   r   cs      r   sizeof_pandas_multiindexz1register_pandas.<locals>.sizeof_pandas_multiindex   sC    00qx00000 	 	AMAAr   )
r\   rk   objectStringDtyper   rH   	DataFrameSeriesIndex
MultiIndex)pdr   r   r   r   r   ri   r}   s        @@@r   register_pandasr      s+   R^^H556M! ! ! ! !6 __R\""     #"* __RY       __RX      __R]##  $#  r   scipyc                    dd l } ddl m} t          | j                  t          d          k     r(t                              |j                  d             }t                              |j                  d             }d S )Nr   )sparsez1.12.0.dev0c                *    |                                  S r
   )
__sizeof__rc   s    r   sizeof_spmatrix_dokz.register_spmatrix.<locals>.sizeof_spmatrix_dok   s    <<>>!r   c                b    t          d | j                                        D                       S )Nc              3  4   K   | ]}t          |          V  d S r
   rt   )rb   vs     r   rd   z=register_spmatrix.<locals>.sizeof_spmatrix.<locals>.<genexpr>   s(      ::6!99::::::r   )r(   __dict__r>   r   s    r   sizeof_spmatrixz*register_spmatrix.<locals>.sizeof_spmatrix   s-    ::aj&7&7&9&9::::::r   )r   r   parse_version__version__r   rH   
dok_matrixspmatrix)r   r   r   r   s       r   register_spmatrixr      s    LLLU&''-*F*FFF	*	+	+	" 	" 
,	+	" __V_%%; ; &%; ; ;r   pyarrowc                     dd l fdt                              j                  fd            } t                              j                  fd            }d S )Nr   c                    d}t          | j                  s| j        } |                                 D ]%}|                                D ]}|r
||j        z  }&|S )Nr   )r    ChunkedArraydata
iterchunksbuffersrq   )r   r   chunkbufferpas       r   _get_col_sizez'register_pyarrow.<locals>._get_col_size   st    $00 	9D__&& 	% 	%E--// % % %$A% r   c                    t          | j        j                  }|                                 D ]}| |          z  }t	          |          dz   S Ni  )r   schemametadataitercolumnsr'   )tabler   r   r   s      r   sizeof_pyarrow_tablez.register_pyarrow.<locals>.sizeof_pyarrow_table   sV    5<())$$&& 	$ 	$Cs###AA1vv}r   c                :    t           |                     dz   S r   )r'   )r   r   s    r   sizeof_pyarrow_chunked_arrayz6register_pyarrow.<locals>.sizeof_pyarrow_chunked_array  s     ==&&''$..r   )r   r   rH   Tabler   )r   r   r   r   s     @@r   register_pyarrowr      s         __RX     __R_%%/ / / / &%/ / /r   c                     t          j        d          D ]Y} |                                 }	  |t                     (# t          $ r% t
                              d| j                    Y Vw xY wdS )zERegister sizeof implementations exposed by the entry_point mechanism.zdask.sizeof)groupz&Failed to register sizeof entry point N)importlib_metadataentry_pointsloadr   	Exceptionlogger	exceptionr   )entry_point	registrars     r   _register_entry_point_pluginsr     s    )6]KKK  $$&&		If 	 	 	K9IKK    		 s   >,A-,A-),
__future__r   r#   loggingr%   r   r   r   packaging.versionr   r   
dask.utilsr   r   	getLoggerr1   r   rH   r   r   bytes	bytearrayr   
memoryviewr   r   r<   rf   r!   r"   r.   r0   r9   dictr?   register_lazyrJ   rT   r[   rj   r   r   r   r   r5   r   r   <module>r      s   " " " " " "       



           4 4 4 4 4 4      	x	 	 	 		8	$	$              : :    :$       0       f   g   e! ! ! g   hK K  K\ g; ; ; i  / / ! /2	 	 	       r   