U
    >vf                      @   sr  d dl m Z  d dlZd dlZd dlZd dlmZ d dlm  m	Z
 d dlZd dlmZ d dlmZ d dlmZmZ d dlmZ ejedd d	d
ejedd dd
dZd\ZZdd Zedd Zedd Zedd Zedd Z edd Z!dddddej"giZ#ej$%dddgdd Z&d d! Z'd"d# Z(d$d% Z)ej$%d&d dd'e*d(d)gfd*de*d(d)gfd+dd)gfd d+d'e*d(gfd d*d'gfd*d*e*d(gfgd,d- Z+ej$%deee ee!gd.d/ Z,d0d1 Z-ej$%dd2d3d4gd5d6d7gd8d*d+d gd5d6d7gd8e.d	d	dge.d*d+d ge.d5d6d7gd9gd:d; Z/d<d= Z0d>d? Z1d@dA Z2dBdC Z3e
4dDdEdF Z5dS )G    )datetimeN)iNaT)PandasColumn)ColumnNullType	DtypeKind)from_dataframeZtestdata   T)orderedF)r	   	unordered)d      c                    s    fddt tD S )Nc                    s>   i | ]6}d t |td  t d   fddttD qS )col      c                    s   g | ]
}  qS  r   ).0_Zmake_oner   F/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/interchange/test_impl.py
<listcomp>   s     z)_make_data.<locals>.<dictcomp>.<listcomp>)intNCOLSrangeNROWS)r   ir   r   r   
<dictcomp>   s    z_make_data.<locals>.<dictcomp>)r   r   r   r   r   r   
_make_data   s    
r   c                   C   s   t ddS )Nir   randomrandintr   r   r   r   <lambda>"       r    c                   C   s   t ddS )Nr   r   r   r   r   r   r   r    #   r!   c                   C   s   t ddgS )NTF)r   choicer   r   r   r   r    $   r!   c                   C   s   t   S N)r   r   r   r   r   r    %   r!   c                   C   s&   t tddtddtdddS )Nil  i4  r         )yearmonthday)r   r   r   r   r   r   r   r    '   s   


separator datazabC|DeF,Hikz234,3245.67zgSaf,qWer|Grez
asd3,4sad|data)r	   T)r
   Fc              
   C   s   t dt| d  i}| d}|jd tjks8t|j	dksFt|j
