U
    kŖ/ePG  ć                   @   s*  d dl m Z 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mZmZ d dlmZ zd dlZW n ek
r|   Y nX ej dddd	d
g”ej dddddg”dd Zej ddgddgdfdddgdfddddgd fg”dd Zd d! Zejjej d"e ” e ” e ” g”ej d#e ” e ” e ” e  ” g”ej d$e !” ej!fe "” ej"fg”d%d& Z#ejjd'd( Z$ejjd)d* Z%ejjd+d, Z&ejjd-d. Z'ejjej dddd	d
g”d/d0 Z(ejjej d1ej!ej"g”d2d3 Z)ejjd4d5 Z*ej d"e ” e ” e ” g”ej d#e ” e ” e ” e  ” g”ej d$e +” ej+fe !” ej!fe "” ej"fg”ej dddd	d
g”ej ddddg”ej d6d7d8d9d:g”d;d< Z,ej d6d=d8d>d:g”d?d@ Z-ejj.dAdB Z/dCdD Z0ejjdEdF Z1ejjdGdH Z2dS )Ié    ©ŚdatetimeN)ŚVersion)Ś_PyArrowColumnŚColumnNullTypeŚ	DtypeKind)Ś_from_dataframeŚunitŚsŚmsŚusŚnsŚtzŚ zAmerica/New_Yorkz+07:30z-04:30c              	   C   s¢   t dddt dddd g}t dtj|tj| |ddi”}| ”  d”}| ” dksZt|j	d	ksht|j
d
ksvt|jd	 tjkst|jtjd	fkstd S )Né×  é   é   é   ŚA©r   ©Śtypeé   r   é   )ŚdtŚpaŚtableŚarrayŚ	timestampŚ__dataframe__Zget_column_by_nameŚsizeŚAssertionErrorŚoffsetŚ
null_countŚdtyper   ZDATETIMEZdescribe_nullr   ZUSE_BITMASK)r	   r   Śdt_arrr   Ścol© r'   śM/tmp/pip-unpacked-wheel-seu8352k/pyarrow/tests/interchange/test_conversion.pyŚtest_datetime'   s    "r)   Ś	test_dataŚkindZfooŚbaré   g      ų?g      @g      @é   r   r   é   c                 C   s®   t  | ”}t|}|j|ks t| ” t| ks4t|jd |ksFt| ” dksVt|j	dksdt| 
” d d ksxttt| ” dkst| ” D ]}||kstqd S )Nr   r   Zvalidity)r   r   r   Ś_colr!   r    Ślenr$   Ś
num_chunksr#   Zget_buffersŚlistZ
get_chunks)r*   r+   ŚarrZ
arr_columnŚchunkr'   r'   r(   Śtest_array_to_pyarrowcolumn5   s    	
r6   c                  C   s   t  ddddg”} |  dd”}t j| gdgd}t j|gdgd}| ”  d”}|jdks^tt| ” }| 	|”sxt| 	|”rtd S )	Nr   r.   r   r/   r4   ©ŚnamesŚ
arr_slicedr   )
r   r   Śslicer   r   Ś
get_columnr"   r!   r   Śequals)r4   r9   r   Ztable_slicedr&   Śresultr'   r'   r(   Śtest_offset_of_sliced_arrayM   s    r>   ŚuintŚintzfloat, np_floatc              	   C   sų   t tjt dk rt d” dddg}t tj|| dtj||dtjtj||d|ddd	dgd
”}ddl	m
} ||}t 
|”}| |”st| ” }	| ” }
|	 ” |
 ” ksøt|	 ” |
 ” ksĢt|	 ” |
 ” ksąt|	 ” |
 ” ksōtd S )Nś1.5.0ś&__dataframe__ added to pandas in 1.5.0r   r.   r   r   ©r$   TF)ŚaŚbŚcŚdr   ©Śfrom_dataframe)r   ŚpdŚ__version__ŚpytestŚskipr   r   r   ŚnpŚpandas.api.interchangerI   Śpir<   r!   r   Śnum_columnsŚnum_rowsr2   Ścolumn_names)r?   r@   ŚfloatŚnp_floatr4   r   Śpandas_from_dataframeŚ	pandas_dfr=   Śtable_protocolŚresult_protocolr'   r'   r(   Śtest_pandas_roundtripf   s(    

ü’
rZ   c                  C   s  t tjt dk rt d” dddg} t dt | ”i”}ddlm	} ||}t
 	|”}|d  ” |d  ” kstttj |d j”sttj |d j”s t| ” }| ” }| ” | ” ksÄt| ” | ” ksŲt| ” | ” ksģt| ” | ” kstd S )Nś1.6śColumn.size() bug in pandasrD   r   rF   r   rH   )r   rJ   rK   rL   rM   r   r   r   rO   rI   rP   Ś	to_pylistr!   ŚtypesŚ	is_stringr   Śis_large_stringr   rQ   rR   r2   rS   ©r4   r   rV   rW   r=   rX   rY   r'   r'   r(   Śtest_pandas_roundtrip_string   s     


rb   c               	   C   sD  t tjt dk rt d” dddg} t dtj| t ” di”}dd	l	m
} t tjt d
kr"||}t 
|”}|d  ” |d  ” ksttj |d j”s¦ttj |d j”s¼t| ” }| ” }| ” | ” ksąt| ” | ” ksōt| ” | ” ks
t| ” | ” ks@tnt t” || W 5 Q R X d S )Nr[   r\   rD   r   rF   Śa_larger   r   rH   z2.0.1)r   rJ   rK   rL   rM   r   r   r   Ślarge_stringrO   rI   rP   r]   r!   r^   r`   r   r   rQ   rR   r2   rS   Śraisesra   r'   r'   r(   Ś"test_pandas_roundtrip_large_string®   s&    


rf   c               	   C   s4  t tjt dk rt d” dddd g} t t | ”tj| t ” dd”}dd	l	m
} t tjt d
kr||}t 
|”}|d  ” |d  ” ksttj |d j”s°ttj |d j”sĘt|d  ” |d  ” ksāttj |d j”sųttj |d j”s0tnt t” || W 5 Q R X d S )Nr[   r\   rD   r   rF   r   )rD   rc   r   rH   ś2.0.2rc   )r   rJ   rK   rL   rM   r   r   r   rd   rO   rI   rP   r]   r!   r^   r_   r   r`   re   ŚNotImplementedError)r4   r   rV   rW   r=   r'   r'   r(   Ś)test_pandas_roundtrip_string_with_missingÓ   s$    
’
ri   c               	   C   sT  t tjt dk rt d” ddddddddd g	} t d	t | ” ” i”}d
dl	m
} ||}t 
|”}|d	  ” |d	  ” ksttj |d	 j”sttj |d	 j”s°ttj |d	  d
”jj”sĪttj |d	  d
”jj”sģttj |d	  d
”jj”sttj |d	  d
”jj”s,t| ” }| ” }| ” | ” ksRt| ” | ” ksht| ” | ” ks~t| ” | ” kst| d
”}| d
”}|jd
 tj ks¾t|jd
 |jd
 ksŲt| !” | !” ksīt|j"|j"ks t|j#}	|j#}
