o
    ŀg                     @   s   d Z ddlZddlZddlZddlZejdd Zejj	dddgdd	gd
g dg dd
g dg ddgg dddd Z
dd Zdd Zdd Zdd Zdd Zej	ddgg dd d! Zej	ddgg dd"d# Zd$d% Zd&d' ZdS )(ze
A verbatim copy (vendored) of the spec tests.
Taken from https://github.com/data-apis/dataframe-api
    Nc                  C   s   ddd} | S )NFc                 S   s   t | }|r|dS |S )Ncategory)pd	DataFrameastype)dctis_categoricaldf r	   b/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/interchange/test_spec_conformance.pymaker   s   
zdf_from_dict.<locals>.maker)Fr	   )r   r	   r	   r
   df_from_dict   s   
r   	test_datafoobarbazquxabg      ?      @      @gffffff"@g      %@g'@)            )AB)str_data
float_dataint_data)idsc                 C   s   t |  }|| }| }t| |d  }|D ]*}||j}|dks&J t|ts-J || |ks8J ||j	dksBJ qd S )Nr   )
listkeys__dataframe__lenget_column_by_name
null_count
isinstanceintsizeoffset)r   r   columnsr   dfXcolumn_sizecolumnr(   r	   r	   r
   test_only_one_dtype   s   
r1   c                 C   s   | g dg dg dg dg dg dd}|  }ddd	dd
dd}| D ]0\}}||}|jdks8J t|jts@J | dksHJ |jdksOJ |jd |ksXJ q(|djd dkseJ d S )Nr   r   r   )r   r      r   )	   
      )TFT)r    c)r   r   r8   defr   r         r   r8   r   @   )	r%   itemsr'   r(   r)   r*   r+   r,   dtype)r   r   r.   r-   r0   kindcolXr	   r	   r
   test_mixed_dtypes-   s&   

rC   c                 C   sH   | ddt jdgi}| }|d}|jdksJ t|jts"J d S )Nr   g      ?g       @r   )mathnanr%   r'   r(   r)   r*   r   r   r.   rB   r	   r	   r
   test_na_floatJ   s
   
rG   c                 C   s\   | dg di}|  }|d}tjtdd |j W d    d S 1 s'w   Y  d S )Nr   r2   z.*categorical.*)match)r%   r'   pytestraises	TypeErrordescribe_categoricalrF   r	   r	   r
   test_noncategoricalR   s   
"rM   c                 C   sP   | dg didd}|  d}|j}t|d tsJ t|d ts&J d S )Nweekday)	MonTuerO   WedrO   ThuFriSatSunT)r   
is_orderedis_dictionary)r%   r'   rL   r)   bool)r   r   rB   categoricalr	   r	   r
   test_categoricalZ   s   
rZ   c                 C   s   | g dg dg dd}|  }| dksJ | dks"J | dks*J t| g dks6J t|d t|d ksJJ d S )	N)TTF)r   r   r   r   )xyzr   r   )r   r   )r[   r]   )r%   num_columnsnum_rows
num_chunksr#   column_namesselect_columnsselect_columns_by_name)r   r   r.   r	   r	   r
   test_dataframef   s   rd   r+   n_chunks))r5   r   )   r   )rf   r3   c                 C   sX   |dt t| i}| }t ||}t||ksJ tdd |D | ks*J d S )Nr[   c                 s       | ]}|  V  qd S N)r_   .0chunkr	   r	   r
   	<genexpr>{       z%test_df_get_chunks.<locals>.<genexpr>)r#   ranger%   
get_chunksr&   sumr+   re   r   r   r.   chunksr	   r	   r
   test_df_get_chunksu   s
   rs   c                 C   s^   |dt t| i}| }t |d|}t||ks J tdd |D | ks-J d S )Nr[   r   c                 s   rg   rh   )r+   ri   r	   r	   r
   rl      rm   z)test_column_get_chunks.<locals>.<genexpr>)r#   rn   r%   
get_columnro   r&   rp   rq   r	   r	   r
   test_column_get_chunks~   s
   ru   c                 C   s   | ddgddgd}|  }| D ]}| dksJ | dks%J q|djd dks2J |djd dks>J d S )Nr   r   r   r   r   r   )r%   get_columnsr+   r`   rt   r@   rF   r	   r	   r
   test_get_columns   s   rw   c                 C   s   g d}| d|i}|  }|d}| }|d \}}|jdks$J |jdks+J | \}}	|d dks9J |dkrp|d }
tjtjtj	tj
d|
 }t|D ]\}}||j||
d   j}||ksoJ d| d	qRd S d S )
N)r   r   r   r   datar   )          r>   rz   zBuffer at index z	 mismatch)r%   rt   get_buffersbufsizeptr__dlpack_device__ctypesc_int8c_int16c_int32c_int64	enumeratefrom_addressvalue)r   arrr   r.   rB   bufXdataBuf	dataDtypedevice_bitwidthctypeidxtruthvalr	   r	   r
   test_buffer   s0   
	r   )__doc__r   rD   rI   pandasr   fixturer   markparametrizer1   rC   rG   rM   rZ   rd   rs   ru   rw   r   r	   r	   r	   r
   <module>   s6    

	

