o
    hb                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ	 zd dl
ZW n ey/   dZY nw d dlZd dlm  mZ d dlmZmZmZmZ zd dlmZ d dlZd dlZW n	 eyb   Y nw ejdddd Zdd	d
Zejdddgddd Zejdg dddd Z da!dd Z"dd Z#ej$jdd Z%				dddZ&dddZ'dddZ(ej$j
d d! Z)ej$jd"d# Z*ej$jd$d% Z+ej$jd&d' Z,ej$jd(d) Z-ej$jd*d+ Z.ej$jd,d- Z/ej$jd.d/ Z0ej$jd0d1 Z1ej$jd2d3 Z2d4d5 Z3ej$j
d6d7 Z4ej$jd8d9 Z5ej$jd:d; Z6ej$jd<d= Z7ej$jd>d? Z8ej$jd@dA Z9ej$jdBdC Z:ej$jdDdE Z;ej$jdFdG Z<ej$jdHdI Z=ej$jdJdK Z>ej$jej$j?dLe@dMdNdO ZAej$jdPdQ ZBej$jdRdS ZCej$jdTdU ZDej$jej$jEejFjG dVdWdXdY ZHej$jdZd[ ZIej$j
d\d] ZJej$jd^d_ ZKej$jej$Ld`ej$Ldadbdc ZMej$jddde ZNdfdg ZOej$jdhdi ZPej$jdjdk ZQej$jej$jRej$jSej$jTdldm ZUej$j
dndo ZVdpdq ZWej$jXej$jdrds ZYej$jZej$jdtdu Z[dvdw Z\ej$jdxdy Z]dzd{ Z^d|d} Z_d~d Z`ej$j
eaejbe	cg ddd Zdej$jRdd Zeej$jdd Zfej$jdd ZgdS )    N)read_featherwrite_feather
read_tableFeatherDataset)assert_frame_equalmodule)scopec                 C   s   | d S )Nfeather )base_datadirr
   r
   N/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/test_feather.pydatadir,      r   feather_c                 C   s   t j| dS )Nprefix)tempfilemktempr   r
   r
   r   random_path1   s   r         )r   paramsc                 c   s    | j V  d S N)paramrequestr
   r
   r   version5   s   r   )Nuncompressedlz4zstdc                 c   s8    | j dv rtj| j st| j  d | j V  d S )N)r   r   z is not available)r   paCodecis_availablepytestskipr   r
   r
   r   compression:   s   r%   c                 C   s   g a d S r   )
TEST_FILES)r   r
   r
   r   setup_moduleE   r   r'   c              	   C   s0   t D ]}zt| W q tjy   Y qw d S r   )r&   osremoveerror)r   pathr
   r
   r   teardown_moduleJ   s   r,   c                   C   s:   t tj td W d    d S 1 sw   Y  d S )Ntest_invalid_file)r#   raisesr    ArrowIOErrorr   r
   r
   r
   r   test_file_not_existR   s   
"r0   Fc           	      C   sr   |d u rt  }|d u rd}t| t| ||||d tj|s%tdt|||d}|d u r2| }t	|| d S )Nr   )r%   compression_levelr   file not writtenuse_threads)
r   r&   appendr   r(   r+   exists	Exceptionr   r   )	dfexpectedr+   columnsr4   r   r%   r1   resultr
   r
   r   _check_pandas_roundtripX   s   
r<   c                 C   sT   |d u rt  }t| t| ||d tj|stdt|}|	| s(J d S )Nr%   r2   )
r   r&   r5   r   r(   r+   r6   r7   r   equals)tabler+   r%   r;   r
   r
   r   _check_arrow_roundtripq   s   
r@   c                    s8   d u rt  t  fdd}t|| d S )Nc                      s   t  d d S )Nr   )r   r
   r8   r+   r   r
   r   f   s   z!_assert_error_on_write.<locals>.f)r   r&   r5   r#   r.   )r8   excr+   r   rC   r
   rB   r   _assert_error_on_write~   s
   
rE   c                    s   d d}dd t |D } fddt  d D }t|}t| t|D ]%\}}| d |  |d  d |  f}t||d |d  || d	 q(t| }|	|s[J d S )
Nd   rG      c                 S   s   g | ]}t  qS r
   )r   .0ir
   r
   r   
<listcomp>   s    z test_dataset.<locals>.<listcomp>c                    s&   i | ]}d t | tj d qS )col_r   )strnprandomrandnrI   
num_valuesr
   r   
