o
    Ûñh±H  ã                   @   s&  d dl m Z d dlZd dlmZ d dlZzd dlZW n e	y%   dZY nw 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	yK   Y nw ej dg d¢¡ej dg d	¢¡d
d„ ƒƒZej ddgddgdfg d¢dfg d¢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 !¡ dfe "¡ d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g d¢¡d'd(„ ƒƒZ(ejjej d)ddg¡d*d+„ ƒƒZ)ejj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 +¡ d.fe !¡ dfe "¡ dfg¡ej dg d¢¡ej dg d/¢¡ej d0g d1¢¡d2d3„ ƒƒƒƒƒƒƒZ,ej d0g d4¢¡d5d6„ ƒZ-ejj.d7d8„ ƒZ/d9d:„ Z0ejjd;d<„ ƒZ1ejjd=d>„ ƒZ2d?d@„ Z3dS )Aé    ©ÚdatetimeN)ÚVersion)Ú_PyArrowColumnÚColumnNullTypeÚ	DtypeKind)Ú_from_dataframeÚunit)ÚsÚmsÚusÚnsÚtz)Ú úAmerica/New_Yorkú+07:30ú-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s-J ‚|jd	ks4J ‚|j	d
ks;J ‚|j
d	 tjksEJ ‚|jtjd	fksOJ ‚d S )Né×  é   é   é   ÚA©r   ©Útypeé   r   é   )ÚdtÚpaÚtableÚarrayÚ	timestampÚ__dataframe__Úget_column_by_nameÚsizeÚoffsetÚ
null_countÚdtyper   ÚDATETIMEÚdescribe_nullr   ÚUSE_BITMASK)r	   r   Údt_arrr   Úcol© r-   ú]/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/interchange/test_conversion.pyÚtest_datetime+   s   "r/   Ú	test_dataÚkindÚfooÚbaré   )g      ø?g      @g      @é   ©r   r5   r   é   c                 C   s®   t  | ¡}t|ƒ}|j|ksJ ‚| ¡ t| ƒksJ ‚|jd |ks#J ‚| ¡ dks+J ‚|jdks2J ‚| 	¡ d d u s<J ‚tt
| ¡ ƒƒdksHJ ‚| ¡ D ]}||ksTJ ‚qLd S )Nr   r   Úvalidity)r   r    r   Ú_colr$   Úlenr'   Ú
num_chunksr&   Úget_buffersÚlistÚ
get_chunks)r0   r1   ÚarrÚ
arr_columnÚchunkr-   r-   r.   Útest_array_to_pyarrowcolumn9   s   
	ÿrB   c                  C   s†   t  g d¢¡} |  dd¡}t j| gdgd}t j|gdgd}| ¡  d¡}|jdks-J ‚t| ¡ ƒ}| |¡s:J ‚| |¡rAJ ‚d S )Nr6   r5   r?   ©ÚnamesÚ
arr_slicedr   )	r   r    Úslicer   r"   Ú
get_columnr%   r   Úequals)r?   rE   r   Útable_slicedr,   Úresultr-   r-   r.   Útest_offset_of_sliced_arrayQ   s   rK   ÚuintÚintzfloat, np_float_strÚfloat32Úfloat64c              
   C   sú   t tjƒt dƒk rt d¡ g d¢}t tj|| dtj||dtjtj|t 	|¡d|dg d¢dœ¡}dd	l
m} ||ƒ}t |¡}| |¡sKJ ‚| ¡ }	| ¡ }
|	 ¡ |
 ¡ ks]J ‚|	 ¡ |
 ¡ ksgJ ‚|	 ¡ |
 ¡ ksqJ ‚|	 ¡ |
 ¡ ks{J ‚d S )
