o
    Nrfn!                     @  s  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mZ d dl	m
Z
 d dlmZ eddZee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*e#d.d/d0 Z+d1d2 Z,e,  dS )3    )annotationsN)array)Version)importlib_metadata)Dispatchsizeof)namec                 C  
   t | S Nsys	getsizeofo r   T/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/dask/sizeof.pysizeof_default      
r   c                 C  s   t | S r
   lenr   r   r   r   sizeof_bytes   s   r   c                 C     | 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r0t| ttfrt| |}nt| |}t	| t
|| ttt|  S t	| ttt|  S )N
   )r   
isinstanceset	frozenset	itertoolsislicerandomsampler   r   intsummapr   )seq	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
    --------
    >>> 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   r   r   r+   >   s    r+   c                 C  r	   r
   r   dr   r   r   sizeof_blockedV   r   r2   c                 C  s8   t | tt|   tt|   dtt   S )N   )r   r   r   listkeysvaluesr0   r   r   r   sizeof_python_dict[   s   r7   cupyc                  C      dd l } t| jdd }d S )Nr   c                 S  
   t | jS r
   r%   r   xr   r   r   sizeof_cupy_ndarrayi   r   z*register_cupy.<locals>.sizeof_cupy_ndarray)r8   r   registerndarray)r8   r>   r   r   r   register_cupye      
rA   numbac                  C  s&   dd l } t| jjjjdd }d S )Nr   c                 S  r:   r
   r;   r<   r   r   r   sizeof_numba_devicendarrayr   r   z2register_numba.<locals>.sizeof_numba_devicendarray)Z
numba.cudar   r?   cudaZcudadrvZdevicearrayZDeviceNDArray)rC   rD   r   r   r   register_numban   s   rF   rmmc                  C  s.   dd l } t| drt| jdd }d S d S )Nr   DeviceBufferc                 S  r:   r
   r;   r<   r   r   r   sizeof_rmm_devicebuffer~   r   z-register_rmm.<locals>.sizeof_rmm_devicebuffer)rG   hasattrr   r?   rH   )rG   rI   r   r   r   register_rmmw   s
   

rK   numpyc                  C  r9   )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   N   )slice).0sr   r   r   	<genexpr>   s   & z?register_numpy.<locals>.sizeof_numpy_ndarray.<locals>.<genexpr>)stridestupler   r%   )r=   xsr   r   r   sizeof_numpy_ndarray   s   

z,register_numpy.<locals>.sizeof_numpy_ndarray)rL   r   r?   r@   )nprU   r   r   r   register_numpy   rB   rW   pandasc                    s   dd l dd l} t| df fddt| j fdd}t| j fdd}t| j fd	d
}t| j	dd }d S )Nr   pythonc                    s   | sdS t dd | D }|sdS i }| D ]} jj|ddd}| D ]}||t|< q$qdt|  }t dd | D }t|| dkrOt|| | S |S )	Nr   c                 s      | ]}t |V  qd S r
   r   )rO   r=   r   r   r   rQ          z7register_pandas.<locals>.object_size.<locals>.<genexpr>d   T)sizereplacec                 s  rZ   r
   r   )rO   ir   r   r   rQ      r[   g      ?)r&   r#   choicetolistidr   r6   r%   )rT   ZncellsZunique_samplesr=   r$   r`   ZnsamplesZsample_nbytes)rV   r   r   object_size   s    z$register_pandas.<locals>.object_sizec                   s   t | jt | j }g }d }| j D ]&}|d u s|j|kr%|j}|d7 }||jddd7 }|j v r9||j q|| 7 }t	d|S Ni  F)indexdeep)
r   rf   columnsZ_seriesr6   dtypememory_usageappend_valuesmax)dfpZobject_colsZ
prev_dtypecolOBJECT_DTYPESrd   r   r   sizeof_pandas_dataframe   s   

