o
    Û­jöN  ã                   @   sH  d dl m Z mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
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 d d	lmZ ejd
d„ ƒZejdd„ ƒ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d!d"„ d#d"„ d$d"„ d%d"„ d&d"„ 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,¢¡d0œg¡d1d2„ ƒZ(d3d4„ Z)d5d6„ Z*d7d8„ Z+d9d:„ Z,ejj-ed;d<�d=d>„ ƒZ.ej di d?g ig¡d@dA„ ƒZ/dŽdCdD„Z0dŽdEdF„Z1dGdH„ Z2ej dIdJdKg¡ej dLg dM¢¡dNdO„ ƒƒZ3dPdQ„ Z4dŽdRdS„Z5dTdU„ Z6dVdW„ Z7dXdY„ Z8dZd[„ Z9ej d\g d]¢d^d_fg d]¢d`d_fg d]¢dadbfg d]¢dcdbfg d]¢dddefg d]¢dfdefg dg¢dhdifg dg¢djdifg dk¢dldmfg dk¢dndmfg do¢ej:ej;dp�dqfg do¢drdqfe dsddƒe dsddƒdgdtdufe dsddƒe dsddƒdgdvdwfe dsddej<dx�e dsddej<dx�dgdydzfg¡de=d{e>d|e>dBdfd}d~„ƒZ?ej d\g d¢d^d_fg d¢d`d_fg d¢dadbfg d¢dcdbfg d¢dddefg d¢dfdefg d€¢dhdifg d€¢djdifg d�¢dldmfg d�¢dndmfg d‚¢ej:ej;dp�dqfg d‚¢drdqfe dsddƒe dsddƒe dsddƒƒgdtdufe dsddƒe dsddƒe dsddƒƒgdvdwfe dsddej<dx�e dsddej<dx�e dsddƒej<dx�gdydzfg¡de=d{e>d|e>dBdfd„d…„ƒZ@dŽd†d‡„ZAdŽdˆd‰„ZBdŠd‹„ ZCdŒd�„ ZDdS )�é    )ÚdatetimeÚtimezoneN)ÚiNaT)Úis_ci_environmentÚis_platform_windows)Únp_version_lt1p23)ÚPandasColumn)ÚColumnNullTypeÚ	DtypeKind©Úfrom_dataframe)ÚArrowCTypesc                   C   s.   t jtdƒd dd�t jtdƒd dd�dœS )NÚtestdataé   T)ÚorderedF)r   Ú	unordered)ÚpdÚCategoricalÚlist© r   r   ú_/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/tests/interchange/test_impl.pyÚdata_categorical   s   þr   c                   C   s   dddddt jgiS )Núseparator datazabC|DeF,Hikz234,3245.67zgSaf,qWer|Grez
asd3,4sad|)ÚnpÚnanr   r   r   r   Ústring_data#   s   ûÿr   Údata)r   T)r   Fc                 C   sÚ   t  d|| 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   éÿÿÿÿé   Ú
is_orderedÚis_dictionaryTÚ
categories)ÚaÚdÚeÚsÚt)r   Ú	DataFrameÚ__dataframe__Úget_column_by_nameÚdtyper
   ÚCATEGORICALÚ