Nú1.5.0ú&__dataframe__ added to pandas in 1.5.0)r   r5   r   r   ©r'   ©TFT)ÚaÚbÚcÚdr   ©Úfrom_dataframe)r   ÚpdÚ__version__ÚpytestÚskipr   r   r    Únpr'   Úpandas.api.interchangerY   ÚpirH   r"   Únum_columnsÚnum_rowsr;   Úcolumn_names)rL   rM   ÚfloatÚnp_float_strr?   r   Úpandas_from_dataframeÚ	pandas_dfrJ   Útable_protocolÚresult_protocolr-   r-   r.   Útest_pandas_roundtripj   s(   
üÿ
rj   c                  C   s  t tjƒt dƒk rt d¡ g d¢} t dt | ¡i¡}ddlm	} ||ƒ}t
 	|¡}|d  ¡ |d  ¡ ks9J ‚tj |d j¡sDJ ‚tj |d j¡sOJ ‚| ¡ }| ¡ }| ¡ | ¡ ksaJ ‚| ¡ | ¡ kskJ ‚| ¡ | ¡ ksuJ ‚| ¡ | ¡ ksJ ‚d S )Nú1.6úColumn.size() bug in pandas©rT   r   rV   rT   r   rX   )r   rZ   r[   r\   r]   r   r   r    r_   rY   r`   Ú	to_pylistÚtypesÚ	is_stringr   Úis_large_stringr"   ra   rb   r;   rc   ©r?   r   rf   rg   rJ   rh   ri   r-   r-   r.   Útest_pandas_roundtrip_string•   s    

rs   c                  C   sT  t tjƒt dƒk rt d¡ g d¢} t dtj| t ¡ di¡}ddl	m
} t tjƒt dƒkrŽ||ƒ}t 
|¡}|d  ¡ |d  ¡ ksFJ ‚tj |d j¡sQJ ‚tj |d j¡s\J ‚| ¡ }| ¡ }| ¡ | ¡ ksnJ ‚| ¡ | ¡ ksxJ ‚| ¡ | ¡ ks‚J ‚| ¡ | ¡ ksŒJ ‚d S t t¡ ||ƒ W d   ƒ d S 1 s£w   Y  d S )	Nrk   rl   rm   Úa_larger   r   rX   z2.0.1)r   rZ   r[   r\   r]   r   r   r    Úlarge_stringr_   rY   r`   rn   ro   rq   r   r"   ra   rb   r;   rc   ÚraisesÚAssertionErrorrr   r-   r-   r.   Ú"test_pandas_roundtrip_large_string²   s(   


"ÿrx   c                  C   sD  t tjƒt dƒk rt d¡ g d¢} t t | ¡tj| t ¡ ddœ¡}ddl	m
} t tjƒt dƒkr†||ƒ}t 
|¡}|d	  ¡ |d	  ¡ ksJJ ‚tj |d	 j¡sUJ ‚tj |d	 j¡s`J ‚|d
  ¡ |d
  ¡ ksnJ ‚tj |d
 j¡syJ ‚tj |d
 j¡s„J ‚d S t t¡ ||ƒ W d   ƒ d S 1 s›w   Y  d S )Nrk   rl   )rT   r   rV   Nr   )rT   rt   r   rX   ú2.0.2rT   rt   )r   rZ   r[   r\   r]   r   r   r    ru   r_   rY   r`   rn   ro   rp   r   rq   rv   ÚNotImplementedError)r?   r   rf   rg   rJ   r-   r-   r.   Ú)test_pandas_roundtrip_string_with_missing×   s&   
ÿ

