U
    /e`                  
   @   s  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 d dlm	Z	 zd dl
Zd dlmZ W n ek
r|   dZdZY nX ejjedkdd	Zejje d
d	Zdd Zdd Zdd Zdd Zdd Zdd Zedd Zedd Zedd Zedd Zdd  Zeejd!d"d#d$gejd%eej d&ed'gd(d) Z!eejd%eej d&ed'gd*d+ Z"eejd!d"d#d$gd,d- Z#ed.d/ Z$ed0d1 Z%d2d3 Z&d4d5 Z'd6d7 Z(dS )8    N)array)get_context)sizeof)funcname)PANDAS_GT_130Fzrequires pandas)reasonzrequires pandas 1.3.0c                   C   s   t dtdkstd S )N   r   sys	getsizeofAssertionError r   r   :/tmp/pip-unpacked-wheel-dbjnr7gq/dask/tests/test_sizeof.py	test_base   s    r   c                   C   s   t tdkstd S )Nr   )r   r   r   r   r   r   r   	test_name   s    r   c                   C   s0   t dddggtdd tg  ks,td S )Nr         r	   r   r   r   r   test_containers"   s    r   c                   C   s   dt td  krdks"n tdt td  kr>dksDn tdt ttd  krddksjn tdt tdtd  krdksn td S )N  i  @  d(#  )r   bytesr   	bytearray
memoryviewr   ranger   r   r   r   test_bytes_like&   s    ""&r   c                  C   sV   t d} dt| jddd  kr,dks2n t| d}t|t|ksRtd S )Nnumpyr   r   Zf8dtyper   )pytestimportorskipr   emptyr   r   r
   r   )npdtr   r   r   
test_numpy-   s    
(
r%   c                  C   s*   t d} | dd}t|dks&td S )Nr   r   )d   r&   r&      )r    r!   Zbroadcast_tor   r   )r#   xr   r   r   test_numpy_0_strided4   s    
r)   c                  C   s   t jdddgdddgddd	d
gd} t| t| jt| j t| j ksPtt| jt| jkshtt| jdksztt| jd	ksttt| tsttt| jtsttt| jtstd S )Nr   r   r   daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbdccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccr(   y
         indexi,  )	pd	DataFramer   r(   r.   r3   r   
isinstanceint)dfr   r   r   test_pandas:   s     *r9   c                  C   sD   t ddgddgg} t ddgddgg}t|t| k s@tdS )zv2+ contiguous columns of the same dtype in the same DataFrame share the same
    surface thus have lower overhead
    r   g@r   g@g?gffffff
@Nr4   r5   r   r   )df1df2r   r   r   test_pandas_contiguous_dtypesJ   s    r=   c                  C   sd   t jtddddddgg} t| }d| t|   k rHd| k sNn ttt| t	s`td S )	N   abcr   eg      ?r   )
r4   Z
MultiIndexZfrom_productr   r
   r   r   r   r6   r7   )r3   Zactual_sizer   r   r   test_pandas_multiindexT   s    
&rC   c                  C   s   t dttdi} | dddg }t ttdttdd}dt|   k r\dk sbn tdt|  k rzdk sn tdt|  k rdk sn td S )Nr(   '  r-   i8 iL i q i )r4   r5   listr   r   r   )r8   r<   df3r   r   r   test_pandas_repeated_column]   s     rG   c                  C   s   t d} | d}t| dks(tt| dks<tt| dksPtt| dksdtt|	 dksxtt|
 dkstt| dkstd S )Nzscipy.sparser/                  )r    r!   Zeyer   Ztodiar   ZtobsrZtocooZtocscZtocsrZtodokZtolil)sparsespr   r   r   test_sparse_matrixg   s    