null_countÚdescribe_nullr	   ÚUSE_SENTINELÚ
num_chunksÚdescribe_categoricalÚ
isinstancer   ÚtmÚassert_series_equalÚ_colÚSeriesÚassert_frame_equalr   )r   r   ÚdfÚcolÚdesc_catr   r   r   Útest_categorical_dtype0   s   ÿr;   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ÚTuer>   ÚWedr>   ÚThuÚFriÚSatÚSunÚweekday)r>   r?   r@   rA   rB   rC   rD   )r"   )ÚpytestÚimportorskipÚtableÚarrayÚdictionary_encoder)   r   r   r   r(   r3   r7   )ÚpaÚarrrH   Úexchange_dfÚresultrE   Úexpectedr   r   r   Útest_categorical_pyarrowD   s   ÿrP   c                  C   sj   t  dd¡} d g}|  d|  |d¡ ¡ i¡}| ¡ }tjj 	|¡}t 
dt tjg¡i¡}t ||¡ d S )Nr<   r=   rL   Úfloat64)rF   rG   rH   rI   rJ   r)   r   ÚapiÚinterchanger   r(   r   r   r   r3   r7   ©rK   rL   rH   rM   rN   rO   r   r   r   Útest_empty_categorical_pyarrowS   s   rU   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 )Nr<   r=   r>   r?   rE   Úlarge_string)rF   rG   rH   rI   r)   r   r   r(   r3   r7   ÚTableÚequalsrS   rT   r   r   r   Útest_large_string_pyarrow_   s   rY   )ÚoffsetÚlengthÚexpected_valuesçffffff
@r   çÍÌÌÌÌÌ @r   é   c           	      C   sr   t  dd¡}g d¢}| d|i¡ | |¡}| ¡ }t|ƒ}t d|i¡}t 	||¡ |j
 |j |¡|¡s7J ‚d S )Nr<   r=   )r]   Nr^   rL   )rF   rG   rH   Úslicer)   r   r   r(   r3   r7   rW   rX   rS   )	rZ   r[   r\   rK   rL   rH   rM   rN   rO   r   r   r   Útest_bitmasks_pyarrown   s   ra   c                   C   ó   t j d¡ dd¡S )Nr_   iœÿÿÿéd   ©r   ÚrandomÚdefault_rngÚintegersr   r   r   r   Ú<lambda>‹   ó    rh   c                   C   rb   )Nr_   r   rc   rd   r   r   r   r   rh   Œ   ri   c                   C   s   t j d¡ ¡ S )Nr_   )r   re   rf   r   r   r   r   rh   �   s    c                   C   s   t j d¡ ddg¡S )Nr_   TF)r   re   rf   Úchoicer   r   r   r   rh   Ž   s    c                   C   s>   t tj d¡ dd¡tj d¡ dd¡tj d¡ dd¡d�S )Nr_   il  i4  r   é   é   )ÚyearÚmonthÚday)r   r   re   rf   rg   r   r   r   r   rh   �   s
    ýc                    sÞ   d\‰ ‰‡ ‡‡fdd„t ˆ ƒD ƒ‰t ˆ¡}| ¡ }| ¡ ˆ ks"J ‚| ¡ ˆks*J ‚t| ¡ ƒtˆ ¡ ƒks8J ‚d}t	‡fdd„|D ƒƒ}t
| |¡ƒ}t
| |¡ƒ}t ||¡ t|jd tƒscJ ‚t|jd tƒsmJ ‚d S )N)é
   rl   c                    s>   i | ]}d t |ˆ d  ˆ  d ƒ› �‡fdd„tˆƒD ƒ“qS )r9   r_   r   c                    s   g | ]}ˆ ƒ ‘qS r   r   )Ú.0Ú_©r   r   r   Ú
<listcomp>™   s    z-test_dataframe.<locals>.<dictcomp>.<listcomp>)ÚintÚrange)rq   Úi©ÚNCOLSÚNROWSr   r   r   Ú
<dictcomp>˜   s    0ÿÿz"test_dataframe.<locals>.<dictcomp>)r   r_   c                 3   s    � | ]}t ˆ  ¡ ƒ| V  qd S ©N)r   Úkeys)rq   Úidxrs   r   r   Ú	<genexpr>¦   s   € z!test_dataframe.<locals>.<genexpr>Ú_INTERCHANGE_PROTOCOL_BUFFERS)rv   r   r(   r)   Únum_columnsÚnum_rowsr   Úcolumn_namesr}   Útupler   Úselect_columnsÚselect_columns_by_namer3   r7   r2   Úattrs)r   r8   Údf2ÚindicesÚnamesrN   rO   r   rx   r   Útest_dataframeˆ   s    þ
r‹   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< q-ˆ  ¡ }| d
¡j| d
 ksYJ ‚| d¡j| d kseJ ‚| d¡j| d ksqJ ‚d S )N)ç      ð?ç       @g      @g      @ç        )ç      ø?ç      @ç      @g      @r   )rŒ   rŽ   rŒ   rŒ   rŒ   ©ÚxÚyÚzr_   c                    s    i | ]}|ˆj d tˆ ƒd�“qS )r   )ÚlowÚhigh)rg   Úlen)rq   r9   ©r8   Úrngr   r   r{   º   s     z,test_missing_from_masked.<locals>.<dictcomp>F)ÚsizeÚreplacer“   r”   r•   )r   r(   r   rI   re   rf   ÚcolumnsÚitemsÚindexrj   Úaranger˜   Úlocr)   r*   r-   )Ú	dict_nullr9   Ú	num_nullsÚnull_idxrˆ   r   r™   r   Útest_missing_from_masked°   s"   ýÿÿr¥   )r�   r�   r‘   )çffffff"@ç      %@çš™™™™™'@)r“   r”   )r   r_   r   )TTFr’   c                 C   s6   t  | ¡}| ¡ }|jD ]}| |¡jdksJ ‚qd S )Nr   )r   r(   r)   r�   r*   r-   )r   r8   rˆ   Ú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¨   Nr’   r_   )r   r(   r   rI   r)   r�   r*   r-   )r8   rˆ   r©   r   r   r   Útest_mixed_missingÜ   s   ýÿ
