U
    k/e!                     @   s  d dl Z d dlZd dlmZ d dlZd dlZ	d dl
m  mZ d dlZedd Zeejedddd Zejde	 d	fe	 d
fe	 dfgejde	 d	fe	 d
fe	 dfe	 dfgejde	 d
ejfe	 dejfe	 dejfgejdddddgejdddddgejdddgdd Zdd Z d d! Z!ejdddgd"d# Z"ejdddgd$d% Z#ejdddgejd&d'gd(d)d*gd+d, Z$ejdddgejd&d'gd(d)d*gd-d. Z%ejj&ejd/e	 e	 e	 gejd0e	 e	 e	 e	 gejd1e	 ejfe	 ejfe	 ejfgejdddgd2d3 Z'ejd0e	 e	 e	 e	 gejdddgd4d5 Z(dS )6    Nc                   C   s$   t jt jB t jB t jB t jB t jB S N)pastZsigned_integer_typesZunsigned_integer_typesZfloating_typesZ	bool_typeZstring_typeZlarge_string_type r   r   S/tmp/pip-unpacked-wheel-seu8352k/pyarrow/tests/interchange/test_interchange_spec.py<lambda>   s    r      sizec                 C   sp   t j| gdgd}| }|dj}|| jks4tt|tsBt|d dksXt|dj	dksltd S )Nanamesr   r   )
patable__dataframe__
get_column
null_countAssertionError
isinstanceintr	   offset)arrr   dfr   r   r   r   test_dtypes*   s    r   zuint, uint_bw          zint, int_bw@   zfloat, float_bw, np_floatunitsmsusnstz zAmerica/New_Yorkz+07:30z-04:30	use_batchFTc
                 C   sp  ddl m }
 dddg}|
ddd|
ddd	|
ddd
g}ttj|| dtj||dtjtj||d|ddddgdddgtj|tj||ddd}|	r| d }| }ddddddd}| D ]R\}}|	|}|j
dkst| dkst|jdks
t|jd |kstq|	djd |ks8t|	djd |ksRt|	djd |ksltd S )Nr   )datetime      r   i              typedtypeTFr
   r#   c)r"   )r
   br0   def         r1   )r%   r   r   arraynp	timestamp
to_batchesr   itemsget_column_by_namer   r   r	   r   r/   )uintZuint_bwr   Zint_bwfloatZfloat_bwnp_floatr   r"   r$   dtr   Zdt_arrr   r   columnscolumnkindcolr   r   r   test_mixed_dtypes6   s2    
"

rF   c                  C   sH   t ddd dgi} |  }|d}|jdks4tt|jtsDtd S )Nr
   g      ?g       @r&   )r   r   r   r=   r   r   r   r   r   r   rE   r   r   r   test_na_floatu   s
    
rH   c               	   C   sJ   t 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   r   r=   pytestZraises	TypeErrordescribe_categoricalrG   r   r   r   test_noncategorical}   s
    
rM   c              	   C   s   dd l }ddddddddd g	}|d|| i}| rF| d }| d}|j}t|d	 t	slt
t|d
 t	s~t
d S )Nr   MonTueWedThuFriSatweekdayZ
is_orderedZis_dictionary)pyarrowr   r8   Zdictionary_encoder;   r   r=   rL   r   boolr   )r$   r   r   r   rE   Zcategoricalr   r   r   test_categorical   s    rW   c                 C   s   t dddgdddgg}t dddgdd	d
gg}t j||gddgd}| r^|  d }| }| dksvt| dkst| r|	 dkstn|	 dkstt
| ddgkstt
|d t
|d kstd S )Nr'         d   ZFlamingoZParrotZCowZHorsezBrittle starsZ	CentipedeZn_legsanimalsr   r      r&   )r&   )r[   )r   chunked_arrayr   combine_chunksr;   r   Znum_columnsr   num_rows
num_chunkslistZcolumn_namesZselect_columnsZselect_columns_by_name)r$   nr
   r   r   r   r   r   test_dataframe   s"    rc   r	   n_chunks)
   r   )   r   )rf   rY   c                 C   sj   t dtt|i}| r&| d }| }t||}t||ksLtt	dd |D |ksftd S )Nxr   c                 s   s   | ]}|  V  qd S r   )r_   .0chunkr   r   r   	<genexpr>   s     z%test_df_get_chunks.<locals>.<genexpr>)
r   r   ra   ranger;   r   
get_chunkslenr   sumr$   r	   rd   r   r   chunksr   r   r   test_df_get_chunks   s    rr   c                 C   sp   t dtt|i}| r&| d }| }t|d|}t||ksRt	t
dd |D |kslt	d S )Nrg   r   c                 s   s   | ]}|  V  qd S r   r   rh   r   r   r   rk      s     z)test_column_get_chunks.<locals>.<genexpr>)r   r   ra   rl   r;   r   r   rm   rn   r   ro   rp   r   r   r   test_column_get_chunks   s    rs   r>   r   zfloat, np_floatc           
      C   s   dddgddgg}t jdddddg|d}ttj|| dtj||dtj||dd}|rn|  d	 }| }| D ]$}	|		 dkst
|	 dks~t
q~|d	jd	 dkst
|djd	 d	kst
|djd	 dkst
d S )
Nr&   r'   r   rX   rY   r.   r,   )r
   r1   r0   r   )r9   r8   r   r   r]   r^   r;   r   Zget_columnsr	   r   r`   r   r/   )
r>   r   r?   r@   r$   r   Z	arr_floatr   r   rE   r   r   r   test_get_columns   s"    rt   c                 C   s  dddg}t dt j|| di}|r2| d }| }|d}| }|d \}}|jdksft|j	dkstt|
 \}	}
|d dkst|	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
   r,   data)r   r   r   r   r   zBuffer at index z	 mismatch)r   r   r8   r;   r   r   Zget_buffersbufsizer   ptrZ__dlpack_device__ctypesc_int8c_int16c_int32c_int64	enumeratefrom_addressvalue)r   r$   r   r   r   rE   bufZdataBufZ	dataDtypeZdevice_Zbitwidthctypeidxtruthvalr   r   r   test_buffer   s0    

r   ))ry   Z
hypothesishZhypothesis.strategiesZ
strategiesstZnumpyr9   rU   r   Zpyarrow.tests.strategiestestsr   rJ   deferredZ	all_typesgivenZarraysr   markZparametrizeZuint8Zuint16Zuint32Zint8Zint16Zint32Zint64Zfloat16Zfloat32Zfloat64rF   rH   rM   rW   rc   rr   rs   Zpandasrt   r   r   r   r   r   <module>   s   







%



   