a
    S/b%                  	   @   s  d dl Z d dlZd dlZd dlmZ ddlmZ zed ejZW n eefyb   dd ZY n0 eddZ	e	
ed	d
 Ze	
ee	
edd Ze	
edd Ze	
edd Ze	
ee	
ee	
ee	
edd ZG dd dZe	
edd Ze	
edd Ze	ddd Ze	ddd Ze	dd d! Ze	d"d#d$ Z e	d%d&d' Z!e	d(d)d* Z"e	d+d,d- Z#dS ).    N)array   )Dispatchc                 C   s   dS )Nd    xr   r   *lib/python3.9/site-packages/dask/sizeof.py	getsizeof   s    r
   sizeof)namec                 C   s   t | S Nr
   or   r   r	   sizeof_default   s    r   c                 C   s   t | S r   )lenr   r   r   r	   sizeof_bytes   s    r   c                 C   s   | j S r   )nbytesr   r   r   r	   sizeof_memoryview   s    r   c                 C   s   | j t|  S r   )itemsizer   r   r   r   r	   sizeof_array$   s    r   c                 C   sx   t | }d}||kr^t| ttfr0t| |}nt| |}t| t	|| t
tt|  S t| t
tt|  S d S )N
   )r   
isinstanceset	frozenset	itertoolsislicerandomsampler
   intsummapr   )seqZ	num_itemsZnum_samplesZsamplesr   r   r	   sizeof_python_collection)   s    "r$   c                   @   s   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
    --------

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

    >>> sizeof(TheAnswer())
    42

    N)__name__
__module____qualname____doc__r   r   r   r	   r%   =   s   r%   c                 C   s   t | S r   r   dr   r   r	   sizeof_blockedO   s    r,   c                 C   s6   t | tt|   tt|   dtt   S )N   )r
   r   listkeysvaluesr*   r   r   r	   sizeof_python_dictT   s    r1   cupyc                  C   s    dd l } t| jdd }d S )Nr   c                 S   s
   t | jS r   r    r   r   r   r   r	   sizeof_cupy_ndarrayb   s    z*register_cupy.<locals>.sizeof_cupy_ndarray)r2   r   registerndarray)r2   r4   r   r   r	   register_cupy^   s    
r7   numbac                  C   s&   dd l } t| jjjjdd }d S )Nr   c                 S   s
   t | jS r   r3   r   r   r   r	   sizeof_numba_devicendarrayk   s    z2register_numba.<locals>.sizeof_numba_devicendarray)Z
numba.cudar   r5   ZcudaZcudadrvZdevicearrayZDeviceNDArray)r8   r9   r   r   r	   register_numbag   s    r:   rmmc                  C   s*   dd l } t| dr&t| jdd }d S )Nr   DeviceBufferc                 S   s
   t | jS r   r3   r   r   r   r	   sizeof_rmm_devicebufferw   s    z-register_rmm.<locals>.sizeof_rmm_devicebuffer)r;   hasattrr   r5   r<   )r;   r=   r   r   r	   register_rmmp   s    

r?   numpyc                  C   s    dd l } t| jdd }d S )Nr   c                 S   s2   d| j v r(| tdd | j D  }|jS t| jS )Nr   c                 s   s&   | ]}|d krt dnt dV  qdS )r   Nr   )slice).0sr   r   r	   	<genexpr>       z?register_numpy.<locals>.sizeof_numpy_ndarray.<locals>.<genexpr>)stridestupler   r    )r   Zxsr   r   r	   sizeof_numpy_ndarray   s    
z,register_numpy.<locals>.sizeof_numpy_ndarray)r@   r   r5   r6   )nprH   r   r   r	   register_numpy|   s    
rJ   pandasc                     s   dd l  dd l}  fddt| jfdd}t| jfdd}t| jfdd	}t| jfd
d}d S )Nr   c                    s@   t | sdS  jj| ddd}ttt|}t|d t |  S )Nr      T)sizereplace)r   r   choicer.   r"   r   r!   )r   r   )rI   r   r	   object_size   s
    z$register_pandas.<locals>.object_sizec                    sP   t | j}|  D ]0\}}||jdd7 }|jtkr| |j7 }qt|d S )NFindex  )r   rR   itemsmemory_usagedtypeobject_valuesr    )Zdfpr   colrP   r   r	   sizeof_pandas_dataframe   s    