<dictcomp>   s    z test_dataset.<locals>.<dictcomp>r   r   rA   )
ranger    r?   r&   extend	enumerater   r   r   r>   )r   	num_filespathsdatar?   indexr+   rowsr
   rR   r   test_dataset   s   



 r]   c                 C   sN   i }ddg}d}|D ]}t j|}||||< q
t|}t|| d d S )Nf4f8rG   rA   )rO   rP   rQ   astypepd	DataFramer<   r   rZ   numpy_dtypesrS   dtypevaluesr8   r
   r
   r   test_float_no_nulls   s   
rg   c                 C   s   d}t  }t| tjjdd|d}dd tdD }tj	||}t
||| d t|}||s5J t|dd	}||sBJ t|dd	}t| | d S )
NrF   r   rG   sizec                 S      g | ]}d t | qS rM   rN   rI   r
   r
   r   rL          z#test_read_table.<locals>.<listcomp>rA   F)
memory_map)r   r&   r5   rO   rP   randintrU   r    Tablefrom_arraysr   r   r>   r   r   	to_pandasr   rS   r+   rf   r:   r?   r;   r
   r
   r   test_read_table   s   
rt   c                 C   s   d}t  }t| tjjdd|d}dd tdD }tj	||}t
||| d t|}t| | t|dd	}t| | t|dd	}||sOJ d S )
N)
   ru   r   ru   rh   c                 S   rj   rk   rl   rI   r
   r
   r   rL      rm   z$test_use_threads.<locals>.<listcomp>rA   Fr3   )r   r&   r5   rO   rP   ro   rU   r    rp   rq   r   r   r   rr   r   r>   rs   r
   r
   r   test_use_threads   s   
rv   c                 C   s   d}t  }t| tjjdd|ddk }ddg}g }g }|D ]}tj||}|tj	||d tj
||< || qtj||d	}	t|	 |	 }
t|
| d
 d S )NrG   r   ru   rh      r^   r_   masknamesrA   )r   r&   r5   rO   rP   ro   rQ   r`   r    arraynanr?   r@   rr   r<   )r   rS   r+   	null_maskdtypesexpected_colsarraysnamerf   r?   r8   r
   r
   r   test_float_nulls   s    

r   c           	      C   s   i g }}g d}d}|D ]}t jjdd|d}||||< ||| qt|}t|| d tj	||d}t
| d S )Ni1i2i4i8u1u2u4u8rG   r   rh   rA   rz   )rO   rP   ro   r`   r5   ra   rb   r<   r    r?   r@   )	r   rZ   arrrd   rS   re   rf   r8   r?   r
   r
   r   test_integer_no_nulls   s   

r   c                 C   sR   i }dg}d}|D ]}t jjdd|d}||||< q	t|}t|| d d S )NlonglongrG   r   rh   rA   )rO   rP   ro   r`   ra   rb   r<   rc   r
   r
   r   test_platform_numpy_integers  s   
r   c                 C   s   t  }t| g d}d}g }tjjdd|ddk }g }|D ]$}tjjdd|d}|tj||d |d}	tj	|	|< ||	 qtj
||d	}
t|
 |
 }t|| d
 d S )Nr   rG   r   ru   rh   rw   rx   r_   rz   rA   )r   r&   r5   rO   rP   ro   r    r|   r`   r}   r?   r@   rr   r<   )r   r+   
int_dtypesrS   r   r~   r   r   rf   r9   r?   r8   r
   r
   r   test_integer_with_nulls#  s"   


r   c                 C   s:   d}t jd tdt j|dki}t|| d d S )NrG   r   boolsrA   )rO   rP   seedra   rb   rQ   r<   )r   rS   r8   r
   r
   r   test_boolean_no_nulls?  s   r   c                 C   s   t  }t| d}tjd tjjdd|ddk }tjjdd|ddk }tjtj	||dgdgd	}t
| | }t|| d
 d S )NrG   r   ru   rh   rw   rH   rx   r   rz   rA   )r   r&   r5   rO   rP   r   ro   r    r?   r|   r@   rr   r<   )r   r+   rS   ry   rf   r?   r8   r
   r
   r   test_boolean_nullsI  s   
r   c                 C   s\   t  }t| tddD ]}tjjtjd gtt| t	 dgdgd}t
| qd S )N      )typer   rz   )r   r&   r5   rU   r    rp   rq   r|   listfloat64r@   )r   r+   rK   r?   r
   r
   r   test_buffer_bounds_error\  s   
 