ÿr«   c                 C   sÔ   | 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   é   )r   r(   r)   r*   r›   r-   r+   r
   ÚSTRINGr.   r	   ÚUSE_BYTEMASK)r   Útest_str_datar8   r9   Ú	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#   rp   rŒ   r   znot supported yet©Úmatch)r   r(   r)   r*   rF   ÚraisesÚNotImplementedErrorr+   ©r8   r9   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   )r   r(   Ú	TimestampÚNaTr)   r*   r›   r-   r+   r
   ÚDATETIMEr.   r	   r/   r   r3   r7   r   r¸   r   r   r   Útest_datetime  s   r½   zNumpy > 1.23 required)Úreasonc                  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   Úint8©r+   )r   r(   r   r)   r*   r   Úfrom_dlpackÚget_buffersrI   r3   Úassert_numpy_array_equal)r8   r9   rN   rO   r   r   r   Ú test_categorical_to_numpy_dlpack  s
   rÅ   r#   c                 C   sF   t  dd¡ ddlm} t | ¡}||ƒ}t|ƒ}tj||dd� d S )Nr<   r=   r   r   F)Úcheck_column_type)rF   rG   Úpyarrow.interchanger   r   r(   r3   r7   )r   Úpa_from_dataframerO   Úarrow_dfrN   r   r   r   Útest_empty_pyarrow  s   
rÊ   Úreturnc                  C   s~   t  dd¡} |  g d¢g d¢g¡}dg}| j|g|d�}t jtdd�� tjjj	|d	d
� W d   ƒ d S 1 s8w   Y  d S )Nr<   r=   )r_   r_   é   )rÌ   r®   rc   Ún_legs)rŠ   z@Cannot do zero copy conversion into multi-column DataFrame blockr´   F©Ú
allow_copy)
rF   rG   Úchunked_arrayrH   r¶   ÚRuntimeErrorr   rR   rS   r   )rK   rÍ   rŠ   rH   r   r   r   Útest_multi_chunk_pyarrow&  s   þ"ürÒ   c                  C   sþ   t  dd¡ tjg d¢dd�} tj| | gdd� d¡}| ¡ }t jtd	d
�� tj	j
 |jdd�¡ W d   ƒ n1 s<w   Y  tj	j
 |jdd�¡}tjdg d¢idd�}t ||¡ t ||¡ t|d jjjƒdkspJ ‚t|d jjjƒdks}J ‚d S )Nr<   r=   ©r   r_   NúInt64[pyarrow]rÁ   T)Úignore_indexr#   z:Found multi-chunk pyarrow array, but `allow_copy` is Falser´   FrÎ   )rŒ   r�   NrŒ   r�   NrQ   r_   )rF   rG   r   r6   ÚconcatÚto_frameÚcopyr¶   rÑ   rR   rS   r   r)   r(   r3   r7   r˜   rI   Ú	_pa_arrayÚchunks)Úserr8   Údf_origrN   rO   r   r   r   Útest_multi_chunk_column2  s   ÿýrÝ   c                  C   s|   t  dd¡ dddddddœ} tjtd	i | ¤Žgddd� ¡ }| ¡ }tjj 	|¡d  
