U
    c                  	   @   s   d Z ddlZddlZddlZejjdddgddgdd	d
dgdddgdddddgddddgdgdddgddd Zdd Zdd Zdd Z	d d! Z
d"d# Zejd$d%gd&d'd(gd)d* Zejd$d%gd&d'd(gd+d, Zd-d. Zd/d0 ZdS )1ze
A verbatim copy (vendored) of the spec tests.
Taken from https://github.com/data-apis/dataframe-api
    N	test_dataZfoobarZbazZquxab      ?      @      @ffffff"@      %@皙'@            )ABZstr_dataZ
float_dataZint_data)idsc                 C   s   t |  }|| }| }t| |d  }|D ]T}||j}|dksLtt|tsZt||	 |kspt||j
dks0tq0d S )Nr   )listkeys__dataframe__lenget_column_by_name
null_countAssertionError
isinstanceintsizeoffset)r   df_from_dictcolumnsdfdfXZcolumn_sizecolumnr    r$   R/tmp/pip-unpacked-wheel-g7fro6k3/pandas/tests/interchange/test_spec_conformance.pytest_only_one_dtype   s    
r&   c              	   C   s   | dddgdddgdddgd	d
dgdddgdddgd}|  }ddddddd}| D ]`\}}||}|jdks|tt|jtst| dkst|jdkst|j	d |ks\tq\|dj	d dkstd S )Nr   r   r   r      r   r   r	   	   
      TFr    c)r   r   r,   defr         @   )
r   itemsr   r   r   r   r   r   r   dtype)r   r!   r"   r    r#   kindcolXr$   r$   r%   test_mixed_dtypes"   s&    

r7   c                 C   sH   | ddt jdgi}| }|d}|jdks4tt|jtsDtd S )Nr   g      ?g       @r   )mathnanr   r   r   r   r   r   r   r!   r"   r6   r$   r$   r%   test_na_float?   s
    
r;   c              	   C   sH   | ddddgi}|  }|d}tjtdd |j W 5 Q R X d S )Nr   r   r   r   z.*categorical.*)match)r   r   pytestZraises	TypeErrordescribe_categoricalr:   r$   r$   r%   test_noncategoricalG   s
    
r@   c                 C   s^   | ddddddddddg	id	d
}|  d}|j}t|d tsHtt|d tsZtd S )NweekdayMonTueWedThuFriSatSunT)Zis_categoricalZ
is_orderedZis_dictionary)r   r   r?   r   boolr   )r   r!   r6   Zcategoricalr$   r$   r%   test_categoricalO   s    rJ   c                 C   s   | dddgdddgdddgd	}|  }| d
ks:t| d
ksJt| dksZtt| dddgksttt|d t|d kstd S )NTFr   r   r   r
   r   r   )xyzr   rK   rL   rM   )r   r   )rK   rM   )	r   Znum_columnsr   num_rows
num_chunksr   Zcolumn_namesZselect_columnsZselect_columns_by_name)r   r!   r"   r$   r$   r%   test_dataframe[   s    rP   r   n_chunks)r)   r   )   r   )rR   r'   c                 C   sX   |dt t| i}| }t ||}t||ks:ttdd |D | ksTtd S )NrK   c                 s   s   | ]}|  V  qd S N)rN   .0chunkr$   r$   r%   	<genexpr>p   s     z%test_df_get_chunks.<locals>.<genexpr>)r   ranger   
get_chunksr   r   sumr   rQ   r   r!   r"   chunksr$   r$   r%   test_df_get_chunksj   s
    r]   c                 C   s^   |dt t| i}| }t |d|}t||ks@ttdd |D | ksZtd S )NrK   r   c                 s   s   | ]}|  V  qd S rS   )r   rT   r$   r$   r%   rW   y   s     z)test_column_get_chunks.<locals>.<genexpr>)r   rX   r   
get_columnrY   r   r   rZ   r[   r$   r$   r%   test_column_get_chunkss   s
    r_   c                 C   s   | ddgddgd}|  }| D ]$}| dks:t| dks&tq&|djd dksdt|djd dks|td S )Nr   r   r   r	   r   r   )r   Zget_columnsr   r   rO   r^   r4   r:   r$   r$   r%   test_get_columns|   s    r`   c                 C   s   dddg}| d|i}|  }|d}| }|d \}}|jdksJt|jdksXt| \}}	|d dkstt|dkr|d }
tjtj	tj
tjd|
 }t|D ]:\}}||j||
d   j}||kstd| d	qd S )
Nr   r   r   data)          r2   rc   zBuffer at index z	 mismatch)r   r^   Zget_buffersbufsizer   ptrZ__dlpack_device__ctypesc_int8c_int16c_int32c_int64	enumeratefrom_addressvalue)r   Zarrr!   r"   r6   ZbufXZdataBufZ	dataDtypeZdevice_Zbitwidthctypeidxtruthvalr$   r$   r%   test_buffer   s,    

ru   )__doc__rh   r8   r=   markZparametrizer&   r7   r;   r@   rJ   rP   r]   r_   r`   ru   r$   r$   r$   r%   <module>   s.   	