z0register_pandas.<locals>.sizeof_pandas_dataframec                   s8   dt | j | jddd }| j v r|| j7 }|S re   )r   rf   rj   ri   rl   )rP   ro   rq   r   r   sizeof_pandas_series   s   
z-register_pandas.<locals>.sizeof_pandas_seriesc                   s*   d| j dd }| j v r|| 7 }|S )Ni  F)rg   )rj   ri   )r`   ro   rq   r   r   sizeof_pandas_index   s   
z,register_pandas.<locals>.sizeof_pandas_indexc                 S  s(   t dd | jD t dd | jD  S )Nc                 s  rZ   r
   r_   )rO   lr   r   r   rQ      r[   zDregister_pandas.<locals>.sizeof_pandas_multiindex.<locals>.<genexpr>c                 s  s    | ]}|j V  qd S r
   r   )rO   cr   r   r   rQ      s    )r&   Zlevelscodes)r`   r   r   r   sizeof_pandas_multiindex   s   (z1register_pandas.<locals>.sizeof_pandas_multiindex)
rL   rX   objectZStringDtyper   r?   Z	DataFrameZSeriesIndexZ
MultiIndex)pdrs   rt   ru   ry   r   )rr   rV   rd   r   register_pandas   s   



r}   scipyc                  C  sR   dd l } ddl m} t| jtdk rt|jdd }t|jdd }d S )Nr   )sparsez1.12.0.dev0c                 S  s   |   S r
   )
__sizeof__rP   r   r   r   sizeof_spmatrix_dok   s   z.register_spmatrix.<locals>.sizeof_spmatrix_dokc                 S  s   t dd | j D S )Nc                 s  rZ   r
   r_   )rO   vr   r   r   rQ      r[   z=register_spmatrix.<locals>.sizeof_spmatrix.<locals>.<genexpr>)r&   __dict__r6   r   r   r   r   sizeof_spmatrix   s   z*register_spmatrix.<locals>.sizeof_spmatrix)r~   r   r   __version__r   r?   Z
dok_matrixZspmatrix)r~   r   r   r   r   r   r   register_spmatrix   s   


r   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
iterchunksbuffersr]   )r   ro   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 Ni  )r   ZschemametadataZitercolumnsr%   )tablero   rp   r   r   r   sizeof_pyarrow_table   s   z.register_pyarrow.<locals>.sizeof_pyarrow_tablec                   s   t  | d S r   )r%   )r   r   r   r   sizeof_pyarrow_chunked_array   s   z6register_pyarrow.<locals>.sizeof_pyarrow_chunked_array)r   r   r?   Tabler   )r   r   r   )r   r   r   register_pyarrow   s   


r   xarrayc                    s   dd l  dd l} t| j}|tdk}t| jt| jdd }|r-t| j|}t| j	j
j fdd}t| j	j
j fdd}d S )	Nr   z	2024.02.0c                 S  r   r
   r   objr   r   r   xarray_sizeof_da  s   z)register_xarray.<locals>.xarray_sizeof_dac                   s2     | t| j t| j t| j t| j S r
   )r   r   Z_index_typeZ_indexesZ
_variablesZ_dimsr   r   r   r   xarray_sizeof_indexes  s   z.register_xarray.<locals>.xarray_sizeof_indexesc                   s(     | t| j t| j t| j S r
   )r   r   rf   dimZcoord_dtyper   r   r   r   xarray_sizeof_pd_index   s   z/register_xarray.<locals>.xarray_sizeof_pd_index)r   r   r   r   r   r?   Z	DataArrayZDatasetZ
NamedArraycoreZindexesZIndexesZPandasIndex)ZxrZXARRAY_VERSIONZXARRAY_GE_2024_02r   r   r   r   r   r   register_xarray  s   


	r   c               	   C  sN   t jddD ]} |  }z|t W q ty$   td| j  Y qw dS )zERegister sizeof implementations exposed by the entry_point mechanism.zdask.sizeof)groupz&Failed to register sizeof entry point N)r   entry_pointsloadr   	Exceptionlogger	exceptionr   )entry_pointZ	registrarr   r   r   _register_entry_point_plugins*  s   
r   )-
__future__r   r!   loggingr#   r   r   Zpackaging.versionr   Zdask._compatibilityr   Z
dask.utilsr   r   	getLoggerr,   r   r?   rz   r   bytes	bytearrayr   
memoryviewr   r   r4   rS   r   r    r*   r+   r2   dictr7   Zregister_lazyrA   rF   rK   rW   r}   r   r   r   r   r   r   r   r   <module>   s`    






	




K


$