rO   cls_nameZSeriesr5   ZIndexr   zstring[python])Zmarksc                 C   s  t t|}|dd tdD | d}tdd t|  k rPdtd d k sVn tdd }d	d }d
d }dd }|||||gd | d}dt|  k rdk sn t|||||g| d}	|||||g| d}
|||||g| d}t|t|
  k rt|	k sn td S )Nc                 S   s   g | ]}d |dqS )r(   Z3dr   .0ir   r   r   
<listcomp>{   s     z,test_pandas_object_dtype.<locals>.<listcomp>r   r   Zx000r   r(   順 r.   zw i  )getattrr4   r   r   r   )r   rP   clss1r(   r.   rV   rW   s2Zs3Zs4Zs5r   r   r   test_pandas_object_dtypet   s    
2r]   c           
      C   s   dd }dd }dd }dd }||||g}t j|d gd | d}d	t|  k r\d
k sbn tt j||g||gg| d}t j||g||gg| d}t j||g||gg| d}	t|	t|  k rt|k sn td S )Nr(   rU   r.   rV   rW   r   r   r   rX   ipd r:   )
r   r(   r.   rV   rW   objsr;   r<   rF   Zdf4r   r   r   test_dataframe_object_dtype   s    r_   c                 C   sN   t d tt| }|dd dd gdd}dt|  k rDd	k sJn td S )
Npyarrowr(   rU   r.   iP  zstring[pyarrow]r   iI ix] )r    r!   rY   r4   r   r   )rP   rZ   sr   r   r   test_pandas_string_arrow_dtype   s    

rb   c                  C   sz   t jdddgdddgddd	d
gd} | d}t|dks@tt|jdksRtt|jdksdtt|jdksvtd S )Nr   r   r   r*   r+   r,   r-   r/   r0   r1   r2   r   )r4   r5   headr   r   r(   r.   r3   )r8   r"   r   r   r   test_pandas_empty   s     
rd   c                  C   s"  t d} tjdddgdddgdd	d
dgd}| j|}t|t|jjksTt	t
t|tsft	t
t|jd ts~t	t
t|jd tst	t
t|jd tst	| j|d}t|t|jjkst	t|jd dkst	t|jd dkst	t|jd dkst	d S )Nr`   r   r   r   r*   r+   r,   r-   r/   r0   r1   r2   r   )r    r!   r4   r5   ZTableZfrom_pandasr   Zschemametadatar   r6   r7   columnsrc   )par8   tabler"   r   r   r   test_pyarrow_table   s     
 ri   c                     s   t d} | d td i jks*ttd gi jksBttdd igi jks^t fddtdD }t| jd ksttt|tstd S )Nr   rD   r(   r.   c                    s   i | ]
}| qS r   r   rQ   r(   r   r   
<dictcomp>   s      ztest_dict.<locals>.<dictcomp>r&   )	r    r!   Zonesr   nbytesr   r   r6   r7   )r#   r   r   rj   r   	test_dict   s    

rm   c                 C   s>   t jt|  dd l}|j  dd l}|	|}t|S )Nr   )
r
   pathappendosfsdecodedask.sizeofr   Z_register_entry_point_plugins
class_implZImpl)rn   sizeZdaskrs   rZ   r   r   r   _get_sizeof_on_path   s    

ru   c              	   C   sx   | d  d | d  d | d }|  |d  d t d }|jt| d	fd
d	ksbtW 5 Q R X |  d S )Nzimpl_sizeof.pys   def sizeof_plugin(sizeof):
    print("REG")
    @sizeof.register_lazy("class_impl")
    def register_impl():
        import class_impl
        @sizeof.register(class_impl.Impl)
        def sizeof_impl(obj):
            return obj.size 
zclass_impl.pysB   class Impl:
    def __init__(self, size):
        self.size = sizezimpl_sizeof-0.0.0.dist-infozentry_points.txts/   [dask.sizeof]
impl = impl_sizeof:sizeof_plugin
r   i)args)write_bytesmkdirr   ZPoolapplyru   r   join)Ztmp_pathZ	dist_infopoolr   r   r    test_register_backend_entrypoint   s    r|   ))rp   r
   r   r    Zdask.multiprocessingr   rr   r   Z
dask.utilsr   Zpandasr4   Zdask.dataframe._compatr   ImportErrormarkZskipifZrequires_pandasZrequires_pandas_130r   r   r   r   r%   r)   r9   r=   rC   rG   rO   Zparametrizeobjectparamr]   r_   rb   rd   ri   rm   ru   r|   r   r   r   r   <module>   sn   
 

	

	  

