o
    d                     @   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&d d! Z'd"d# Z(ej$%deee ee!gd$d% Z)d&d' Z*ej$%dg d(g d)d*g d+g d)d*e+g d,e+g d+e+g d)d-gd.d/ Z,d0d1 Z-d2d3 Z.d4d5 Z/d6d7 Z0e
1d8d9d: Z2d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 | ]}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   V/app/.heroku/python/lib/python3.10/site-packages/pandas/tests/interchange/test_impl.py
<listcomp>   s    z)_make_data.<locals>.<dictcomp>.<listcomp>)intNCOLSrangeNROWS)r   ir   r   r   
<dictcomp>   s    0z_make_data.<locals>.<dictcomp>)r   r   r   r   r   r   
_make_data   s   
r   c                   C      t ddS )Nir   randomrandintr   r   r   r   <lambda>"       r!   c                   C   r   )Nr   r   r   r   r   r   r   r!   #   r"   c                   C   s   t ddgS )NTF)r   choicer   r   r   r   r!   $   s    c                   C   s   t   S N)r   r   r   r   r   r!   %   s    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sJ |jdks#J |j	t
jdfks-J | dks5J |j}|d | d ksBJ |d du sJJ t|d tsSJ t|d jt g d	 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
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   sl   t dd} g d}| d| | i}| }t|}tj|g dd}t	d|i}t
|| d S )Npyarrow11.0.0)	MonTuerD   WedrD   ThuFriSatSunweekday)rD   rE   rF   rG   rH   rI   rJ   )r.   )pytestimportorskiptablearrayZdictionary_encoder7   r   r4   Categoricalr5   r>   r?   )paarrrN   exchange_dfresultrK   expectedr   r   r   test_categorical_pyarrowM   s   rV   c                  C   sv   t dd} ddg}| d| |di}| }t|}tdddgi}t	|| | j
| j||s9J d S )NrB   rC   rD   rE   rK   Zlarge_string)rL   rM   rN   rO   r7   r   r4   r5   r>   r?   TableequalsZinterchange)rQ   rR   rN   rS   rT   rU   r   r   r   test_large_string_pyarrow\   s   rY   c                    s   t  }| }| tksJ | tksJ t| t 	 ks'J d}t
 fdd|D }t||}t||}t|| t|jd tsRJ t|jd ts\J d S )N)r   r   c                 3   s     | ]}t   | V  qd S r$   )listkeys)r   idxr+   r   r   	<genexpr>y   s    z!test_dataframe.<locals>.<genexpr>Z_INTERCHANGE_PROTOCOL_BUFFERS)r4   r5   r7   Znum_columnsr   Znum_rowsr   rZ   Zcolumn_namesr[   tupler   Zselect_columnsZselect_columns_by_namer>   r?   r=   attrs)r+   r@   df2indicesnamesrT   rU   r   r]   r   test_dataframek   s   
rd   c                     s   t tg dtg dtg dd   } tjd fdd jD }| D ]\}} j	j
tt |dd	 }d  j||f< q1  } | d
j|d
 ks]J | dj|d ksiJ | dj|d ksuJ d S )N)r   r         r   )      ?      @      @g      @r   )TFTTT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>F)sizereplacerk   rl   rm   )r4   r5   nprO   r7   r   ZRandomStatecolumnsitemsindexr#   Zarangerq   locr8   r:   )ra   Z	dict_nullr   Z	num_nullsZnull_idxr   rr   r   test_missing_from_masked   s$   r{   )rg   rh   ri   )ffffff"@      %@皙'@)rk   rl   )r   r   r   )TTFrj   c                 C   s6   t | }| }|jD ]}||jdksJ qd S )Nr   )r4   r5   r7   rw   r8   r:   )r+   r@   ra   col_namer   r   r   test_mixed_data   s
   

r   c                  C   s\   t tg dtg dtg dd} |  }| jD ]}||jdks+J qd S )N)TNFNT)Nr   Nr   r   )r|   r}   Nr~   Nrj   r   )r4   r5   rv   rO   r7   rw   r8   r:   )r@   ra   r   r   r   r   test_mixed_missing   s   
r   c                  C   s   t d dg } td| i}| d}| dksJ |jdks$J |jd tj	ks.J |j
tjdfks8J |dd  }| d}| dksMJ |jdksTJ |jd tj	ks^J |j
tjdfkshJ d S )Nr*    r,      r   r      )string_datar4   r5   r7   r8   rt   r:   r9   r   STRINGr;   r   ZUSE_BYTEMASK)Ztest_str_datar@   r   Z	df_slicedr   r   r   test_string   s   r   c                  C   sZ   t dg di} |  d}tjtdd |j W d    d S 1 s&w   Y  d S )Nr,   )r/   
   g      ?r   znot supported yet)match)r4   r5   r7   r8   rL   ZraisesNotImplementedErrorr9   r@   r   r   r   r   test_nonstring_object   s
   "r   c                  C   s   t dt dt jgi} |  d}| dksJ |jdks#J |jd t	j
ks-J |jtjtfks7J t| t|   d S )Nr,   z
2022-01-01r   r   r   )r4   r5   	TimestampZNaTr7   r8   rt   r:   r9   r   ZDATETIMEr;   r   r<   r   r>   r?   r   r   r   r   r   test_datetime   s   r   z1.23c                  C   s^   t dt g di} |  d}t| d d }tjg ddd}t	
|| d S )Nr,   )r/   br/   r+   r   )r   r   r   Zint8)r9   )r4   r5   rP   r7   r8   rv   Zfrom_dlpackZget_buffersrO   r>   Zassert_numpy_array_equal)r@   r   rT   rU   r   r   r    test_categorical_to_numpy_dlpack   s
   r   )3r   r   numpyrv   rL   Zpandas._libs.tslibsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr4   Zpandas._testingZ_testingr>   Zpandas.core.interchange.columnr   Z*pandas.core.interchange.dataframe_protocolr   r   Z&pandas.core.interchange.from_dataframer   rP   rZ   r6   r   r   r   Zint_dataZ	uint_dataZ	bool_dataZ
float_dataZdatetime_dataNaNr   markZparametrizerA   rV   rY   rd   r{   rO   r   r   r   r   r   Zskip_if_np_ltr   r   r   r   r   <module>   sr    	


