U
    sVc                     @   s  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&ej$%deee ee!gd d! Z'd"d# Z(ej$%dd$d%d&gd'd(d)gd*d+d,d gd'd(d)gd*e)d	d	dge)d+d,d ge)d'd(d)gd-gd.d/ Z*d0d1 Z+d2d3 Z,d4d5 Z-d6d7 Z.e
/d8d9d: Z0dS );    )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-xj8nt62q/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                    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   rB   Zcolumn_namesrC   tupler   Zselect_columnsZselect_columns_by_namer>   r?   r=   attrs)r*   r@   df2indicesnamesresultexpectedr   rE   r   test_dataframeM   s    
rN   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   q   s      z,test_missing_from_masked.<locals>.<dictcomp>)sizereplacerU   rV   rW   )r3   r4   nparrayr6   r   ZRandomStatecolumnsitemsindexr"   Zaranger[   locr7   r:   r9   )rI   Z	dict_nullr   Z	num_nullsZnull_idxr   r\   r   test_missing_from_maskede   s$    rf   rQ   rR   rS   ffffff"@      %@皙'@)rU   rV   r   r   rT   c                 C   s6   t | }| }|jD ]}||jdkstqd S )Nr   )r3   r4   r6   rb   r7   r:   r9   )r*   r@   rI   col_namer   r   r   test_mixed_data   s    

rk   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   rg   rh   ri   rT   )	r3   r4   r`   ra   r6   rb   r7   r:   r9   )r@   rI   rj   r   r   r   test_mixed_missing   s    
rl   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    rr   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   pytestZraisesNotImplementedErrorr8   r@   r   r   r   r   test_nonstring_object   s    rx   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   rw   r   r   r   test_datetime   s    ry   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   Categoricalr6   r7   r`   Zfrom_dlpackZget_buffersra   r>   Zassert_numpy_array_equal)r@   r   rL   rM   r   r   r    test_categorical_to_numpy_dlpack   s
    r|   )1r   r   Znumpyr`   ru   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   r{   rB   r5   r   r   r   Zint_dataZ	uint_dataZ	bool_dataZ
float_dataZdatetime_dataNaNrp   markZparametrizerA   rN   rf   ra   rk   rl   rr   rx   ry   Zskip_if_np_ltr|   r   r   r   r   <module>   sn   	
 