"ÿr{   c                  C   s0  t tjƒt dƒk rt d¡ g d¢} t dt | ¡ ¡ i¡}ddl	m
} ||ƒ}t 
|¡}|d  ¡ |d  ¡ ks;J ‚tj |d j¡sFJ ‚tj |d j¡sQJ ‚tj |d  d¡jj¡s`J ‚tj |d  d¡jj¡soJ ‚tj |d  d¡jj¡s~J ‚tj |d  d¡jj¡sJ ‚| ¡ }| ¡ }| ¡ | ¡ ksŸJ ‚| ¡ | ¡ ks©J ‚| ¡ | ¡ ks³J ‚| ¡ | ¡ ks½J ‚| d¡}| d¡}|jd tjksÑJ ‚|jd |jd ksÝJ ‚|  ¡ |  ¡ ksçJ ‚|j!|j!ksïJ ‚|j"}	|j"}
|	d |
d ksÿJ ‚|	d |
d ks
J ‚t#|
d	 j$tj%ƒsJ ‚d S )
Nry   z;Bitmasks not supported in pandas interchange implementation)	ÚMonÚTuer|   ÚWedr|   ÚThuÚFriÚSatNÚweekdayr   rX   Ú
is_orderedÚis_dictionaryÚ
categories)&r   rZ   r[   r\   r]   r   r   r    Údictionary_encoder_   rY   r`   rn   ro   r„   r   rp   rA   Ú
dictionaryrq   Úis_int32ÚindicesÚis_int8r"   ra   rb   r;   rc   rG   r'   r   ÚCATEGORICALr$   r%   Údescribe_categoricalÚ
isinstancer9   ÚArray)r?   r   rf   rg   rJ   rh   ri   Ú	col_tableÚ
col_resultÚdesc_cat_tableÚdesc_cat_resultr-   r-   r.   Ú!test_pandas_roundtrip_categorical÷   sB   
ÿ


r“   c           
      C   s.  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 rMt d
