o
    ò©ZhH  ã                
   @   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y=   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 !¡ 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g d¢¡d%d&„ ƒƒZ(ejjej d'ej!ej"g¡d(d)„ ƒƒZ)ejjd*d+„ ƒ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g d¢¡ej dg d,¢¡ej d-g d.¢¡d/d0„ ƒƒƒƒƒƒZ,ej d-g d1¢¡d2d3„ ƒZ-ejj.d4d5„ ƒZ/d6d7„ Z0ejjd8d9„ ƒZ1ejjd:d;„ ƒZ2d<d=„ Z3dS )>é    ©Ú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__Zget_column_by_nameÚsizeÚoffsetÚ
null_countÚdtyper   ZDATETIMEZdescribe_nullr   ZUSE_BITMASK)r	   r   Údt_arrr   Úcol© r)   ú`/var/www/html/lang_env/lib/python3.10/site-packages/pyarrow/tests/interchange/test_conversion.pyÚtest_datetime'   s   "r+   Ú	test_dataÚkindZfooÚbaré   )g      ø?g      @g      @é   ©r   r0   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   Zvalidity)r   r    r   Ú_colr#   Úlenr&   Ú
num_chunksr%   Zget_buffersÚlistZ
get_chunks)r,   r-   ÚarrZ
arr_columnÚchunkr)   r)   r*   Útest_array_to_pyarrowcolumn5   s   
	ÿr9   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 )Nr1   r0   r7   ©ÚnamesÚ
arr_slicedr   )	r   r    Úslicer   r"   Ú
get_columnr$   r   Úequals)r7   r<   r   Ztable_slicedr(   Úresultr)   r)   r*   Útest_offset_of_sliced_arrayM   s   rA   ÚuintÚintzfloat, np_floatc              	   C   sô   t tjƒt dƒk rt d¡ g d¢}t tj|| dtj||dtjtj||d|dg d¢dœ¡}dd	l	m
} ||ƒ}t 
|¡}| |¡sHJ ‚| ¡ }	| ¡ }
|	 ¡ |
 ¡ ksZJ ‚|	 ¡ |
 ¡ ksdJ ‚|	 ¡ |
 ¡ ksnJ ‚|	 ¡ |
 ¡ ksxJ ‚d S )
Nú1.5.0ú&__dataframe__ added to pandas in 1.5.0)r   r0   r   r   ©r&   ©TFT)ÚaÚbÚcÚdr   ©Úfrom_dataframe)r   ÚpdÚ__version__ÚpytestÚskipr   r   r    ÚnpÚpandas.api.interchangerM   Úpir?   r"   Únum_columnsÚnum_rowsr5   Úcolumn_names)rB   rC   ÚfloatÚnp_floatr7   r   Úpandas_from_dataframeÚ	pandas_dfr@   Útable_protocolÚresult_protocolr)   r)   r*   Útest_pandas_roundtripf   s(   
üÿ
r^   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©rH   r   rJ   rH   r   rL   )r   rN   rO   rP   rQ   r   r   r    rS   rM   rT   Ú	to_pylistÚtypesÚ	is_stringr   Úis_large_stringr"   rU   rV   r5   rW   ©r7   r   rZ   r[   r@   r\   r]   r)   r)   r*   Útest_pandas_roundtrip_string‘   s    

rg   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 )	Nr_   r`   ra   Úa_larger   r   rL   z2.0.1)r   rN   rO   rP   rQ   r   r   r    Úlarge_stringrS   rM   rT   rb   rc   re   r   r"   rU   rV   r5   rW   ÚraisesÚAssertionErrorrf   r)   r)   r*   Ú"test_pandas_roundtrip_large_string®   s(   


"ÿrl   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 )Nr_   r`   )rH   r   rJ   Nr   )rH   rh   r   rL   ú2.0.2rH   rh   )r   rN   rO   rP   rQ   r   r   r    ri   rS   rM   rT   rb   rc   rd   r   re   rj   ÚNotImplementedError)r7   r   rZ   r[   r@   r)   r)   r*   Ú)test_pandas_roundtrip_string_with_missingÓ   s&   
ÿ

"ÿro   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 )
Nrm   z;Bitmasks not supported in pandas interchange implementation)	ÚMonÚTuerp   ÚWedrp   ÚThuÚFriÚSatNÚweekdayr   rL   Ú
is_orderedÚis_dictionaryÚ
categories)&r   rN   rO   rP   rQ   r   r   r    Údictionary_encoderS   rM   rT   rb   rc   rx   r   rd   r8   Ú
dictionaryre   Zis_int32ÚindicesZis_int8r"   rU   rV   r5   rW   r>   r&   r   ÚCATEGORICALr#   r$   Údescribe_categoricalÚ
isinstancer3   ÚArray)r7   r   rZ   r[   r@   r\   r]   Ú	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 )NrD   rE   r   r   r   r   r   r   é   rH   r   r_   r   rL   )r   rN   rO   rP   rQ   r   r   r   r    r!   rS   rM   rT   r?   r"   rU   rV   r5   rW   )
r	   r   r'   r   ÚexpectedrZ   r[   r@   Zexpected_protocolr]   r)   r)   r*   Útest_pandas_roundtrip_datetime#  s$   
" 
rˆ   rY   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 |¡}| |¡sOJ ‚d S )NrD   rE   r   r0   rF   r   r   r   r†   )rH   r   T)Úfrom_pandasr   r   )r   rN   rO   rP   rQ   rR   r    Únanr   Ú	DataFramer   r   r!   rT   rM   r?   )rY   Únp_arrayZdatetime_arrayÚdfr‡   r@   r)   r)   r*   Ú#test_pandas_to_pyarrow_with_missingG  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 )NrD   rE   r   r0   rF   rH   )r   rN   rO   rP   rQ   rR   r    rŠ   Úfloat16r‹   rj   rn   rT   rM   )rŒ   r   r)   r)   r*   Ú+test_pandas_to_pyarrow_float16_with_missing^  s   
"ÿr   )r   r   r   zoffset, length))r   r   ©r   r0   )r   r0   ©r0   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|	|d	|d
dg d¢g d¢g d¢tj|
tj||dddœ¡}| ||¡}t| ¡ ƒ}| 	|¡s\J ‚| ¡ }| ¡ }| 
¡ | 
¡ ksnJ ‚| ¡ | ¡ ksxJ ‚| ¡ | ¡ ks‚J ‚| ¡ | ¡ ksŒJ ‚d S )Nr   r   )r   r0   Nr   r   r   r†   r   rF   T)r   r‰   rG   )TFN)rH   NrJ   r   )rH   rI   rJ   rK   ÚeÚfÚg)r   r   r   r    rR   r!   r=   r   r"   r?   rU   rV   r5   rW   )rB   rC   rX   rY   r	   r   r$   Úlengthr   r7   r'   r   r@   r\   r]   r)   r)   r*   Útest_pyarrow_roundtripm  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)	rp   rq   rp   rr   rp   rs   rt   NÚSunrv   r   rw   rx   ry   )r   r   r    rz   r=   r   r"   r?   rU   rV   r5   rW   r>   r&   r   r}   r#   r$   r~   r   r3   r€   )r$   r–   r7   r   r@   r\   r]   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 ÚobjectrF   r   ri   r:   r   )rR   r    r   ri   r   r   r"   r>   r#   rc   re   r   r?   )Údatar7   r   r@   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 )NrH   r1   T)Znan_as_null)r   r   rP   rj   Ú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 )NrD   rE   rH   )r   g      ð?g       @F©Z
allow_copyr   r   r   r   r†   )r   rN   rO   rP   rQ   r‹   rj   rž   rT   rM   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 )NrD   rE   rH   )NFTFr    rG   rv   )rH   rI   NÚcategory)rH   rI   rJ   )r   rN   rO   rP   rQ   r‹   rj   rž   rT   rM   Z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 )NZcol1)Úschema)r   r¥   Úint8r   r"   rT   rM   )r¥   r   Zdfir)   r)   r*   Útest_empty_dataframe  s   r§   )4r   r   ÚnumpyrR   Zpyarrowr   Zpyarrow.vendored.versionr   rP   Zpyarrow.interchangeZinterchangerT   Zpyarrow.interchange.columnr   r   r   Z"pyarrow.interchange.from_dataframer   ZpandasrN   ÚImportErrorÚmarkZparametrizer+   r9   rA   Zuint8Zuint16Zuint32r¦   Zint16Zint32Zint64Zfloat32Zfloat64r^   rg   rl   ro   r…   rˆ   rŽ   r   r   r—   rš   Zlarge_memoryr   rŸ   r¢   r¤   r§   r)   r)   r)   r*   Ú<module>   s¨   ÿ


ýþ
ÿÿýÿ

$

/"ÿ
ÿÿýÿ!
"