tjdfksZt| dksjt|j}|d | d kst|d dkstt|d tstt|d jt d	d
dddg t|t|  d S )NAr   r   Z
is_orderedZis_dictionaryT
categoriesadest)pd	DataFrametest_data_categorical__dataframe__get_column_by_namedtyper   ZCATEGORICALAssertionError
null_countdescribe_nullr   USE_SENTINELZ
num_chunksZdescribe_categorical
isinstancer   tmZassert_series_equalZ_colZSeriesassert_frame_equalr   )r*   dfr   Zdesc_catr   r   r   test_categorical_dtype9   s     rA   c               	   C   s   t dd} ddddddddd	g	}| d
| | i}| }t|}tj|ddddddd	gd}t	d
|i}t
|| d S )Npyarrow11.0.0MonTueWedThuFriSatSunweekday)r-   )pytestimportorskiptablearraydictionary_encoder6   r   r3   Categoricalr4   r>   r?   )paarrrN   exchange_dfresultrK   expectedr   r   r   test_categorical_pyarrowM   s     rW   c                  C   sj   t dd} d g}| d| |d i}| }tjj	|}t
dttjgi}t|| d S )NrB   rC   rS   Zfloat64)rL   rM   rN   rO   rP   r6   r3   apiinterchanger   r4   rQ   npnanr>   r?   rR   rS   rN   rT   rU   rV   r   r   r   test_empty_categorical_pyarrow\   s    r]   c                  C   sv   t dd} ddg}| d| |di}| }t|}tdddgi}t	|| | j
| j||srtd S )NrB   rC   rD   rE   rK   Zlarge_string)rL   rM   rN   rO   r6   r   r3   r4   r>   r?   TableequalsrY   r9   r\   r   r   r   test_large_string_pyarrowh   s    r`   )offsetlengthexpected_valuesffffff
@r[    @r   r   c           	      C   st   t dd}dd dg}|d|i| |}| }t|}td|i}t	|| |j
|j||sptd S )NrB   rC   rd   re   rS   )rL   rM   rN   slicer6   r   r3   r4   r>   r?   r^   r_   rY   r9   )	ra   rb   rc   rR   rS   rN   rT   rU   rV   r   r   r   test_bitmasks_pyarroww   s    
rg   c                    s   t  }| }| tks"t| tks2tt|	 t 
 ksNtd}t fdd|D }t||}t||}t|| t|jd tstt|jd tstd S )N)r   r   c                 3   s   | ]}t   | V  qd S r#   )listkeys)r   idxr*   r   r   	<genexpr>   s     z!test_dataframe.<locals>.<genexpr>Z_INTERCHANGE_PROTOCOL_BUFFERS)r3   r4   r6   Znum_columnsr   r9   Znum_rowsr   rh   Zcolumn_namesri   tupler   Zselect_columnsZselect_columns_by_namer>   r?   r=   attrs)r*   r@   df2indicesnamesrU   rV   r   rk   r   test_dataframe   s    
rr   c                     s   t tdddddgtdddd	dgtd
dd
d
d
gd   } tjd fdd jD }| D ]6\}} j	j
tt |dd }d  j||f< qt  } | dj|d kst| dj|d kst| dj|d kstd S )Nr   r         r         ?      @      @g      @TFxyz*   c                    s    i | ]}|j d t dqS )r   )lowhigh)r   len)r   r   r@   rngr   r   r      s      z,test_missing_from_masked.<locals>.<dictcomp>)sizereplacery   rz   r{   )r3   r4   rZ   rO   r6   r   ZRandomStatecolumnsitemsindexr"   Zaranger   locr7   r:   r9   )ro   Z	dict_nullr   Z	num_nullsZnull_idxr   r   r   test_missing_from_masked   s$    r   ru   rv   rw   ffffff"@      %@皙'@)ry   rz   rx   c                 C   s6   t | }| }|jD ]}||jdkstqd S )Nr   )r3   r4   r6   r   r7   r:   r9   )r*   r@   ro   col_namer   r   r   test_mixed_data   s    

r   c                  C   sn   t tdd dd dgtd dd ddgtddd dd gd} |  }| jD ]}||jdksPtqPd S )	NTFr   r   r   r   r   rx   )	r3   r4   rZ   rO   r6   r   r7   r:   r9   )r@   ro   r   r   r   r   test_mixed_missing   s    
r   c                  C   s   t d dg } td| i}| d}| dks:t|jdksHt|jd t	j
ks\t|jtjdfkspt|dd  }| d}| dkst|jdkst|jd t	j
kst|jtjdfkstd S )Nr)    r+      r   r      )string_datar3   r4   r6   r7   r   r9   r:   r8   r   STRINGr;   r   ZUSE_BYTEMASK)Ztest_str_datar@   r   Z	df_slicedr   r   r   test_string   s    r   c               	   C   sH   t dddddgi} |  d}tjtdd |j W 5 Q R X d S )Nr+   r.   
   g      ?r   znot supported yet)match)r3   r4   r6   r7   rL   ZraisesNotImplementedErrorr8   r@   r   r   r   r   test_nonstring_object   s    r   c                  C   s   t dt dt jgi} |  d}| dks8t|jdksFt|j	d t
jksZt|jtjtfksntt| t|   d S )Nr+   z
2022-01-01r   r   r   )r3   r4   Z	TimestampZNaTr6   r7   r   r9   r:   r8   r   ZDATETIMEr;   r   r<   r   r>   r?   r   r   r   r   r   test_datetime   s    r   z1.23c                  C   sb   t dt dddgi} |  d}t| d d }tjdddgdd}t	
|| d S )	Nr+   r.   br*   r   r   Zint8)r8   )r3   r4   rQ   r6   r7   rZ   Zfrom_dlpackZget_buffersrO   r>   Zassert_numpy_array_equal)r@   r   rU   rV   r   r   r    test_categorical_to_numpy_dlpack  s
    r   )6r   r   ZnumpyrZ   rL   Zpandas._libs.tslibsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr3   Zpandas._testingZ_testingr>   Zpandas.core.interchange.columnr   Z*pandas.core.interchange.dataframe_protocolr   r   Z&pandas.core.interchange.from_dataframer   rQ   rh   r5   r   r   r   Zint_dataZ	uint_dataZ	bool_dataZ
float_dataZdatetime_dataNaNr   markZparametrizerA   rW   r]   r`   floatrg   rr   r   rO   r   r   r   r   r   Zskip_if_np_ltr   r   r   r   r   <module>   s   	



 