r   c                 C   s6   d}t jjtjg d| tdgdgd}t| d S )NrG   )FNT)re   r   rz   )r    rp   rq   rO   r|   objectr@   )r   repeatsr?   r
   r
   r   test_boolean_object_nullsi  s   r   c                 C   s   t jdkr
td G dd d}tjtddd d| tjgdd	d
gd}t	 }z	t
||| d W n	 ty;   Y nw tj|rDJ d S )Nwin32z/Windows hangs on to file handle for some reasonc                   @      e Zd ZdS )z6test_delete_partial_file_on_error.<locals>.CustomClassN__name__
__module____qualname__r
   r
   r
   r   CustomClassx      r   rH      foobar)numbersstringsr   r   r:   rA   )sysplatformr#   r$   ra   rb   rU   rO   r}   r   r   r7   r(   r+   r6   )r   r   r8   r+   r
   r
   r   !test_delete_partial_file_on_errors  s    

r   c                 C   s   d}dd ddt jg}td|| i}g d}td|| i}t||| d g d}td|| i}td|| i}t||| d d	d ddt jg}td|| i}g d}td|| i}t||| d d S )
N  r   r   quxr   )r   Ns   bars   quxNrA   fooNr   r   Nr   )rO   r}   ra   rb   r<   )r   r   rf   r8   	ex_valuesr9   r
   r
   r   test_strings  s   r   c                 C   s$   t ddgd i}t|| d d S )Nr    ru   rA   ra   rb   r<   r   r8   r
   r
   r   test_empty_strings  s   r   c                 C   sJ   t dd gd i}| dkrtjj r|d}n|}t|| |d d S )Nall_noneru   r   rN   )r   r9   )ra   rb   r    pandas_compat_pandas_apiuses_string_dtyper`   r<   r   r8   r9   r
   r
   r   test_all_none  s
   r   c                 C   s4   t ddd}|j|jdd}t|| d d S )Nr   r   rw   )NNNABcategory)r   rA   )ra   rb   assignr   r`   r<   r   r
   r
   r   test_all_null_category  s   r   c                 C   s.   dd t dD }t|}t|d| d d S )Nc                 S   s   i | ]}d  |dgd qS )zc{}r   ru   )formatrI   r
   r
   r   rT     s    z+test_multithreaded_read.<locals>.<dictcomp>rG   T)r4   r   )rU   ra   rb   r<   )r   rZ   r8   r
   r
   r   test_multithreaded_read  s
   