¡ }tjd	i | ¤Ž}||ks<J ‚d S )
Nr<   r=   iÐ  r   )rm   rn   ro   ÚhourÚminuteÚsecondútimestamp[ns][pyarrow]Úcol0)r+   Únamer   )rF   rG   r   r6   r   r×   r)   rR   rS   r   Úitemrº   )Útimestamp_argsr8   ÚdfirN   rO   r   r   r   Útest_timestamp_ns_pyarrowG  s&   úýürç   ÚtzÚUTCz
US/PacificÚunit)r&   ÚmsÚusÚnsc                 C   sB   t jdddd� | ¡ |¡}t  d|i¡}t |t| ¡ ƒ¡ d S )Nz
2018-01-01r®   ÚD)ÚperiodsÚfreqÚts_tz)	r   Ú
date_rangeÚtz_localizeÚas_unitr(   r3   r7   r   r)   )rè   rê   Útz_datar8   r   r   r   Útest_datetimetzdtype_  s   ÿrö   c           	      C   s°   t  dd¡}dd lm} tƒ r tƒ r t jj|jdd�}|  	|¡ | 
tdddƒd tdddƒg¡}| |d	¡}| d
|i¡}| ¡ }t|ƒ}tjg d¢d
gdd�}t ||¡ d S )Nr<   r=   r   z_TODO: Set ARROW_TIMEZONE_DATABASE environment variable on CI to path to the tzdata for pyarrow.)r¶   r¾   éä  r   r_   úAsia/KathmandurL   )z2020-01-01 00:00:00+05:45r»   z2020-01-02 00:00:00+05:45zdatetime64[us, Asia/Kathmandu])r�   r+   )rF   rG   Úpyarrow.computeÚcomputer   r   ÚmarkÚxfailÚArrowInvalidÚapplymarkerrI   r   Úassume_timezonerH   r)   r   r   r(   r3   r7   )	ÚrequestrK   Úpcrû   rL   rH   rM   rN   rO   r   r   r   Ú)test_interchange_from_non_pandas_tz_awarej  s&   ý
 ýr  c                    s¨   t  dddgi¡ ¡ }| ¡ ‰ˆ d¡‰ˆ ¡ ‰ ˆ d }|d }tjdtj|d f}|d |fˆ d< ‡ fd	d
„ˆ_‡fdd
„ˆ_|  	|d‡fdd
„¡ t j
j |¡ d S )Nr#   ÚfooÚbarr   r   é   é   r   c                      ó   ˆ S r|   r   r   )Úbuffersr   r   rh   –  ó    z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>c                    r  r|   r   )rr   )Úcolumnr   r   rh   —  r	  r)   c                    r  r|   r   rÎ   )rS   r   r   rh   ˜  r	  )r   r(   r)   r*   rÃ   r
   ÚUINTr   ÚUINT8ÚsetattrrR   rS   r   )Úmonkeypatchr8   Úbuffers_dataÚbuffer_dtyper   )r  r
  rS   r   Ú-test_interchange_from_corrected_buffer_dtypes‡  s    
ür  c                  C   s8   t jdg itd�} |  ¡ }t jj |¡}t | |¡ d S )Nr#   rÁ   )	r   r(   Ústrr)   rR   rS   r   r3   r7   )r8   rˆ   rN   r   r   r   Útest_empty_string_columnœ  s   r  c                  C   sT   t  d¡ tjddgidd�} tjj |  ¡ ¡}tjddgidd�}t 	||¡ d S )Nr<   r#   r“   úlarge_string[pyarrow]rÁ   r  )
rF   rG   r   r(   rR   rS   r   r)   r3   r7   )r8   rN   rO   r   r   r   Útest_large_string¤  s
   
r  c                  C   s4   t jg d¢dd� ¡ } |  ¡  ¡ }|dgksJ ‚d S )N©r   r_   r  r   )rã   Ú0)r   r6   r×   r)   rƒ   )r8   rŠ   r   r   r   Útest_non_str_names­  s   r  c                  C   sf   t  g d¢g d¢dœ¡} |  ¡ }tjtdd�� t jjj|dd� W d   ƒ d S 1 s,w   Y  d S )Nr  ©rÌ   r®   r­   )r  r   a&  Expected a Series, got a DataFrame. This likely happened because you called __dataframe__ on a DataFrame which, after converting column names to string, resulted in duplicated names: Index\(\['0', '0'\], dtype='(str|object)'\). Please rename these columns before using the interchange protocol.r´   FrÎ   )	r   r(   r)   rF   r¶   Ú	TypeErrorrR   rS   r   )r8   ræ   r   r   r   Útest_non_str_names_w_duplicates´  s   ý
"ör  )r   r+   Úexpected_dtyperÓ   ÚInt64Úint64rÔ   ÚInt8rÀ   zInt8[pyarrow]ÚUInt64Úuint64zUInt64[pyarrow])rŒ   ç      @NÚFloat32Úfloat32zFloat32[pyarrow])TFNÚbooleanÚboolzboolean[pyarrow])úmuch adoÚaboutN)Úna_valuerV   zstring[pyarrow]r÷   rá   ztimestamp[ns]ztimestamp[us][pyarrow]ztimestamp[us])Útzinfoz&timestamp[us, Asia/Kathmandu][pyarrow]ú timestamp[us, tz=Asia/Kathmandu]r+   r  c                 C   s¦   t  dd¡}dd lm} |dkr| dd¡}tjd| i|d�}| | ¡ ¡d }|j	|ks/J ‚|d  
¡ | d ks;J ‚|d	  
¡ | d	 ksGJ ‚|d
  