z0register_pandas.<locals>.sizeof_pandas_dataframec                    sN   t | jdd}| jtkr(| | j7 }| jjtkrB| | j7 }t |d S )NTrQ   rS   )r    rU   rV   rW   rX   rR   )rC   rY   r[   r   r	   sizeof_pandas_series   s    
z-register_pandas.<locals>.sizeof_pandas_seriesc                    s.   t |  }| jtkr"| | 7 }t |d S NrS   )r    rU   rV   rW   )irY   r[   r   r	   sizeof_pandas_index   s    
z,register_pandas.<locals>.sizeof_pandas_indexc                    sN   t t fdd| jD }t| dr,| jn| jD ]}||j7 }q2t |d S )Nc                 3   s   | ]} |V  qd S r   r   )rB   lr[   r   r	   rD      rE   zDregister_pandas.<locals>.sizeof_pandas_multiindex.<locals>.<genexpr>codesrS   )r    r!   Zlevelsr>   rb   labelsr   )r_   rY   cr[   r   r	   sizeof_pandas_multiindex   s    z1register_pandas.<locals>.sizeof_pandas_multiindex)r@   rK   r   r5   Z	DataFrameZSeriesZIndexZ
MultiIndex)pdr\   r]   r`   re   r   )rI   rP   r	   register_pandas   s    



rg   scipyc                  C   s8   ddl m}  t| jdd }t| jdd }d S )Nr   )sparsec                 S   s   |   S r   )
__sizeof__rC   r   r   r	   sizeof_spmatrix_dok   s    z.register_spmatrix.<locals>.sizeof_spmatrix_dokc                 S   s   t dd | j D S )Nc                 s   s   | ]}t |V  qd S r   )r   )rB   vr   r   r	   rD      rE   z=register_spmatrix.<locals>.sizeof_spmatrix.<locals>.<genexpr>)r!   __dict__r0   rk   r   r   r	   sizeof_spmatrix   s    z*register_spmatrix.<locals>.sizeof_spmatrix)rh   ri   r   r5   Z
dok_matrixZspmatrix)ri   rl   ro   r   r   r	   register_spmatrix   s
    


rp   pyarrowc                     sH   dd l fdd tj fdd} tj fdd}d S )Nr   c                    sD   d}t |  js| j} |  D ] }| D ]}|r*||j7 }q*q|S )Nr   )r   ChunkedArraydataZ
iterchunksZbuffersrM   )rs   rY   chunkbuffer)par   r	   _get_col_size   s    z'register_pyarrow.<locals>._get_col_sizec                    s2   t | jj}|  D ]}| |7 }qt|d S r^   )r   ZschemametadataZitercolumnsr    )tablerY   rZ   rw   r   r	   sizeof_pyarrow_table   s    z.register_pyarrow.<locals>.sizeof_pyarrow_tablec                    s   t  | d S r^   )r    )rs   rz   r   r	   sizeof_pyarrow_chunked_array   s    z6register_pyarrow.<locals>.sizeof_pyarrow_chunked_array)rq   r   r5   ZTablerr   )r{   r|   r   )rw   rv   r	   register_pyarrow   s    


r}   )$r   r   sysr   Zutilsr   r
   AttributeError	TypeErrorr   r5   rW   r   bytes	bytearrayr   
memoryviewr   r   r.   rG   r   r   r$   r%   r,   dictr1   Zregister_lazyr7   r:   r?   rJ   rg   rp   r}   r   r   r   r	   <module>   sV   







	




,
