U
    Õ~fh…   ã                   @   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-a5acpmi0/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 )Niœÿÿÿr   ©Ú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s„t‚|d dks”t‚t|d tƒs¦t‚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_valuesçffffff
@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ƒs¤t‚t|jd tƒs¸t‚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sÌt‚|  d¡j|d ksät‚|  d¡j|d ksüt‚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sšt‚|jdks¨t‚|jd t	j
ks¼t‚|jtjdfksÐt‚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Š   þÿ	ûÿ


úþ
 ÿ
ýýþ
