a
    PªfÙ  ã                   @   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)ÚpdZ	DataFrameZastype)ÚdctÚis_categoricalÚdf© r   úg/var/www/ai-form-bot/venv/lib/python3.9/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_dataZfooÚbarZbazZqux©ÚaÚb©g      ø?ç      @ç      @©gffffff"@g      %@gš™™™™™'@)é   é   é   é   )ÚAÚB)Zstr_dataZ
float_dataZint_data)Zidsc                 C   sŠ   t |  ¡ ƒ}|| ƒ}| ¡ }t| |d  ƒ}|D ]T}| |¡j}|dksLJ ‚t|tƒsZJ ‚| |¡ ¡ |kspJ ‚| |¡j	dks0J ‚q0d S )Nr   )
ÚlistÚkeysÚ__dataframe__ÚlenÚget_column_by_nameÚ
null_countÚ
isinstanceÚintÚsizeÚoffset)r   r
   Úcolumnsr   ÚdfXZcolumn_sizeÚcolumnr   r   r   r   Útest_only_one_dtype   s    
r'   c                 C   sÎ   | g d¢g d¢g d¢g d¢g d¢g d¢dœƒ}|  ¡ }ddd	dd
ddœ}| ¡ D ]`\}}| |¡}|jdkspJ ‚t|jtƒs€J ‚| ¡ dksJ ‚|jdksžJ ‚|jd |ksPJ ‚qP| d¡jd dksÊJ ‚d S )N©r   r   r   )r   r   é   r   )é	   é
   é   )TFT)r   Ú Úc)r   r   r.   ÚdÚeÚfr   r   é   é   r   r.   r   é@   )	r   Úitemsr   r   r    r!   r"   r#   Údtype)r
   r   r%   r$   r&   ÚkindÚcolXr   r   r   Útest_mixed_dtypes-   s&    úÿ

r9   c                 C   sH   | ddt jdgiƒ}| ¡ }| d¡}|jdks4J ‚t|jtƒsDJ ‚d S )Nr   g      ð?g       @r   )ÚmathÚnanr   r   r   r    r!   ©r
   r   r%   r8   r   r   r   Útest_na_floatJ   s
    
r=   c                 C   sZ   | dg d¢iƒ}|  ¡ }| d¡}tjtdd |j W d   ƒ n1 sL0    Y  d S )Nr   r(   z.*categorical.*)Úmatch)r   r   ÚpytestZraisesÚ	TypeErrorÚdescribe_categoricalr<   r   r   r   Útest_noncategoricalR   s
    
rB   c                 C   sP   | dg d¢idd}|  ¡  d¡}|j}t|d tƒs:J ‚t|d tƒsLJ ‚d S )NÚweekday)	ÚMonÚTuerD   ÚWedrD   ÚThuÚFriÚSatÚSunT)r   Z
is_orderedZis_dictionary)r   r   rA   r    Úbool)r
   r   r8   Zcategoricalr   r   r   Útest_categoricalZ   s    
þrL   c                 C   s˜   | g d¢g d¢g d¢dœƒ}|  ¡ }| ¡ dks4J ‚| ¡ dksDJ ‚| ¡ dksTJ ‚t| ¡ ƒg d¢kslJ ‚t| d¡ ¡ ƒt| d¡ ¡ ƒks”J ‚d S )	N)TTF)r   r   r   r   )ÚxÚyÚzr   r   )r   r   )rM   rO   )r   Znum_columnsÚnum_rowsÚ
num_chunksr   Zcolumn_namesZselect_columnsZselect_columns_by_name)r
   r   r%   r   r   r   Útest_dataframef   s    ÿÿrR   r"   Ún_chunks))r+   r   )é   r   )rT   r)   c                 C   sX   |dt t| ƒƒiƒ}| ¡ }t | |¡ƒ}t|ƒ|ks:J ‚tdd„ |D ƒƒ| ksTJ ‚d S )NrM   c                 s   s   | ]}|  ¡ V  qd S ©N)rP   ©Ú.0Úchunkr   r   r   Ú	<genexpr>{   ó    z%test_df_get_chunks.<locals>.<genexpr>)r   Úranger   Ú
get_chunksr   Úsum©r"   rS   r
   r   r%   Úchunksr   r   r   Útest_df_get_chunksu   s
    r`   c                 C   s^   |dt t| ƒƒiƒ}| ¡ }t | d¡ |¡ƒ}t|ƒ|ks@J ‚tdd„ |D ƒƒ| ksZJ ‚d S )NrM   r   c                 s   s   | ]}|  ¡ V  qd S rU   )r"   rV   r   r   r   rY   „   rZ   z)test_column_get_chunks.<locals>.<genexpr>)r   r[   r   Ú
get_columnr\   r   r]   r^   r   r   r   Útest_column_get_chunks~   s
    rb   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sdJ ‚| d¡jd dks|J ‚d S )Nr   r   r   r   r   r   )r   Zget_columnsr"   rQ   ra   r6   r<   r   r   r   Útest_get_columns‡   s    rc   c                 C   sä   g d¢}| d|iƒ}|  ¡ }| d¡}| ¡ }|d \}}|jdksHJ ‚|jdksVJ ‚| ¡ \}}	|d dksrJ ‚|dkrà|d }
tjtjtj	tj
dœ|
 }t|ƒD ]:\}}| |j||
d   ¡j}||ks¤J d|› d	ƒ‚q¤d S )
N)r   r   éÿÿÿÿr   r   Údatar   )é   é   é    r4   rf   zBuffer at index z	 mismatch)r   ra   Zget_buffersÚbufsizeZptrZ__dlpack_device__ÚctypesZc_int8Zc_int16Zc_int32Zc_int64Ú	enumerateZfrom_addressÚvalue)r
   Zarrr   r%   r8   ZbufXZdataBufZ	dataDtypeZdeviceÚ_ZbitwidthÚctypeÚidxÚtruthÚvalr   r   r   Útest_buffer“   s,    
üûrr   )Ú__doc__rj   r:   r?   Zpandasr   Zfixturer
   ÚmarkZparametrizer'   r9   r=   rB   rL   rR   r`   rb   rc   rr   r   r   r   r   Ú<module>   s4   
ýù	


