o
    _~#gM                     @   s,  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/ddCdDZ0ddEdFZ1dGdH Z2ejdIdJdKgejdLg dMdNdO Z3dPdQ Z4ddRdS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dpdqf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dpdqf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dej:dxgdydzfgde;d{e<d|e<dBdfddZ>dddZ?dddZ@dd ZAd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/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/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_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^   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_   id   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   sB   t dd ddlm} t| }||}t|}t|| d S )Nr<   r=   r   r   )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   zHTo join chunks a copy is required which is forbidden by allow_copy=Falser   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_column3  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_pyarrowH  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_awarek  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   object)
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='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aboutNzstring[pyarrow_numpy]rV   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r1  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+  r/  r   r   r   +test_pandas_nullable_without_missing_values  s   0r3  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_bufferC  s   r5  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   r4  r   =)
rF   rG   r   r(   r)   r*   r   r
   BOOLr   )r8   r4  rN   rO   r   r   r   &test_string_validity_buffer_no_missingK  s   r8  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_dataframeV  s
   r9  )r   N)Br   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  utcr   r  r1  r3  r5  r8  r9  r   r   r   r   <module>   sR   








	


	
	,  ,

