a
    d(                     @   s^  d dl m Z  d dlZd dlZd dl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 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d.d/ Z$d0d1 Z%d2d3 Z&d4d5 Z'd6d7 Z(e	)d8d9d: Z*ejdi d;g igd<d= Z+dd>d?d@Z,ejdAdBdCgejdDg dEdFdG Z-dHdI Z.dS )J    )datetimeN)iNaT)PandasColumn)ColumnNullType	DtypeKindfrom_dataframec                   C   s.   t jtdd ddt jtdd dddS )NZtestdata   T)orderedF)r
   	unordered)pdCategoricallist r   r   k/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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s8J |jdksFJ |jt	j
dfksZJ | dksjJ |j}|d | d ksJ |d du sJ t|d tsJ t|d jt g d	 t|t|  d S )
NAr      Z
is_orderedZis_dictionaryT
categories)adest)r   	DataFrame__dataframe__get_column_by_namedtyper   ZCATEGORICAL
null_countdescribe_nullr   USE_SENTINELZ
num_chunksZdescribe_categorical
isinstancer   tmZassert_series_equalZ_colZSeriesassert_frame_equalr   )r   r   dfcolZdesc_catr   r   r   test_categorical_dtype(   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/   r0   r1   r2   r3   r4   r5   )r   )pytestimportorskiptablearraydictionary_encoder!   r   r   r   r    r(   r)   )paarrr9   exchange_dfresultr6   expectedr   r   r   test_categorical_pyarrow<   s    rA   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.   r=   float64)r7   r8   r9   r:   r;   r!   r   apiinterchanger   r    r   r   r   r(   r)   r<   r=   r9   r>   r?   r@   r   r   r   test_empty_categorical_pyarrowK   s    rF   c                  C   sv   t dd} ddg}| d| |di}| }t|}tdddgi}t	|| | j
| j||srJ d S )Nr-   r.   r/   r0   r6   Zlarge_string)r7   r8   r9   r:   r!   r   r   r    r(   r)   TableequalsrD   rE   r   r   r   test_large_string_pyarrowW   s    rI   )offsetlengthexpected_valuesffffff
@r    @r      c           	      C   sr   t dd}g d}|d|i| |}| }t|}td|i}t	|| |j
|j||snJ d S )Nr-   r.   )rM   NrN   r=   )r7   r8   r9   slicer!   r   r   r    r(   r)   rG   rH   rD   )	rJ   rK   rL   r<   r=   r9   r>   r?   r@   r   r   r   test_bitmasks_pyarrowf   s    rQ   c                   C   s   t jdddS )NrO   id   r   randomdefault_rngintegersr   r   r   r   <lambda>       rW   c                   C   s   t jdddS )NrO   r   rR   rS   r   r   r   r   rW      rX   c                   C   s   t jd S )NrO   )r   rT   rU   r   r   r   r   rW      rX   c                   C   s   t jdddgS )NrO   TF)r   rT   rU   choicer   r   r   r   rW      rX   c                   C   s>   t tjdddtjdddtjddddS )NrO   il  i4  r         )yearmonthday)r   r   rT   rU   rV   r   r   r   r   rW      s   c                    s   d\  fddt  D t}| }|  ksDJ | ksTJ t| t kspJ d}t	fdd|D }t
||}t
||}t|| t|jd tsJ t|jd tsJ d S )N)
   r[   c                    s>   i | ]6}d t | d    d  fddtD qS )r+   rO   r   c                    s   g | ]
}  qS r   r   ).0_r   r   r   
<listcomp>   rX   z-test_dataframe.<locals>.<dictcomp>.<listcomp>)intrange)r`   iZNCOLSZNROWSr   r   r   
<dictcomp>   s   z"test_dataframe.<locals>.<dictcomp>)r   rO   c                 3   s   | ]}t   | V  qd S )N)r   keys)r`   idxrb   r   r   	<genexpr>   rX   z!test_dataframe.<locals>.<genexpr>Z_INTERCHANGE_PROTOCOL_BUFFERS)re   r   r    r!   Znum_columnsZnum_rowsr   Zcolumn_namesri   tupler   Zselect_columnsZselect_columns_by_namer(   r)   r'   attrs)r   r*   df2indicesnamesr?   r@   r   rg   r   test_dataframe   s     
rq   c                     s   t tg dtg dtg dd   } tjd fdd jD }| D ]6\}} j	j
tt |dd	 }d  j||f< qb  } | d
j|d
 ksJ | dj|d ksJ | dj|d ksJ d S )N)      ?g       @g      @g      @        )      ?      @      @g      @r   )rr   rs   rr   rr   rr   xyzrO   c                    s    i | ]}|j d t dqS )r   )lowhigh)rV   len)r`   r+   r*   rngr   r   rh      rX   z,test_missing_from_masked.<locals>.<dictcomp>F)sizereplacerx   ry   rz   )r   r    r   r:   r!   rT   rU   columnsitemsindexrY   Zaranger}   locr"   r$   )rn   Z	dict_nullr+   Z	num_nullsZnull_idxr   r~   r   test_missing_from_masked   s$    r   )rt   ru   rv   )ffffff"@      %@皙'@)rx   ry   )r   rO   r   )TTFrw   c                 C   s6   t | }| }|jD ]}||jdksJ qd S )Nr   )r   r    r!   r   r"   r$   )r   r*   rn   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)NrO   Nr   rO   )r   r   Nr   Nrw   rO   )r   r    r   r:   r!   r   r"   r$   )r*   rn   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sHJ |jd tjks\J |j	t
jdfkspJ |dd  }| d}| dksJ |jdksJ |jd tjksJ |j	t
jdfksJ d S )Nr    r      r   r      )r   r    r!   r"   r   r$   r#   r   STRINGr%   r   ZUSE_BYTEMASK)r   Ztest_str_datar*   r+   Z	df_slicedr   r   r   test_string   s    r   c                  C   sX   t dg di} |  d}tjtdd |j W d    n1 sJ0    Y  d S )Nr   )r   r_   rr   r   znot supported yetmatch)r   r    r!   r"   r7   raisesNotImplementedErrorr#   r*   r+   r   r   r   test_nonstring_object   s    r   c                  C   s   t dt dt jgi} |  d}| dks8J |jdksFJ |jd t	j
ksZJ |jtjtfksnJ t| t|   d S )Nr   z
2022-01-01rO   r   r   )r   r    	TimestampNaTr!   r"   r   r$   r#   r   ZDATETIMEr%   r   r&   r   r(   r)   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   Zint8)r#   )r   r    r   r!   r"   r   Zfrom_dlpackZget_buffersr:   r(   Zassert_numpy_array_equal)r*   r+   r?   r@   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   )r7   r8   Zpyarrow.interchanger   r   r    r(   r)   )r   Zpa_from_dataframer@   Zarrow_dfr?   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    n1 sn0    Y  d S )Nr-   r.   )rO   rO      )r   r   rR   n_legs)rp   zHTo join chunks a copy is required which is forbidden by allow_copy=Falser   F)Z
allow_copy)
r7   r8   Zchunked_arrayr9   r   RuntimeErrorr   rC   rD   r   )r<   r   rp   r9   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)ZperiodsfreqZts_tz)	r   Z
date_rangeZtz_localizeZas_unitr    r(   r)   r   r!   )r   r   Ztz_datar*   r   r   r   test_datetimetzdtype-  s    r   c                  C   s   t dd} dd lm} | 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   i  r   rO   zAsia/Kathmandur=   )z2020-01-01 00:00:00+05:45r   z2020-01-02 00:00:00+05:45zdatetime64[us, Asia/Kathmandu])r   r#   )r7   r8   Zpyarrow.computeZcomputer:   r   Zassume_timezoner9   r!   r   r   r    r(   r)   )r<   Zpcr=   r9   r>   r?   r@   r   r   r   )test_interchange_from_non_pandas_tz_aware8  s     r   )/r   numpyr   r7   Zpandas._libs.tslibsr   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   Zpandas._testingZ_testingr(   Zpandas.core.interchange.columnr   Z*pandas.core.interchange.dataframe_protocolr   r   Z&pandas.core.interchange.from_dataframer   Zfixturer   r   markZparametrizer,   rA   rF   rI   floatrQ   rq   r   r:   r   r   r   r   r   Zskip_if_np_ltr   r   r   r   r   r   r   r   r   <module>   s   








	
	