r   c                 C   s<   t dt jt jd dgd }td|i}t|| d d S )Nr   r   r   ru   r   rA   )rO   r|   r}   ra   rb   r<   )r   rf   r8   r
   r
   r   test_nan_as_null  s   r   c                 C   sj   d}dd ddt jg}td|| i}|d d|d< g d}tdt|| i}t||| d d S )	Nr   r   r   r   r   r   r   rA   )rO   r}   ra   rb   r`   Categoricalr<   )r   r   rf   r8   r9   r
   r
   r   test_category  s   r   c                 C   sB   t dt jdddi}|jjdjd|d< t|| d d S )	Nnaivez
2016-03-28ru   )periodsutczAmerica/Los_Angeleswith_tzrA   )ra   rb   
date_ranger   dttz_localize
tz_convertr<   r   r
   r
   r   test_timestamp  s
   r   c              
   C   sJ   t dt dddd t dddgi}|jjd|d< t|| d d S )Ntesti  r   rw   r   r   rA   )ra   rb   	Timestampr   r   r   r<   r   r
   r
   r   test_timestamp_with_nulls  s   r   znot supported)reasonr.   c                  C   0   t dt dd t dgi} t| dd d S )Nr   1 day3 dayr   rA   ra   rb   	Timedeltar<   r8   r
   r
   r   test_timedelta_with_nulls_v1  s
   r   c                  C   r   )Nr   r   r   r   rA   r   r   r
   r
   r   test_timedelta_with_nulls  s
   r   c                 C   s:   t dt g di}|jjd|d< t|| d d S )Nr   )l    ^cQ)! Nl   6"Ir   r   rA   )ra   rb   DatetimeIndexr   r   r   r<   r   r
   r
   r   (test_out_of_float64_timestamp_with_nulls  s
   r   c                 C   sB   t g dg dd}|}| dkr|jtd}t||| d d S )Nr   r   rw      )TFTF)r   r   r   r   rA   )ra   rb   renamerN   r<   r   r
   r
   r   test_non_string_columns  s   
r   zunicode filenames not supported)r   c                 C   s4   d d}tdg di}t|t|d| d d S )Ns   Besa_Kavajë.featherzutf-8r   r   r   )r+   r   )decodera   rb   r<   r   )r   r   r8   r
   r
   r   test_unicode_filename  s
   

r   c                 C   sB   t g dg dg dd}|ddg }t||| ddgd d S )Nr   )rH            )r   rw   rH   r   )r   boowoor   r   )r   r:   r   r   r
   r
   r   test_read_columns  s   
r   c                 C   st   t  }t| d}tjd tjjdd|d}td|i}t	|| td|d|d  i}t
||d d S )	NrG   r   ru   rh   ints	more_intsr   )r+   )r   r&   r5   rO   rP   r   ro   r    r?   r   r@   )r   r+   rS   rf   r?   r
   r
   r   test_overwritten_file(  s   

r   c                 C   sZ   t  }tjtdddg dd }t||| d |	d t
|}t|| d S )N   r   rw   abcr   rA   r   )ioBytesIOra   rb   rO   arangereshapecopyr   seekr   r   )r   bufr8   r;   r
   r
   r   test_filelike_objects9  s   
r   zignore:Sparse:FutureWarningz(ignore:DataFrame.to_sparse:FutureWarningc                 C   sR   t jjjs
td g dg dd}t|jdd}|	 }t
||| d d S )Nz2version of pandas does not support SparseDataFramer   r   r   )r   r   r   r   r   )
fill_valuerA   )r    r   r   
has_sparser#   r$   ra   rb   	to_sparseto_denser<   )r   rZ   r8   r9   r
   r
   r   test_sparse_dataframeH  s   

r  c                  C   s2   t jtdddtdd } t| t d S )Nr   r   rw   aaar   )	ra   rb   rO   r   r   r   r   rE   
ValueErrorr   r
   r
   r   test_duplicate_columns_pandasV  s   r  c                  C   s>   t jg dg dg dgg dd} t|  t| tdd d S )Nr   r   rH   r   r   r   	   )r   r   r   rz   r   rA   )r    r?   r@   rE   r  )r?   r
   r
   r   test_duplicate_columns`  s   $r  c                  C   sN   G dd d} t d|  |  gi}t|t t dg di}t|t d S )Nc                   @   r   )ztest_unsupported.<locals>.ANr   r
   r
   r
   r   r   m  r   r   r   )r   r   g       @)ra   rb   rE   r  	TypeError)r   r8   r
   r
   r   test_unsupportedg  s
   
r  c                  C   sx   t dtdi} t| }t }t||ddd |	 }tj
t|}|jdks/J t|ddks:J d S )Nr   r      r   	chunksizer   r   r   )ra   rb   rO   r   r    r?   r   r   r   getvalueipc	open_fileBufferReadernum_record_batcheslen	get_batch)r8   r?   r   r;   ipc_filer
   r
   r   test_v2_set_chunksizex  s   
r  c                  C   s   t dtdi} g d}|D ]\}}t| ||d qt }tjt	dd t
| |ddd	 W d    n1 s:w   Y  tjt	d
d t
| |ddd W d    n1 sYw   Y  tjt	dd t
| |dd W d    d S 1 sxw   Y  d S )Nr   r   ))r   N)r   N)r   r   )r   r   )r   r   )r   ru   )r%   r1   z2Feather V1 files do not support compression optionmatchr   r   )r%   r   z0Feather V1 files do not support chunksize optioni   r  z"compression="snappy" not supportedsnappyr=   )ra   rb   rO   r   r<   r   r   r#   r.   r  r   )r8   casesr%   r1   r   r
   r
   r   test_v2_compression_options  s0   
"r  c                  C   s   t jdstd t jtddgdgd} t	 }t
| | | }t	 }t
| |dd | }t|t|k s>J d S )	N	lz4_framez+LZ4 compression support is not built in C++r   i f0rz   r   r=   )r    r!   r"   r#   r$   r?   rO   repeatr   r   r   r  r  )tr   default_resultuncompressed_resultr
   r
   r   test_v2_lz4_default_compression  s   

r%  c                  C   sl   t jt g dg d ggdgd} t }tjtdd t| |dd W d    d S 1 s/w   Y  d S )Nr   r   rz   z[Unsupported Feather V1 type: list<item: int64>. Use V2 format to serialize all Arrow types.r  r   rA   )	r    r?   r|   r   r   r#   r.   r  r   )r?   r   r
   r
   r   test_v1_unsupported_types  s   ""r&  c                 C   s$   t dtdi}t|| d d S )Nr   i rA   )ra   rb   rO   r   r<   r   r
   r
   r   test_large_dataframe  s   r'  c                  C   s   dgdd gd d  } t d| i}t }t||dd tt| }t	|| t