tj|t 	d¡di¡}n|}ddl
m} ||ƒ}t |¡}| |¡seJ ‚| ¡ }| ¡ }	| ¡ |	 ¡ kswJ ‚| ¡ |	 ¡ ksJ ‚| ¡ |	 ¡ ks‹J ‚| ¡ |	 ¡ ks•J ‚d S )NrP   rQ   r   r   r   r   r   r   é   rT   r   rk   r   rX   )r   rZ   r[   r\   r]   r   r   r   r    r!   r_   rY   r`   rH   r"   ra   rb   r;   rc   )
r	   r   r+   r   Úexpectedrf   rg   rJ   Úexpected_protocolri   r-   r-   r.   Útest_pandas_roundtrip_datetime'  s$   
" 
r—   re   c                 C   s²   t tjƒt dƒk rt d¡ tjdtjdgt | ¡d}d t	dddƒt	ddd	ƒg}t 
|tj|d
ddœ¡}t tj|ddtj|t d¡ddœ¡}t |¡}| |¡sWJ ‚d S )NrP   rQ   r   r5   rR   r   r   r   r”   zdatetime64[ns])rT   r   T)Úfrom_pandasr   r   )r   rZ   r[   r\   r]   r^   r    Únanr'   r   Ú	DataFramer   r   r!   r`   rY   rH   )re   Únp_arrayÚdatetime_arrayÚdfr•   rJ   r-   r-   r.   Ú#test_pandas_to_pyarrow_with_missingK  s   
üþ
rž   c                  C   s|   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 d   ƒ d S 1 s7w   Y  d S )NrP   rQ   r   r5   rR   rT   )r   rZ   r[   r\   r]   r^   r    r™   Úfloat16rš   rv   rz   r`   rY   )r›   r   r-   r-   r.   Ú+test_pandas_to_pyarrow_float16_with_missingd  s   
"ÿr    rŸ   )r   r   r   zoffset, length))r   r   ©r   r5   )r   r5   ©r5   r   c                 C   s"  ddl m } g d¢}	|dddƒd |dddƒg}
t tj|	| dtj|	|dtjtj|	t |¡d	|d
dg d¢g d¢g d¢tj|
tj||dddœ¡}| ||¡}t| 	¡ ƒ}| 
|¡s_J ‚| 	¡ }| 	¡ }| ¡ | ¡ ksqJ ‚| ¡ | ¡ ks{J ‚| ¡ | ¡ ks…J ‚| ¡ | ¡ ksJ ‚d S )Nr   r   )r   r5   Nr   r   r   r”   r   rR   T)r   r˜   rS   )TFN)rT   NrV   r   )rT   rU   rV   rW   ÚeÚfÚg)r   r   r   r    r^   r'   r!   rF   r   r"   rH   ra   rb   r;   rc   )rL   rM   rd   re   r	   r   r%   Úlengthr   r?   r+   r   rJ   rh   ri   r-   r-   r.   Útest_pyarrow_roundtrips  s0   ÿøÿr§   ))r   é
   r¡   )r   r   r¢   c                 C   sX  g d¢}t  dt  |¡ ¡ i¡}| | |¡}t| ¡ ƒ}| |¡s#J ‚| ¡ }| ¡ }| ¡ | ¡ ks5J ‚| 	¡ | 	¡ ks?J ‚| 
¡ | 
¡ ksIJ ‚| ¡ | ¡ ksSJ ‚| d¡}| d¡}|jd tjksgJ ‚|jd |jd kssJ ‚| ¡ | ¡ ks}J ‚|j|jks…J ‚|j}	|j}
|	d |
d ks•J ‚|	d |
d ksŸJ ‚t|
d jt jƒsªJ ‚d S )N)	r|   r}   r|   r~   r|   r   r€   NÚSunr‚   r   rƒ   r„   r…   )r   r   r    r†   rF   r   r"   rH   ra   rb   r;   rc   rG   r'   r   r‹   r$   r%   rŒ   r   r9   rŽ   )r%   r¦   r?   r   rJ   rh   ri   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s1J ‚tj	 
|d j¡s<J ‚tj	 
|d j¡sGJ ‚| |¡sNJ ‚d S )	Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi  0 ÚobjectrR   r   ru   rC   r   )r^   r    r   ru   r   r   r"   rG   r$   ro   rq   r   rH   )Údatar?   r   rJ   r,   r-   r-   r.   Ú#test_pyarrow_roundtrip_large_stringÈ  s   r­   c                  C   sN   t  dg d¢i¡} t t¡ | jdd W d   ƒ d S 1 s w   Y  d S )NrT   r6   T)Únan_as_null)r   r   r\   rv   Ú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g d¢i¡} t t¡ tj	| dd W d   ƒ n1 s.w   Y  t dd t
dd	d
ƒt
dd	dƒgi¡} t t¡ tj	| dd W d   ƒ d S 1 s]w   Y  d S )NrP   rQ   rT   )r   g      ð?g       @F©Ú
allow_copyr   r   r   r   r”   )r   rZ   r[   r\   r]   rš   rv   r¯   r`   rY   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g d¢i¡} t t¡ tj	| dd W d   ƒ n1 s.w   Y  t dg d¢i¡} t t¡ tj	| dd W d   ƒ n1 sSw   Y  t dg d	¢i¡} |  
d
¡} t t¡ tj	| dd W d   ƒ n1 s}w   Y  t dg d¢i¡} |  
d
¡} t t¡ tj	| dd W d   ƒ d S 1 s¨w   Y  d S )NrP   rQ   rT   )NFTFr±   rS   r‚   )rT   rU   NÚcategory)rT   rU   rV   )r   rZ   r[   r\   r]   rš   rv   r¯   r`   rY   Úastyper³   r-   r-   r.   Ú&test_allow_copy_false_bool_categoricalò  s(   
ÿÿ
ÿ
"ÿr·   c                  C   sB   t  dt  ¡ fg¡} t jg g| d}| ¡ }t |¡|ksJ ‚d S )NÚcol1)Úschema)r   r¹   Úint8r   r"   r`   rY   )r¹   r   Údfir-   r-   r.   Útest_empty_dataframe  s   r¼   )4r   r   Úpyarrowr   Úpyarrow.vendored.versionr   r\   Únumpyr^   ÚImportErrorÚpyarrow.interchangeÚinterchanger`   Úpyarrow.interchange.columnr   r   r   Ú"pyarrow.interchange.from_dataframer   ÚpandasrZ   ÚmarkÚparametrizer/   rB   rK   Úuint8Úuint16Úuint32rº   Úint16Úint32Úint64rN   rO   rj   rs   rx   r{   r“   r—   rž   r    rŸ   r§   rª   Úlarge_memoryr­   r°   r´   r·   r¼   r-   r-   r-   r.   Ú<module>   s²   ÿÿ


ýþ
ÿÿ

ýÿ

$

/"ÿ
ÿÿ


ýÿ!
"