¡ d u sQJ ‚d S ©Nr<   r=   r   r+  rì   rø   r#   rÁ   r   r_   ©rF   rG   rÇ   rS   Ú	timestampr   r(   r   r)   ÚtypeÚas_py©r   r+   r  rK   Úpair8   rN   r   r   r   Ú(test_pandas_nullable_with_missing_valuesÅ  s   1r3  r  )rŒ   r"  g      @)TFF)r'  r(  Únothingr  c                 C   sª   t  dd¡}dd lm} |dkr| dd¡}tjd| i|d�}| | ¡ ¡d }|j	|ks/J ‚|d  
¡ | d ks;J ‚|d	  
¡ | d	 ksGJ ‚|d
  
¡ | d
 ksSJ ‚d S r,  r-  r1  r   r   r   Ú+test_pandas_nullable_without_missing_values  s   4r5  c                  C   sF   t  dd¡ tjddgidd�} |  ¡  d¡ ¡ d }|d u s!J ‚d S )Nr<   r=   r#   r“   r  rÁ   Úvalidity)rF   rG   r   r(   r)   r*   rÃ   )r8   rN   r   r   r   Útest_string_validity_bufferF  s   r7  c                  C   sl   t  dd¡ tjddd gidd�} |  ¡  d¡ ¡ d }|d us"J ‚|d }tjdt	jd	f}||ks4J ‚d S )
Nr<   r=   r#   r“   r  rÁ   r6  r   ú=)
rF   rG   r   r(   r)   r*   rÃ   r
   ÚBOOLr   )r8   r6  rN   rO   r   r   r   Ú&test_string_validity_buffer_no_missingN  s   r:  c                  C   sN   t jdg idd�} |  ¡ }t jjj|dd�}t jdg idd�}t ||¡ d S )Nr#   rÀ   rÁ   FrÎ   )r   r(   r)   rR   rS   r   r3   r7   )r8   ræ   rN   rO   r   r   r   Útest_empty_dataframeY  s
   r;  c                  C   sL   t  dd¡} dddgg d¢gi}|  |¡}t|ƒ}t |¡}t ||¡ d S )Nr<   z14.0.0r#   r   r_   r  )rF   rG   rH   r   r   r(   r3   r7   )rK   r   ÚtblrN   rO   r   r   r   Útest_from_dataframe_list_dtypeb  s   

r=  )rË   N)Er   r   Únumpyr   rF   Úpandas._libs.tslibsr   Úpandas.compatr   r   Úpandas.compat.numpyr   Úpandasr   Úpandas._testingÚ_testingr3   Úpandas.core.interchange.columnr   Ú*pandas.core.interchange.dataframe_protocolr	   r
   Ú&pandas.core.interchange.from_dataframer   Úpandas.core.interchange.utilsr   Úfixturer   r   rû   Úparametrizer;   rP   rU   rY   Úfloatra   r‹   r¥   rI   rª   r«   r³   r¹   r½   ÚskipifrÅ   rÊ   rÒ   rÝ   rç   rö   r  r  r  r  r  r  ÚStringDtyper   Úutcr   r  r3  r5  r7  r:  r;  r=  r   r   r   r   Ú<module>   sZ   




úþ
ûþ
ýýþ

	


	
	ýýýýýùáþ,ÿÿÿþýýý ý ýýùÝþ0ÿÿÿþ

	