jtdd t|t d	d W d    d S 1 sHw   Y  d S )
N   xi   r   i   byte_colrA   zp'byte_col' exceeds 2GB maximum capacity of a Feather binary column. This restriction may be lifted in the futurer  r   )ra   rb   r   r   r   r   r    r  r  r   r#   r.   r  )rf   r8   r   r;   r
   r
   r   !test_chunked_binary_error_message  s   
"r*  c                 C   s6   t jt g dgdgd}t| d }t|| d S )Nr   r   rz   data.feather)r    r?   r|   rN   r@   )tempdirr   r?   r+   r
   r
   r   test_feather_without_pandas  s   r-  c                 C   s   t jtdddg dd}t|ddg|ddg | d t|d	d
g|ddg | d t|ddg|ddg | d t|dd	g|ddg | d d S )Nr   r   rw   r   r   r   r   )r:   r9   r   r   r   r   r   )ra   rb   rO   r   r   r<   r   r
   r
   r   test_read_column_selection  s    
r.  c                 C   s   t jg dg dg dgg dd}t| d }t|||d t jg dg dg dgg dd}g dg d	fD ]}t||d
}||sHJ q9d S )Nr   r  r	  r   rz   r+  rA   r   r   r   )r   r   r   r   )r    r?   rN   r   r   r>   )r,  r   r?   r+   r9   col_selectionr;   r
   r
   r   %test_read_column_duplicated_selection  s   $r1  c                 C   s   t jg dg dg dgg dd}t| d }t||dd t|}||s*J t|d	dgd
}|jddgks;J tt	 t|ddgd
 W d    d S 1 sTw   Y  d S )Nr   r  r	  r/  rz   r+  r   rA   r   r   r   r   )
r    r?   rN   r   r   r>   column_namesr#   r.   r  )r,  r?   r+   r;   r
   r
   r   #test_read_column_duplicated_in_file  s   $"r3  c                 C   s   t dt jjg dg dgddgdi}t|| d t dt dd	gd
dggi}t|| d t dt dd	gd
dggddgd ggi}t|| d d S )Ncolr   r   f1f2rz   r=   r   r   rw   r   rH   r   )r    r?   StructArrayrq   r@   r|   )r%   r?   r
   r
   r   test_nested_types(  s   
 ,r8  )r   r   r   c                 C   s   t | |d d S )Nr=   )r@   )r?   r%   r
   r
   r   test_roundtrip5  s   r9  c                 C   s0   t dtdi}t| d }||sJ d S )Nr   rH   z)v0.17.0.version.2-compression.lz4.feather)r    r?   rU   r   r>   )r   r9   r;   r
   r
   r   Atest_feather_v017_experimental_compression_backward_compatibility;  s   r:  c                 C   sN   t jdg dig dd}| dkr|jddjtd}n|}t||| d	 d S )
Nr   r   r   )r[   r   T)dropr   rA   )ra   rb   reset_indexr   rN   r<   r   r
   r
   r   test_preserve_index_pandasL  s
   r=  c                 C   s   ddl m } td|d|dgi}t|| d  |d}|d}t| d dd}||d d ks8J ||d d	 ksBJ d S )
Nr   )datetimedatez
1654-01-01z
1920-01-01ztest_resolution.featherT)timestamp_as_objectr   )r>  ra   rb   fromisoformatr   r   )r,  r>  r8   
expected_0
expected_1r;   r
   r
   r   0test_feather_datetime_resolution_arrow_to_pandasX  s   

rD  )r   )NNNFNNN)NN)Nr   )hr   r(   r   r   r#   
hypothesishhypothesis.strategies
strategiesstnumpyrO   ImportErrorpyarrowr    pyarrow.tests.strategiestestspastpyarrow.featherr   r   r   r   pandas.testingr   pandasra   pyarrow.pandas_compatfixturer   r   r   r%   r&   r'   r,   markr0   r<   r@   rE   r]   rg   rt   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   xfailr  r   r   r   r   skipifr+   supports_unicode_filenamesr   r   r   r   filterwarningsr  r  r  r  r  r   r  r   r  r%  r&  slowr'  large_memoryr*  r-  r.  r1  r3  r8  given
all_tablessampled_fromr9  r:  r=  rD  r
   r
   r
   r   <module>   s   

















	

	



	





	









	

%