|	d |
d ks"t|	d |
d ks8tt$|
d j%tj&sPtd S )Nrg   z;Bitmasks not supported in pandas interchange implementationŚMonŚTueŚWedŚThuŚFriŚSatŚweekdayr   rH   Ś
is_orderedŚis_dictionaryŚ
categories)'r   rJ   rK   rL   rM   r   r   r   Śdictionary_encoderO   rI   rP   r]   r!   r^   rr   r   r_   r5   Ś
dictionaryr`   Zis_int32ŚindicesZis_int8r   rQ   rR   r2   rS   r;   r$   r   ŚCATEGORICALr    r"   Śdescribe_categoricalŚ
isinstancer0   ŚArray)r4   r   rV   rW   r=   rX   rY   Ś	col_tableŚ
col_resultŚdesc_cat_tableŚdesc_cat_resultr'   r'   r(   Ś!test_pandas_roundtrip_categoricaló   sB    
’
  

r   c           
      C   s4  t tjt dk rt d” ddlm} |ddd|ddd|ddd	g}t d
tj|t 	| ”di”}t tjt dk rt d
tj|t 	d”di”}n|}ddl
m} ||}t |”}| |”sŹt| ” }| ” }	| ” |	 ” ksīt| ” |	 ” kst| ” |	 ” kst| ” |	 ” ks0td S )NrA   rB   r   r   r   r   r   r   é   rD   r   r[   r   rH   )r   rJ   rK   rL   rM   r   r   r   r   r   rO   rI   rP   r<   r!   r   rQ   rR   r2   rS   )
r	   r   r%   r   ŚexpectedrV   rW   r=   Zexpected_protocolrY   r'   r'   r(   Śtest_pandas_roundtrip_datetime#  s$    
" 
r   rU   c                 C   s¢   t tjt dk rt d” tjdtjdg| d}d tdddtddd	g}t 	||d
”}t
 t
j|ddt
j|t
 d”dd
”}t |”}| |”std S )NrA   rB   r   r.   rC   r   r   r   r   )rD   r   T)Śfrom_pandasr   r   )r   rJ   rK   rL   rM   rN   r   Śnanr   Ś	DataFramer   r   r   rP   rI   r<   r!   )rU   Śnp_arrayZdatetime_arrayŚdfr   r=   r'   r'   r(   Ś#test_pandas_to_pyarrow_with_missingG  s    
žž
r   c               	   C   sf   t tjt dk rt d” tjdtjdgtjd} t 	d| i”}t 
t” t |” W 5 Q R X d S )NrA   rB   r   r.   rC   rD   )r   rJ   rK   rL   rM   rN   r   r   Śfloat16r   re   rh   rP   rI   )r   r   r'   r'   r(   Ś+test_pandas_to_pyarrow_float16_with_missing^  s    
r   zoffset, length)r   r   )r   r.   )r   r.   )r.   r   c                 C   s(  ddl m } ddd g}	|dddd |dddg}
t tj|	| d	tj|	|d	tjtj|	|d
|dddddgddd gdd dgtj|
tj||dd	d”}| ||”}t| ” }| 	|”sĄt
| ” }| ” }| ” | ” ksät
| ” | ” ksųt
| ” | ” kst
| ” | ” ks$t
d S )Nr   r   r   r.   r   r   r   r   r   rC   T)r   r   FrD   rF   r   )rD   rE   rF   rG   ŚeŚfŚg)r   r   r   r   rN   r   r:   r   r   r<   r!   rQ   rR   r2   rS   )r?   r@   rT   rU   r	   r   r"   Ślengthr   r4   r%   r   r=   rX   rY   r'   r'   r(   Śtest_pyarrow_roundtripm  s2    
 ’ų’r   )r   é
   )r   r   c              	   C   sp  dddddddd dg	}t  dt  |” ” i”}| | |”}t| ” }| |”sTt| ” }| ” }| 	” | 	” ksxt| 
” | 
” kst| ” | ” ks t| ” | ” ks“t| d”}| d”}|jd tjksÜt|jd |jd ksōt| ” | ” ks
t|j|jkst|j}	|j}
|	d	 |
d	 ks>t|	d
 |
d
 ksTtt|
d jt jsltd S )Nrj   rk   rl   rm   rn   ŚSunrp   r   rq   rr   rs   )r   r   r   rt   r:   r   r   r<   r!   rQ   rR   r2   rS   r;   r$   r   rw   r    r"   rx   ry   r0   rz   )r"   r   r4   r   r=   rX   rY   r{   r|   r}   r~   r'   r'   r(   Ś"test_pyarrow_roundtrip_categorical  s0    ’

r   c                  C   s    t jdgd dd} tj| t ” d}tj|gdgd}t| ” }| ”  d”}| ” dksbt	tj
 |d j”sxt	tj
 |d j”st	| |”st	d S )	Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi  0 ŚobjectrC   r   rd   r7   r   )rN   r   r   rd   r   r   r   r;   r    r!   r^   r`   r   r<   )Śdatar4   r   r=   r&   r'   r'   r(   Ś#test_pyarrow_roundtrip_large_stringĮ  s    r   c               	   C   s<   t  dddddgi”} t t” | jdd W 5 Q R X d S )NrD   r   r.   r   r/   T)Znan_as_null)r   r   rL   re   ŚRuntimeErrorr   )r   r'   r'   r(   Śtest_nan_as_nullŅ  s    r   c               	   C   s    t tjt dk rt d” t ddddgi”} t t” tj	| dd W 5 Q R X t d	d t
d
ddt
d
ddgi”} t t” tj	| dd W 5 Q R X d S )NrA   rB   rD   r   g      š?g       @F©Z
allow_copyr   r   r   r   r   )r   rJ   rK   rL   rM   r   re   r   rP   rI   r   ©r   r'   r'   r(   Śtest_allow_copy_falseŲ  s    
 ’r   c               	   C   s  t tjt dk rt d” t dd ddgi”} t t” tj	| dd W 5 Q R X t ddddgi”} t t” tj	| dd W 5 Q R X t dddd gi”} |  
d	”} t t” tj	| dd W 5 Q R X t dddd
gi”} |  
d	”} t t” tj	| dd W 5 Q R X d S )NrA   rB   rD   FTr   rp   rE   ŚcategoryrF   )r   rJ   rK   rL   rM   r   re   r   rP   rI   Zastyper   r'   r'   r(   Ś&test_allow_copy_false_bool_categoricalė  s     


r   )3r   r   ZnumpyrN   Zpyarrowr   Zpyarrow.vendored.versionr   rL   Zpyarrow.interchangeZinterchangerP   Zpyarrow.interchange.columnr   r   r   Z"pyarrow.interchange.from_dataframer   ZpandasrJ   ŚImportErrorŚmarkZparametrizer)   r6   r>   Zuint8Zuint16Zuint32Zint8Zint16Zint32Zint64Zfloat32Zfloat64rZ   rb   rf   ri   r   r   r   r   r   r   r   Zlarge_memoryr   r   r   r   r'   r'   r'   r(   Ś<module>   s¬   
żž
 ’ ’ż’

$

/" 
’
 ’ ’ż’!
"

