o
    ҷh,                     @   s  d dl 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
  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+d/gd0d1 Z)d2d3 Z*d4d5 Z+d6d7 Z,d8d9 Z-e.d:d;d< Z/ejdi d=g igd>d? Z0dNdAdBZ1ejdCdDdEgejdFg dGdHdI Z2dJdK Z3dNdLdMZ4dS )O    )datetimeN)iNaT)is_ci_environmentis_platform_windows)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   U/var/www/html/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_dtype-   s   r9   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>   r?   r@   rA   rB   )r    )pytestimportorskiptablearraydictionary_encoder'   r
   r   r   r&   r1   r5   )paarrrF   exchange_dfresultrC   expectedr   r   r   test_categorical_pyarrowA   s   rN   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;   rJ   float64)rD   rE   rF   rG   rH   r'   r   apiinterchanger
   r&   r   r   r   r1   r5   rI   rJ   rF   rK   rL   rM   r   r   r   test_empty_categorical_pyarrowP   s   rS   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=   rC   large_string)rD   rE   rF   rG   r'   r
   r   r&   r1   r5   TableequalsrQ   rR   r   r   r   test_large_string_pyarrow\   s   rW   )offsetlengthexpected_valuesffffff
@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\   rJ   )rD   rE   rF   slicer'   r
   r   r&   r1   r5   rU   rV   rQ   )	rX   rY   rZ   rI   rJ   rF   rK   rL   rM   r   r   r   test_bitmasks_pyarrowk   s   r_   c                   C      t jdddS )Nr]   id   r   randomdefault_rngintegersr   r   r   r   <lambda>       rf   c                   C   r`   )Nr]   r   ra   rb   r   r   r   r   rf      rg   c                   C   s   t jd S )Nr]   )r   rc   rd   r   r   r   r   rf      s    c                   C   s   t jdddgS )Nr]   TF)r   rc   rd   choicer   r   r   r   rf      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   rc   rd   re   r   r   r   r   rf      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)
   rj   c                    s>   i | ]}d t | d    d  fddtD qS )r7   r]   r   c                    s   g | ]}  qS r   r   ).0_r   r   r   
<listcomp>   s    z-test_dataframe.<locals>.<dictcomp>.<listcomp>)intrange)ro   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)ro   idxrq   r   r   	<genexpr>   s    z!test_dataframe.<locals>.<genexpr>_INTERCHANGE_PROTOCOL_BUFFERS)rt   r   r&   r'   num_columnsnum_rowsr   column_namesr{   tupler
   select_columnsselect_columns_by_namer1   r5   r0   attrs)r   r6   df2indicesnamesrL   rM   r   rv   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< q1  } | d
j|d
 ks]J | dj|d ksiJ | dj|d ksuJ d S )N)      ?g       @g      @g      @        )      ?      @      @g      @r   )r   r   r   r   r   xyzr]   c                    s    i | ]}|j d t dqS )r   )lowhigh)re   len)ro   r7   r6   rngr   r   ry      s     z,test_missing_from_masked.<locals>.<dictcomp>F)sizereplacer   r   r   )r   r&   r   rG   r'   rc   rd   columnsitemsindexrh   aranger   locr(   r+   )r   	dict_nullr7   	num_nullsnull_idxr   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   r6   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   rG   r'   r   r(   r+   )r6   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_datar6   r7   	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!   rn   r   r   znot supported yetmatch)r   r&   r'   r(   rD   raisesNotImplementedErrorr)   r6   r7   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   r1   r5   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   int8)r)   )r   r&   r   r'   r(   r   from_dlpackget_buffersrG   r1   assert_numpy_array_equal)r6   r7   rL   rM   r   r   r    test_categorical_to_numpy_dlpack  s
   r   r!   c                 C   sB   t dd ddlm} t| }||}t|}t|| d S )Nr:   r;   r   r	   )rD   rE   pyarrow.interchanger
   r   r&   r1   r5   )r   pa_from_dataframerM   arrow_dfrL   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   ra   n_legs)r   zHTo join chunks a copy is required which is forbidden by allow_copy=Falser   F
allow_copy)
rD   rE   chunked_arrayrF   r   RuntimeErrorr   rP   rQ   r
   )rI   r   r   rF   r   r   r   test_multi_chunk_pyarrow%  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&   r1   r5   r
   r'   )r   r   tz_datar6   r   r   r   test_datetimetzdtype2  s   r   c           	      C   s   t dd}dd lm} t r!t r!t jj|jdd}| j	
| |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   reasoni  r   r]   zAsia/KathmandurJ   )z2020-01-01 00:00:00+05:45r   z2020-01-02 00:00:00+05:45zdatetime64[us, Asia/Kathmandu])r   r)   )rD   rE   pyarrow.computecomputer   r   markxfailArrowInvalidnode
add_markerrG   r   assume_timezonerF   r'   r
   r   r&   r1   r5   )	requestrI   pcr   rJ   rF   rK   rL   rM   r   r   r   )test_interchange_from_non_pandas_tz_aware=  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 rz   r   r   )buffersr   r   rf   i      z?test_interchange_from_corrected_buffer_dtypes.<locals>.<lambda>c                    r   rz   r   )rp   )columnr   r   rf   j  r   r'   c                    r   rz   r   r   )rQ   r   r   rf   k  r   )r   r&   r'   r(   r   r   UINTr   UINT8setattrrP   rQ   r
   )monkeypatchr6   buffers_databuffer_dtyper   )r   r   rQ   r   -test_interchange_from_corrected_buffer_dtypesZ  s    
r   )r   N)5r   numpyr   rD   pandas._libs.tslibsr   pandas.compatr   r   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   pandas._testing_testingr1   pandas.core.interchange.columnr   *pandas.core.interchange.dataframe_protocolr   r   &pandas.core.interchange.from_dataframer
   pandas.core.interchange.utilsr   fixturer   r   r   parametrizer9   rN   rS   rW   floatr_   r   r   rG   r   r   r   r   r   skip_if_np_ltr   r   r   r   r   r   r   r   r   r   <module>   s    








	

	