o
    R
iD                    @   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 d dl	m
Z
m	Z	mZmZmZ d dlZd dlmZ d dlZz!d dlZd dlmZ zejZW n eyY   d dlmZ Y nw W n eyf   dZY nw d dlmZm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&  mZ' d dl!m&  m(Z) d dl*m+Z+ d dl,Z-zd dl,m.Z/ W n	 ey   Y nw zd dl0Z1d dl2mZ3 d	d
l4m5Z5m6Z6 W n	 ey   Y nw ej7j0Z8d	ddZ9					d
ddZ:dddZ;		dddZ<dddZ=G dd dZ>G dd dZ?ej7@dg ddd ZAej7@dg dd d! ZBG d"d# d#ZCG d$d% d%ZDG d&d' d'ZEG d(d) d)ZFG d*d+ d+ZGG d,d- d-ZHd.d/ ZId0d1 ZJG d2d3 d3ZKd4d5 ZLd6d7 ZMej7@d8d9gd:gfd;d< ZNd=d> ZOd?d@ ZPdAdB ZQeRe'Se'jTdCdD ZUdEdF ZVdGdH ZWdIdJ ZXdKdL ZYdMdN ZZdOdP Z[dQdR Z\dSdT Z]dUdV Z^dWdX Z_dYdZ Z`d[d\ Zad]d^ Zbd_d` Zcdadb Zddcdd Zededf Zfdgdh Zgdidj Zhej7@dke-i dlfe-j dmfe-k dnfe-l dofe-m dpfe-n dqfe-o drfe-p dsfe-q dtfe-r dufe-s dvfe-t dwfe-u dxfe-v dyfe-w dyfe-x dzfe-jxd{d|dzfe-y d}fe-ze-ze-l d~fe-{dddfe-|ddfe-|dddfe-}ddfe-~ddfgdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdddZdd Zdd Zdd Zdd Zdd Zdd ZG dd de-jZdddZdd Zdd Zdd ZG dd de-jZddĄ ZddƄ ZddȄ Zddʄ Zdd̄ Zej7@ddddggddф Zddӄ Zej7j0ddՄ Zddׄ Zddل Zddۄ Zdd݄ Zdd߄ Zej7j.dd Zdd Zej7@dg dej7@dddgej7@de	dd	d	e	dd	d	gdd Zdd Zej7jdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zej7jdd Zdd Zej7jdd Zdd ZdS (      N)OrderedDict)datedatetimetime	timedeltatimezone)VisibleDeprecationWarning)get_logical_type_pandas_api)invoke_scriptrandom_asciirands)Version)parquet   )dataframe_with_arraysdataframe_with_listsd   c                 C   s  t i dtj| tjddtj| tjddtj| tjddtj| tjddtj| tjddtj| tjddtj| tj	dd	tj| tj
dd
tj| tjddtj| tjddtj| dkdtjd| dddtjd| dddtjd| dddtjd| dddtjd| dddtjd| ddtjd| ddtjd| dddd t| D d gdd t| d D  d g dg|  d S )!Nuint8dtypeuint16uint32uint64int8int16int32int64float32float64boolr   zdatetime[s]2016-01-01T00:00:00.001datetime64[s]zdatetime[ms]datetime64[ms]zdatetime[us]datetime64[us]zdatetime[ns]datetime64[ns]ztimedelta64[s]ztimedelta64[ms]timedelta64[us]timedelta64[ns]c                 S      g | ]}t |qS  str.0xr)   r)   M/home/ubuntu/.local/lib/python3.10/site-packages/pyarrow/tests/test_pandas.py
<listcomp>\       z%_alltypes_example.<locals>.<listcomp>c                 S   r(   r)   r*   r,   r)   r)   r/   r0   ]   r1       )r&   r'   r+   str_with_nulls	empty_str)pd	DataFramenparanger   r   r   r   r   r   r   r   r   randomrandnrangesizer)   r)   r/   _alltypes_exampleC   sb   	




 
r?   FTc                 C   s   |rt jnt j}|j| |||rdndd}	|	j|d}
|r%|	j|s%J |d u rD| }|jD ]}|| jdkrC|| 	t
jd i||< q.t  tddt tj|
|||rYdnd	d
 W d    d S 1 shw   Y  d S )Nr2   r   )schemapreserve_indexnthreadsuse_threadsobjectignoreelementwise comparison failedequivF)check_dtypecheck_index_type)paRecordBatchTablefrom_pandas	to_pandasr@   equalscolumnsr   replacer8   nanwarningscatch_warningsfilterwarningsDeprecationWarningtmassert_frame_equal)dfexpectedrD   expected_schemarI   r@   rA   as_batchklasstableresultcolr)   r)   r/   _check_pandas_roundtripb   s.   



"rb   c                 C   s^   t j| d|d}|d ur|d u r|}|d ur|j|ksJ tj| | jd}t| | d S )NTrN   typename)	rK   arrayrd   r6   SeriesrO   rf   rX   assert_series_equal)stype_expected_pa_typearrr`   r)   r)   r/   _check_series_roundtrip   s   rn   c                 C   s   t j| d||d}| }t| }|d u r |j| ksJ n|j||B  ks+J |d u rS|d u r9t| }nt|  }d || < |j	dkrS|
tjd i}tjt||dd d S )NT)rN   maskrd   rE   Fcheck_names)rK   rg   rO   r6   isnull
null_countsumrh   copyr   rR   r8   rS   rX   ri   )valuesr[   ro   rd   rm   r`   values_nullsr)   r)   r/   _check_array_roundtrip   s   

rx   c                 C   s(   t j| d|d}| }t||  d S )NTrc   rK   rg   rO   nptassert_array_equal)np_arrayrd   rm   r`   r)   r)   r/   "_check_array_from_pandas_roundtrip   s   r}   c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zej	
d
ddgdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zej	d'd(d) Zd*d+ Zd,d- Zd.d/ Zej	
d0d1d2gd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*ej	
dOe+j,e+j-e+j.e+j/gdPdQ Z0dRdS Z1dTdU Z2dVdW Z3dXdY Z4dZd[ Z5dS )\TestConvertMetadataz9
    Conversion tests for Pandas metadata & indices.
    c                 C   s6   t dg di}tj|}|djdksJ d S )Nr   r   r2      0)r6   r7   rK   rM   rN   fieldrf   selfrZ   r_   r)   r)   r/   test_non_string_columns   s   z+TestConvertMetadata.test_non_string_columnsc                 C   s   t g dg dd}|d}tt tj|}|	dj
dks'J W d    n1 s1w   Y  | }t|jj
|j_
tt t||dd W d    d S 1 sZw   Y  d S )N      ?       @      @)      @      @      @)r   r   r   1Tr[   rA   )r6   r7   	set_indexpytestwarnsUserWarningrK   rM   rN   r   rf   ru   r+   indexrb   )r   rZ   r_   r[   r)   r)   r/   "test_non_string_columns_with_index   s   
"z6TestConvertMetadata.test_non_string_columns_with_indexc                 C   s   t jg dg dg ddddgd}tjj|ddgd}tj|ddg }||s.J tjj|ddgd}tj|ddg }||sIJ d S )Nr   )r   r   r   )r2         r   r   r2   r   r   rQ   )r6   r7   rK   rM   rN   rP   rL   )r   rZ   r_   r[   record_batch_tablerecord_batch_expectedr)   r)   r/   test_from_pandas_with_columns   s   z1TestConvertMetadata.test_from_pandas_with_columnsc                 C   s,   t dg di}dg|j_t|dd d S )Ndatar   aTrA   )r6   r7   rQ   namesrb   r   rZ   r)   r)   r/   %test_column_index_names_are_preserved   s   
z9TestConvertMetadata.test_column_index_names_are_preservedtzNEurope/Brusselsc                 C   s6   t jtjddt jddd|dd}t|dd d S )	Nr   r   z
2021-01-0150D)periodsfreqr   r   Tr   )r6   r7   r8   r:   r;   
date_rangerb   )r   r   rZ   r)   r)   r/    test_column_index_names_datetime   s
   z4TestConvertMetadata.test_column_index_names_datetimec              	   C   s^   t jtdtdggt jtdgtdtdggtdgd}t|dd	 d S )
Nr      r   r2   r   r   )rQ   r   Tr   )r6   r7   decimalDecimal
MultiIndexfrom_productrb   r   r)   r)   r/   $test_column_index_names_with_decimal   s   
z8TestConvertMetadata.test_column_index_names_with_decimalc                 C   s  d}t jdg dit jddd|dd}t jdg d	it dd
d}tj|}tj|}t|jdks8J | }t	
|| t|jt jsKJ t|jddksVJ |jj|ks^J | }t	
|| t|jt jsqJ t|jddks|J |jjd u sJ d S )Nfoor   r   r2   r   r   r      r2   steprf   r   r   r   r      r   r   r   )r6   r7   
RangeIndexrK   rM   rN   lenr@   rO   rX   rY   
isinstancer   r
   get_rangeindex_attributerf   )r   
index_namerZ   df2r_   table_no_index_namer`   result2r)   r)   r/   test_range_index_shortcut   s(   
z-TestConvertMetadata.test_range_index_shortcutc                 C   sh   t jdg dit jdddddd}tjj|d	d
}|jdks!J d|jv s(J | }t	
|| d S )Nr   r   r   r   r2   r   r   r   Tr   )r6   r7   r   rK   rM   rN   num_columnscolumn_namesrO   rX   rY   )r   rZ   r_   restoredr)   r)   r/   $test_range_index_force_serialization  s   z8TestConvertMetadata.test_range_index_force_serializationc                 C   sp   t jtjddddgd}t  tjdd tdd	t	 t
|d
d W d    d S 1 s1w   Y  d S )Nr   r2   r   br   erroractionrF   make_block is deprecatedTr   )r6   r7   r8   r:   r;   rT   rU   simplefilterrV   rW   rb   r   r)   r)   r/   test_rangeindex_doesnt_warn  s   
"z/TestConvertMetadata.test_rangeindex_doesnt_warnc                 C   :   t jddgddgg}t jg d|d}t|dd d S )	NonetwoXYr   r   r2   r   )r   cr   Tr   r6   r   from_arraysr7   rb   r   rQ   rZ   r)   r)   r/   test_multiindex_columns%  s
   z+TestConvertMetadata.test_multiindex_columnsc                 C   sH   t jjddgt ddggddgd}t jg d|d	}t|d
d d S )Nr   r   z
2017-08-01z
2017-08-02level_1level_2r   r   r   Tr   )r6   r   r   DatetimeIndexr7   rb   r   r)   r)   r/   #test_multiindex_columns_with_dtypes,  s   z7TestConvertMetadata.test_multiindex_columns_with_dtypesc                 C   s   t jdgt jdgtdd}t|dd t jdgt jdgtdd}t|dd t jdgt jtdddgddd}t|dd d S )	Nr   r   r   Tr   皙?  rE   )r6   r7   IndexrE   rb   r   r   r)   r)   r/   (test_multiindex_with_column_dtype_object7  s   
z<TestConvertMetadata.test_multiindex_with_column_dtype_objectc                 C   r   )	N   あ   いr   r   r   r   Tr   r   r   r)   r)   r/   test_multiindex_columns_unicodeI  s   z3TestConvertMetadata.test_multiindex_columns_unicodec                 C   s~   t jddgddgg}t jg d|d}t  tjdd td	d
t t	|dd W d    d S 1 s8w   Y  d S )Nr   r   r   r   r   r   r   r   rF   r   Tr   )
r6   r   r   r7   rT   rU   r   rV   rW   rb   r   r)   r)   r/   test_multiindex_doesnt_warnN  s   
"z/TestConvertMetadata.test_multiindex_doesnt_warnc                 C   sN   t jt ddt ddgg}t jt jddgdd|d}t|d d d S )Nr   r2   r   r   re   r   r   )r6   r   r   r   r   r7   rh   rb   )r   
multiindexrZ   r)   r)   r/   test_multiindex_rangeindex]  s
   z.TestConvertMetadata.test_multiindex_rangeindexc                 C   s   t g d}t|dd d S )Nr   Tr   r6   r7   rb   r   r)   r)   r/   test_integer_index_columne  s   z-TestConvertMetadata.test_integer_index_columnc                 C   s(   t jg ddtjgd}t|dd d S )Nr         ?r   Tr   )r6   r7   r8   rS   rb   r   r)   r)   r/   $test_float_column_index_with_missingi  s   z8TestConvertMetadata.test_float_column_index_with_missingz?ignore:The DataFrame has column names of mixed type:UserWarningc                 C   s&   t jg ddd gd}t|dd d S )Nr   Ar   Tr   r   r   r)   r)   r/   %test_string_column_index_with_missingm  s   z9TestConvertMetadata.test_string_column_index_with_missingc                 C   s  t jg dt jjg dg dgd dgdg dd}t r'tjj|dd	}nt	
t tjj|dd	}W d    n1 s?w   Y  |jj}|d
 \}}}}}|d dksYJ |d |d kscJ t ryt|d spJ |d dksxJ n|d d u sJ |d dksJ |d dksJ |d |d ksJ |d \}	}
|	dksJ |d |	ksJ |d d u sJ |
dksJ |d |
ksJ |d |
ksJ d S )N))r   r   @)r2   r   g@)r   r   g?)r   r   r   )r   r2   r   r   r   )r   N__index_level_0__)r   rQ   Tr   rQ   rf   r   
field_namerS   Noner   index_columns)r6   r7   r   r   r
   uses_string_dtyperK   rM   rN   r   r   r   r@   pandas_metadatar8   isnan)r   rZ   tjscol1col2col3idx0r   
idx0_descr	foo_descrr)   r)   r/   test_index_metadata_field_namet  s>   z2TestConvertMetadata.test_index_metadata_field_namec                 C   s   t jg dt jtdddd}tjj|dd}|jj}|d \}|d	 d u s)J |d
 dks1J |d dks9J |d }|d dksEJ |d du sMJ d S )N)r   r   r   )r2   r   r   )r   r   r   defcategoryr   r   Tr   column_indexesrf   pandas_typecategorical
numpy_typer   metadatanum_categoriesr   orderedF)	r6   r7   r   listrK   rM   rN   r@   r   r   rZ   r   r   r  mdr)   r)   r/   test_categorical_column_index  s   
z1TestConvertMetadata.test_categorical_column_indexc                 C   s   t jg dt jtdddd}tjj|dd}|jj}|d \}|d	 dks)J |d	 |d
 ks3J |d t	
 r<dndksAJ |d dksIJ |d }t|dksUJ |d dks]J d S )Nr   r   stringzre   r   Tr   r  rf   r   r  r+   rE   r  unicoder  r   encodingUTF-8)r6   r7   r   r  rK   rM   rN   r@   r   r
   r   r   r	  r)   r)   r/   test_string_column_index  s    
z,TestConvertMetadata.test_string_column_indexunitusnsc                 C   s   i }t tjt dkrd|i}tjg dtjddddd|d}tjj|d	d
}|jj	}|d \}|d d u s;J |d dksCJ |rR|d d| dksQJ n|d dksZJ |d }|d dksfJ d S )N2.0.0r  r   
2017-01-01r   America/New_Yorkstartr   r   r   Tr   r  rf   r  
datetimetzr  datetime64[]r%   r  r   r)   )
r   r6   __version__r7   r   rK   rM   rN   r@   r   )r   r  
ext_kwargsrZ   r   r   r  r
  r)   r)   r/   test_datetimetz_column_index  s*   
z0TestConvertMetadata.test_datetimetz_column_indexc                 C   s4   t dt jddddi}|d}t|dd d S )Nr   r  r   r  r  Tr   )r6   r7   r   r   rb   r   r)   r)   r/   test_datetimetz_row_index  s   
z-TestConvertMetadata.test_datetimetz_row_indexc                 C   sB   t g dg dd}|jd|d< |d}t|dd d S )Nr   r   r   r   r   Tr   )r6   r7   r   astyper   rb   r   r)   r)   r/   test_categorical_row_index  s   
z.TestConvertMetadata.test_categorical_row_indexc                 C   sR   t jddgtdd}tt tj| W d    d S 1 s"w   Y  d S )Nr   r   aar   )	r6   r7   r  r   raises
ValueErrorrK   rM   rN   r   r)   r)   r/   *test_duplicate_column_names_does_not_crash  s   "z>TestConvertMetadata.test_duplicate_column_names_does_not_crashc              	   C   s   ddgddgg}|D ]P}t jj|dgdd}t j|gdg}t j|||g}tt |	  W d    n1 s<w   Y  tt |	  W d    n1 sUw   Y  q
d S )Nr   r   r   Fsafer   )
rK   DictionaryArrayr   rL   rM   from_batchesr   r$  
IndexErrorrO   )r   indicesindsrm   batchr_   r)   r)   r/   #test_dictionary_indices_boundscheck  s   

z7TestConvertMetadata.test_dictionary_indices_boundscheckc                 C   s&   t jddgidgd}t|dd d S )Nr   r   u   うr   Tr   r   r   r)   r)   r/   *test_unicode_with_unicode_column_and_index  s   z>TestConvertMetadata.test_unicode_with_unicode_column_and_indexc              	   C   s   t ddgddgd}ddgddgdd	gfD ]M}t j|td
|_tt tj	
| W d    n1 s7w   Y  | }|jjt|_tt t||dd W d    n1 s_w   Y  qd S )Nr   r2   r   r   r   r      a2r   r   Tr   )r6   r7   r   rE   rQ   r   r   r   rK   rM   rN   ru   rv   r!  r+   rb   )r   rZ   colsr[   r)   r)   r/   test_mixed_column_names  s   z+TestConvertMetadata.test_mixed_column_namesc                 C   s   t dt tj  krt dk rn ntd dg}d }||i}t|}tjj	|dd}|
 }|jd |jd ks@J |jjd |jjd ksNJ |jd |ksWJ d S )	Nr  3.0.0Regression in pandas 2.0.0r   r   Tr   r   )r   r6   r  r   skipencoder7   rK   rM   rN   rO   rv   r   rQ   )r   column_datakeyr   rZ   r   r   r)   r)   r/   test_binary_column_name  s   &

z+TestConvertMetadata.test_binary_column_namec                 C   sN   d}t t|}tjjg d|gddgd}tjd|i|d}t|dd	 d S )
Nr   )r   r   barfoobarsome_numbersr   numbersr   Tr   )r  r<   r6   r   r   r7   rb   )r   num_rowsr@  r   rZ   r)   r)   r/    test_multiindex_duplicate_values+  s   
z4TestConvertMetadata.test_multiindex_duplicate_valuesc                 C   sb   t dddgi}tj|}|jj}d|vsJ |d d }|d dks'J |d	 d
ks/J d S )Nr   s
   some_bytessome_unicodemixedrQ   r   r  bytesr  rE   r6   r7   rK   rM   rN   r@   r   )r   rZ   r_   r   data_columnr)   r)   r/   test_metadata_with_mixed_types7  s   z2TestConvertMetadata.test_metadata_with_mixed_typesc                 C   s\   t jg dg ddg dd}tj|}|jdd}||j  }t	
|| d S )Nr   r   r=  bazr   )r   r   threer   T)ignore_metadata)r6   r7   rK   rM   rN   rO   castr@   remove_metadatarX   rY   )r   rZ   r_   r`   r[   r)   r)   r/   test_ignore_metadata@  s   z(TestConvertMetadata.test_ignore_metadatac                 C   s   t ddgg ddgd gi}ttjdtt dg}tjj||d}|jj	}d|vs2J |d	 d
 }|d dks@J |d dksHJ d S )Nr   r   r2   r   r   r   r   rd   r@   rD  rQ   r   r  zlist[int64]r  rE   )
r6   r7   rK   r@   r   list_r   rM   rN   r   )r   rZ   r@   r_   r   rG  r)   r)   r/   test_list_metadataK  s     z&TestConvertMetadata.test_list_metadatac                 C   sN   t dddddddgi}tj|}|jj}|d d d	 d
ks%J d S )Ndictsr   r2   r   r   r   rQ   r   r  rE   rF  )r   rZ   r_   r   r)   r)   r/   test_struct_metadataU  s   z(TestConvertMetadata.test_struct_metadatac                 C   s   t dtdtd gi}tj|}|jj}d|vs J |d d }|d dks.J |d	 d
ks6J |d dddksAJ d S )Ndecimals394092382910493.12341234678z314292388910493.12343437128rD  rQ   r   r  r   r  rE   r        	precisionscale)	r6   r7   r   r   rK   rM   rN   r@   r   )r   r[   r_   r   rG  r)   r)   r/   test_decimal_metadata[  s   
z)TestConvertMetadata.test_decimal_metadatatypc                 C   s|   t dtdgi}ttjd|dddg}tjj||d}|jj	d d }|d	 d
ks1J |d dddks<J d S )Nr   3.14r   r2   rQ  rR  rQ   r   r  r   r  r[  )
r6   r7   r   r   rK   r@   r   rM   rN   r   )r   r_  rZ   r@   r_   col_metar)   r)   r/   test_decimal_other_bitwidtsj  s   z/TestConvertMetadata.test_decimal_other_bitwidtsc                 C   s   t jg dddt jddddfD ]K}t jg dg d	d
|d}tj|}|d}| }|dg }t	|j
t jr@d |j
_t|| |d}| }t||dg jdd qd S )Nr   r   r   r   re   r  r   r   r   r   r   皙?皙?333333?r   r   r   r   Tdrop)r6   r   r   r7   rK   rM   rN   remove_columnrO   r   r   r   r   rX   rY   reset_index)r   r   rZ   r_   table_subsetr`   r[   table_subset2r)   r)   r/   !test_table_column_subset_metadatax  s&   



z5TestConvertMetadata.test_table_column_subset_metadatac                 C   sv   t ttdttdtdd}tj|	ddg}|
ddg}| }|ddg 	d}t|| d S )Nr   )firstsecondvaluerp  rq  rr  )r6   r7   r  r<   r8   r9   rK   rM   rN   r   selectrO   rX   rY   )r   rZ   r_   subsetr`   r[   r)   r)   r/   'test_to_pandas_column_subset_multiindex  s   

z;TestConvertMetadata.test_to_pandas_column_subset_multiindexc              	   C   s   dgddgd g}g g g g}t dtj|tt dfdtj|tt dfg}tjt| t|	 }tj
|g}| }tj
|}|jj}| }	tt d|fd|fg}
t|	|
 |d ddd dd	d
ddd ddd
gks|J d S )Ntestr   r   c1rQ  c2rQ   rE   zlist[unicode])rf   r   r  r  r  zlist[empty])r   rK   rg   rS  stringrL   r   r  rv   keysrM   r+  rO   rN   r@   r   r6   r7   rX   rY   )r   rw  rx  arraysrbtblrZ   tbl2md2r   r[   r)   r)   r/   test_empty_list_metadata  s>   


z,TestConvertMetadata.test_empty_list_metadatac                 C   s<   t g dg dd}tj|}|jjd d usJ d S )Nr   r   pandas_versionrF  r   r)   r)   r/   test_metadata_pandas_version  s   z0TestConvertMetadata.test_metadata_pandas_versionc                 C   s   i }t tjt dkrddi}tdtj	dddi|i}tj|}|d tj	ddd	}|
d
td|j|}tdtj	ddd	fg}tjj||d}| }|d jd|d< ||fD ]}	|	jjd usnJ |	 }
t|
| qdd S )Nr  r  r  r   
2020-01-01r   r   UTCr   r   rR  )r  )r   r6   r  r7   r   rK   rM   rN   rM  	timestamp
set_columnr   rd   r@   ru   dttz_localizer   rO   rX   rY   )r   r  rZ   r_   new_col
new_table1r@   
new_table2r[   	new_tabler`   r)   r)   r/   test_mismatch_metadata_schema  s0   

z1TestConvertMetadata.test_mismatch_metadata_schema)6__name__
__module____qualname____doc__r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r  r  r  r  r"  r&  r0  r1  r5  r<  rB  rH  rO  rT  rV  r^  rK   	decimal32	decimal64
decimal128
decimal256rb  ro  ru  r  r  r  r)   r)   r)   r/   r~      sl    


)

	

,r~   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.S )/TestConvertPrimitiveTypesz>
    Conversion tests for primitive (e.g. numeric) types.
    c           
      C   s   i }g }dt  fdt  fdt  fg}d}|D ]\}}tj|}||||< |t 	|| qt
|}t |}	t||	d d S )Nf2f4f8r   r\   )rK   float16r   r   r8   r:   r;   r!  appendr   r6   r7   r@   rb   )
r   r   fieldsdtypes
num_valuesnumpy_dtypearrow_dtyperv   rZ   r@   r)   r)   r/   test_float_no_nulls  s   




z-TestConvertPrimitiveTypes.test_float_no_nullsc                 C   s  d}t jjdd|ddk }dt fdt fdt fg}g d	}g }g }g }|D ]-\}}	t j||}
tj	|
d
|d}|
| |
t||	 t j|
|< |
|
 q*tjtt|||d}tj||}|jt|svJ | }t|| d S )Nr   r   
   r=   r   r  r  r  )r  r  r  T)rN   ro   r   )r8   r:   randintrK   r  r   r   r;   r!  rg   r  r   rS   r6   r7   dictziprM   r   r@   rP   rO   rX   rY   )r   r  	null_maskr  r   expected_colsr{  r  rf   r  rv   rm   ex_framer_   r`   r)   r)   r/   test_float_nulls  s0   




z*TestConvertPrimitiveTypes.test_float_nullsc                 C   sp   t dddtjgi}ttjdt ddg}tjj	||dd}|d 
 g d	ks.J t||  d S )
Nr   r   r   TnullableFr@   r)  r   r   r2   N)r6   r7   r8   rS   rK   r@   r   r   rM   rN   	to_pylistrX   rY   rO   r   rZ   r@   r_   r)   r)   r/   test_float_nulls_to_ints#  s
   z2TestConvertPrimitiveTypes.test_float_nulls_to_intsc                 C   s2   t g d}t g d}t||t d d S )N)        r   r   Ng      )FTTNTr[   rd   )r6   rh   rx   rK   bool_r   rj   r[   r)   r)   r/   test_float_nulls_to_boolean+  s   z5TestConvertPrimitiveTypes.test_float_nulls_to_booleanc                 C   sF   t dtjg}tj|dd}|jdksJ t|d  s!J d S )Nr  FrN   r   r   )	r6   rh   r8   rS   rK   rg   rs   r   as_py)r   rj   rm   r)   r)   r/   'test_series_from_pandas_false_respected0  s   zATestConvertPrimitiveTypes.test_series_from_pandas_false_respectedc                 C   s
  t  }g }dt fdt fdt fdt fdt fdt fdt fdt	 fd	t fd
t	 fg
}d}|D ]5\}}t
|}t
jjt|jt
t
jjt|jt
t
jj||d}||||< |t|| q=t|}	t|}
t|	|
d d S )Ni1i2i4i8u1u2u4u8longlong	ulonglongr   r>   r   r  )r   rK   r   r   r   r   r   r   r   r   r8   iinfor:   r  maxminint_r!  r  r   r6   r7   r@   rb   )r   r   r  numpy_dtypesr  r   r  inforv   rZ   r@   r)   r)   r/   test_integer_no_nulls7  s(   


z/TestConvertPrimitiveTypes.test_integer_no_nullsc                 C   sl   t  }g d}|D ]}tjd|d||< q	t|}t| | D ]}t|}|	 |
 ks3J q"d S )N)r  r  r  r  r  r  r  r  byteubyteshortushortintcuintcr  uintr  r     r   )r   r8   r9   r6   r7   rb   rv   rK   rg   r  tolist)r   r   r  r   rZ   np_arrrm   r)   r)   r/   test_all_integer_typesP  s   

z0TestConvertPrimitiveTypes.test_all_integer_typesc                 C   s   g d}|D ]L}dD ]G}t jg d|| d}||d d d fD ]0}|jjr6t|}| | ks5J q tt	 t|}W d    n1 sKw   Y  q q
qd S )Nr  r  r  r  r  r  r  r  z=<>)r   r2   *   r   r2   )
r8   rg   r   isnativerK   r  r  r   r$  NotImplementedError)r   
int_dtypesr  orderr   r  rm   r)   r)   r/   test_integer_byteordera  s   
z0TestConvertPrimitiveTypes.test_integer_byteorderc                 C   s   g d}d}t jjdd|ddk }g }g }|D ]&}t jjdd|d}tj||d}|| |d}	t j|	|< ||	 qtj	t
t|||d	}
tj||}| }t||
 d S )
Nr  r   r   r  r=   r   ro   r  r   )r8   r:   r  rK   rg   r  r!  rS   r6   r7   r  r  rM   r   rO   rX   rY   )r   r  r  r  r  r{  rf   rv   rm   r[   r  r_   r`   r)   r)   r/   test_integer_with_nullso  s$   


z1TestConvertPrimitiveTypes.test_integer_with_nullsc                 C   sF   t jddd}t }tj||d}t|d}||s!J d S )Nr  r   r   rQ  r   )r8   r9   rK   r   rg   r!  rP   )r   rm   target_typer`   r[   r)   r)   r/    test_array_from_pandas_type_cast  s
   z:TestConvertPrimitiveTypes.test_array_from_pandas_type_castc                 C   sV   d}t jd tdt j|dki}tdt }t	|g}t
||d d S )Nr   r   boolsr  )r8   r:   seedr6   r7   r;   rK   r   r  r@   rb   )r   r  rZ   r   r@   r)   r)   r/   test_boolean_no_nulls  s   z/TestConvertPrimitiveTypes.test_boolean_no_nullsc                 C   s   d}t jd t jjdd|ddk }t jjdd|ddk }tj||d}|t}d ||< tdt	 }t
|g}td|i}tj|gdg}	|	j
|sTJ |	 }
t|
| d S )	Nr   r   r  r=   r   r   r  r  )r8   r:   r  r  rK   rg   r!  rE   r   r  r@   r6   r7   rM   r   rP   rO   rX   rY   )r   r  ro   rv   rm   r[   r   r@   r  r_   r`   r)   r)   r/   test_boolean_nulls  s   
z,TestConvertPrimitiveTypes.test_boolean_nullsc                 C   :   t g dd }t g dd }t||t d d S )NTTFTTr2   r   r   r   r   r   r  )r6   rh   rx   rK   r   r  r)   r)   r/   test_boolean_to_int     z-TestConvertPrimitiveTypes.test_boolean_to_intc                 C   st   t jg dd td}t g dd }d}tjtj|d t||t d W d    d S 1 s3w   Y  d S )Nr  r2   r   r  zExpected integer, got boolmatchr  )	r6   rh   rE   r   r$  rK   ArrowTypeErrorrx   r   )r   rj   r[   expected_msgr)   r)   r/   test_boolean_objects_to_int  s   "z5TestConvertPrimitiveTypes.test_boolean_objects_to_intc                 C   r  )N)TTFNTr2   )r   r   r  Nr   r  )r6   rh   rx   rK   r   r  r)   r)   r/   test_boolean_nulls_to_float  r  z5TestConvertPrimitiveTypes.test_boolean_nulls_to_floatc                 C   s(   t jtjdddddgd}t| d S )N)r   r2   r    r   r   r   r   )r6   r7   r8   onesrb   r   r)   r)   r/   test_boolean_multiple_columns  s   z7TestConvertPrimitiveTypes.test_boolean_multiple_columnsc                 C   n   t jd dt dgd td}td|i}tdt|i}tdt }t	|g}t
|||d d S )Nr   g      @r   r   floatsr[   r\   )r8   rg   r   rE   r6   r7   
to_numericrK   r   r@   rb   r   rm   rZ   r[   r   r@   r)   r)   r/   test_float_object_nulls     
z1TestConvertPrimitiveTypes.test_float_object_nullsc              	   C   s   t tjddtjg}t t t t t	 t
 t t g}|D ]?}tj||d}tjg d|d}||s@J t d|i}ttd|g}tjj||dd}|d d|sfJ q'd S )	Nr   r   rQ  )Nr   r2   N	has_nullsFr@   rA   r   )r6   rh   r8   rS   rK   r   r   r   r   r   r   r   r   rg   rP   r7   r@   r   rM   rN   chunk)r   rj   typestyr`   r[   rZ   r@   r)   r)   r/   test_float_with_null_as_integer  s   
z9TestConvertPrimitiveTypes.test_float_with_null_as_integerc                 C   r  )Nr   r   r   r   intsr  )r8   rg   r   rE   r6   r7   r  rK   r   r@   rb   r  r)   r)   r/   test_int_object_nulls  r  z/TestConvertPrimitiveTypes.test_int_object_nullsc                 C   sP   t jg dd td}td|i}tdt }t|g}t	||d d S )N)FNTr   r   r  r  )
r8   rg   rE   r6   r7   rK   r   r  r@   rb   )r   rm   rZ   r   r@   r)   r)   r/   test_boolean_object_nulls  s
   z3TestConvertPrimitiveTypes.test_boolean_object_nullsc                    s8   t jd gtd  fdd}|t  |t  d S )Nr   c                    s4   t j | d}|j| ksJ |d  d u sJ d S )NrQ  r   )rK   rg   rd   r  )r   a2rm   r)   r/   _check_type  s   zJTestConvertPrimitiveTypes.test_all_nulls_cast_numeric.<locals>._check_type)r8   rg   rE   rK   r   r   )r   r  r)   r  r/   test_all_nulls_cast_numeric  s   z5TestConvertPrimitiveTypes.test_all_nulls_cast_numericc                 C   s   t jdt jgt jd}tj|t d}| \}}t|ts!J |dks'J t|ts.J t |s5J tj|t dd}| \}}t|tsLJ |dksRJ |d u sXJ d S )Nr   r   rQ  Trd   rN   )	r8   rg   rS   r  rK   r  r   floatr   )r   rm   r   r.   yr)   r)   r/   test_half_floats_from_numpy  s   z5TestConvertPrimitiveTypes.test_half_floats_from_numpyN)r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r)   r)   r)   r/   r    s0    	
		r  r   r  c                 C   sz   d}t jjdd|ddk }t jjdd|| d}tj||d}| r,|d}d ||< n|}|jd	d
}t j	|| d S Nr   r   r  r=   r   r  r  OTinteger_object_nulls)
r8   r:   r  rK   rg   anyr!  rO   testingassert_equal)r   r  r  rv   rg   r[   r`   r)   r)   r/   &test_array_integer_object_nulls_option  s   

r  c                 C   s   d}t jjdd|ddk }t jjdd|| d}tj||d}| r,|d}d ||< n|}t| |i}tj	
|g| g}|jd	d
}t|| d S r  )r8   r:   r  rK   rg   r  r!  r6   r7   rM   r   rO   rX   rY   )r   r  r  rv   rg   r[   r_   r`   r)   r)   r/   &test_table_integer_object_nulls_option)  s   

r  c                   @   s  e Zd ZdZdd Zdd Zejdg ddd	 Z	d
d Z
dd Zee ejB ejdddd Zdd Zdd Zdd Zdd Zejddg dgdd Zejddd gd!d" Zejd#dd gd$d% Zejd&e e ed'ed(ed)ed*ed'd+ed(d+ed)d+ed*d+g
d,d- Zejd&e e ed'ed(ed)ed*ed'd+ed(d+ed)d+ed*d+g
d.d/ Z d0d1 Z!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+ejdFe e gdGdH Z,dIdJ Z-ejj.e/duo6e0dKe0e/j1  ko4e0dLk n  dMdNdOdP Z2ejdg ddQdR Z3ejdg ddSdT Z4dUdV Z5dS )WTestConvertDateTimeLikeTypeszQ
    Conversion tests for datetime- and timestamp-like types (date64, etc.).
    c                 C   J   t dtjg dddi}tdtd}t|g}t||d d S )N
datetime64)2007-07-13T01:23:34.1234567892006-01-13T12:34:56.4325397842010-08-13T05:46:57.437699912r%   r   r  r  	r6   r7   r8   rg   rK   r   r  r@   rb   r   rZ   r   r@   r)   r)   r/   #test_timestamps_notimezone_no_nullsF     
z@TestConvertDateTimeLikeTypes.test_timestamps_notimezone_no_nullsc                 C   r  )Nr  )r  Nr  r%   r   r  r  r  r  r)   r)   r/    test_timestamps_notimezone_nullsU  r   z=TestConvertDateTimeLikeTypes.test_timestamps_notimezone_nullsr  )rj   msr  r  c                 C   s   t tjt dk r|dkrtd tdtjg dd| ddi}|d j	d	|d< t
| t|d  tdtjg d
d| ddi}|d j	d	|d< t
| d S )Nr  r  z0pandas < 2.0 only supports nanosecond datetime64r  )2007-07-13T01:23:34.1232006-01-13T12:34:56.4322010-08-13T05:46:57.437r  r  r   
US/Easternr  Nr  r  )r   r6   r  r   r8  r7   r8   rg   r  r  rb   rn   )r   r  rZ   r)   r)   r/   test_timestamps_with_timezoned  s"   


z:TestConvertDateTimeLikeTypes.test_timestamps_with_timezonec                 C   s   dd t dD }tdtj|tdi}tj|}t|d 	dtj
s(J | }tdtj|ddi}t|| d S )Nc                 S   s   g | ]}t  t|d  qS ))days)r   todayr   r,   r)   r)   r/   r0     s    zETestConvertDateTimeLikeTypes.test_python_datetime.<locals>.<listcomp>r  r   r   r   r$   )r<   r6   r7   rh   rE   rK   rM   rN   r   r  TimestampArrayrO   rX   rY   )r   
date_arrayrZ   r_   r`   expected_dfr)   r)   r/   test_python_datetime  s   z1TestConvertDateTimeLikeTypes.test_python_datetimec              
   C   sZ   t d}|j|d|dfD ]}tdddddd|dg}td	|i}t| qd S )
Npytzr&  r   r   r     -   tzinfor   )	r   importorskiputcr   FixedOffsetr   r6   r7   rb   )r   r/  r   rv   rZ   r)   r)   r/   %test_python_datetime_with_pytz_tzinfo  s   

zBTestConvertDateTimeLikeTypes.test_python_datetime_with_pytz_tzinfoN)deadlinec              	   C   sL   t |dv rtd tdddddd|dg}td	|i}t|d
d d S )N)zbuild/etc/localtimeFactoryz Localtime timezone not supportedr   r   r  r0  r1  r2  r   FrI   )r+   r   r8  r   r6   r7   rb   )r   r   rv   rZ   r)   r)   r/   'test_python_datetime_with_pytz_timezone  s
   
zDTestConvertDateTimeLikeTypes.test_python_datetime_with_pytz_timezonec           
   	   C   s   t d}ddlm} tdddddd|jd	g}tjd
|i|d}t|dd d}|t|d}|	|d }tdddddd|d	g}tdddddd|d	g}tjd
|i|d}tjd
|i|d}	t||	dd d S )Nr/  r   )r   r   r   r  r0  r1  r2  r   r   Tr   )hours<   r   )
r   r4  r   r   r5  r6   r7   rb   r   r6  )
r   r/  r   rv   rZ   r<  tz_timezonetz_pytz
values_expdf_expr)   r)   r/   )test_python_datetime_with_timezone_tzinfo  s   
zFTestConvertDateTimeLikeTypes.test_python_datetime_with_timezone_tzinfoc                 C   s   G dd dt }|ddddddg}tdtj|tdi}tj|}t|d 	dtj
s1J | }tdtj|ddi}t|d |d< t|| d S )	Nc                   @   s   e Zd ZdZdS )zNTestConvertDateTimeLikeTypes.test_python_datetime_subclass.<locals>.MyDatetimer  N)r  r  r  
nanosecondr)   r)   r)   r/   
MyDatetime  s    rD    r   r   r   r   r$   )r   r6   r7   rh   rE   rK   rM   rN   r   r  r+  rO   to_datetimerX   rY   )r   rD  r,  rZ   r_   r`   r-  r)   r)   r/   test_python_datetime_subclass  s   z:TestConvertDateTimeLikeTypes.test_python_datetime_subclassc                 C   s   G dd dt }|dddg}tdtj|tdi}tj|}t|d 	dtj
s.J | }tdtjt dddgtdi}t|| d S )Nc                   @      e Zd ZdS )zFTestConvertDateTimeLikeTypes.test_python_date_subclass.<locals>.MyDateNr  r  r  r)   r)   r)   r/   MyDate      rJ  rE  r   r   r   r   )r   r6   r7   rh   rE   rK   rM   rN   r   r  Date32ArrayrO   r8   rg   rX   rY   )r   rJ  r,  rZ   r_   r`   r-  r)   r)   r/   test_python_date_subclass  s   z6TestConvertDateTimeLikeTypes.test_python_date_subclassc                 C   sV   t tdddd g}t |g}| }t jj|t  d}||	ds)J d S )N  r  r0  rQ  date32)
rK   rg   r   chunked_arrayrO   ArrayrN   rO  rP   rM  )r   rm   r   rj   arr2r)   r)   r/   test_datetime64_to_date32  s
   z6TestConvertDateTimeLikeTypes.test_datetime64_to_date32ro   )TFFTFFc                 C   s   |rt |}tg d}tjj|t |d}t tdddtdddtdddtdddtdddtdddg}tj||t d}|	|sMJ d S )	N)z2018-05-10T00:00:00z2018-05-11T00:00:00z2018-05-12T00:00:00z2018-05-10T10:24:01z2018-05-11T10:24:01z2018-05-12T10:24:01rd   ro   r   r   r  rZ  r  ro   rd   )
r8   rg   r6   rF  rK   rQ  rN   date64r   rP   )r   ro   rj   rm   r   r[   r)   r)   r/   test_pandas_datetime_to_date64  s   






z;TestConvertDateTimeLikeTypes.test_pandas_datetime_to_date64zcoerce_to_ns,expected_dtype)Fr#   )Tr%   c           
      C   s   t dddd t dddt dddg}tjg ddd	}ttjtd
k r&d}tjg d|d	}t|t|gg}|D ]0}|j|d}|	t
}	|j|	jksQJ t||	 |jd|d}|j|jksfJ t|| q<d S )NrE  r       r2   rY  )
2000-01-01Nz
1970-01-01z
2040-02-26datetime64[D]r   r  r%   coerce_temporal_nanosecondsFdate_as_objectr]  )r   r8   rg   r   r6   r  rK   rP  rO   r!  rE   r   rz   r{   )
r   coerce_to_nsexpected_dtyper   expected_daysr[   objectsobjr`   expected_objr)   r)   r/   test_array_types_date_as_object	  s6   






z<TestConvertDateTimeLikeTypes.test_array_types_date_as_objectzcoerce_to_ns,expected_typec              
   C   s~   t dtdddd tdddtdddgi}tjj|dd	}|jd|d
}| }tj|	||dd tj||dd d S )Nr   rE  r   rX  rY  r2   rY  Fr   r^  Tr:  )
r6   r7   r   rK   rM   rN   rO   rX   rY   r!  )r   r`  expected_typerZ   r_   df_datetime	df_objectr)   r)   r/   !test_table_convert_date_as_object)  s    

z>TestConvertDateTimeLikeTypes.test_table_convert_date_as_object
arrow_typerj   r"  r  r  r  c                 C   s   t dddtdddg}t|}t||}|jddd}d }t|dr.|j	d ur.d}t
d	| }t||| d S )
NrE  r     TFr]  r_  r   r  r  )r   r   r6   rh   rK   rg   rM  rO   hasattrr   r  to_pandas_dtyperX   ri   r!  )r   rk  r   r[   rm   r`   expected_tzrg  r)   r)   r/   &test_array_coerce_temporal_nanoseconds=  s   
zCTestConvertDateTimeLikeTypes.test_array_coerce_temporal_nanosecondsc           	      C   s   t dddtdddg}ttd|g}td|i}tjt|g|d}|j	ddd}d }t
|d	r=|jd ur=d
}td| }t||| d S )NrE  r   rl  r   rR  TFrm  r   r  r  )r   r   rK   r@   r   r6   r7   r_   rg   rO   rn  r   r  ro  rX   rY   r!  )	r   rk  r   r@   r-  r_   	result_dfrp  rg  r)   r)   r/   &test_table_coerce_temporal_nanosecondsO  s   zCTestConvertDateTimeLikeTypes.test_table_coerce_temporal_nanosecondsc              
   C   s   t dtdddd tdddtdddgi}tjj|dd	}tdt }tj|g|jj	d
}|j
|s9J | }t|| d S )Nr   rE  r   rX  rY  r2   rY  Fr   r  )r6   r7   r   rK   rM   rN   r   rO  r@   r  rP   rO   rX   rY   )r   rZ   r_   r   r\   r`   r)   r)   r/   test_date_inferb  s   

z,TestConvertDateTimeLikeTypes.test_date_inferc                 C   sx   t jtdddtdddgdd}ddg}tj|t |d}t jd tdddgdd}tj|dd	}||s:J d S )
NrN  r   r   r[  r   TFr  r  )r8   rg   r   rK   rP   )r   rm   ro   r`   r[   r)   r)   r/   test_date_maskr  s   z+TestConvertDateTimeLikeTypes.test_date_maskc                 C   sh  t jtdddd tdddtdddgtd}t jg ddd}|dd	 }t g d
}t }t }tj||d}tj||d}tj|||d}	tj|||d}
||	s[J ||
sbJ ddg}tj	
||g|}t jg ddd}tjj|d< |d}tj||d|d}|jdd}t|| | }|d}tj||d|d}t|| d S )NrN  r   r   r   r   )kC  r'  lC  mC  r   r    \&)FTFFrQ  rU  rO  rV  )z
2017-04-03
2017-04-04r{  z
2017-04-05r[  r   r#   )rO  rV  r   F)r_  rE   )r8   rg   r   rE   r!  rK   rO  rV  rP   rM   r   r6   NaTrr  r7   rO   rX   rY   )r   rm   arr_i4arr_i8ro   t32t64a32a64a32_expecteda64_expectedcolnamesr_   	ex_valuesex_datetime64msexpected_pandastable_pandastable_pandas_objects
ex_objectsexpected_pandas_objectsr)   r)   r/   test_date_objects_typed{  sV   





z4TestConvertDateTimeLikeTypes.test_date_objects_typedc                 C   s   t tdd }tjtdddtj|gtd}tjtdddd d gtd}tj|dd}tj|dd}||s8J |j	dks?J tjtjgddj
t ksOJ tj|gddj
t ks^J d S )NNArE  r   r   Tr  r2   )getattrr6   r8   rg   r   r|  rE   rK   rP   rs   rd   null)r   pd_NArv   values_with_noner`   r[   r)   r)   r/   test_pandas_null_values  s    "z4TestConvertDateTimeLikeTypes.test_pandas_null_valuesc                 C   s   t  }t  }tjg ddd}|dd }t j||d}t j||d}tddd	}|d
  |ks6J |d
  |ks@J d S )N)rw  rx  ry  r   r   r   rz  rQ  rN  r   r   r   )rK   rO  rV  r8   rg   r!  r   r  )r   t1t2rm   rR  a1r  r[   r)   r)   r/   test_dates_from_integers  s   z5TestConvertDateTimeLikeTypes.test_dates_from_integersc                 C   s  t ddddt ddddg}td}tj|d g td	}t|}|j|ks)J |d
  |d
 ks5J |d  |d ksAJ |d  d u sKJ t	d|i}tj
|}|d
 |saJ tjdd |D dd	}tj|tdd}|d
  |d
 ksJ tj|d tdd}	|	d
  |d
 ksJ tj|d dtdd}
|
d
  |d
 jddksJ tj|d dtdd}|d
  |d
 jd
dksJ d S )Nr   r2   r   L  r   r   r   r  r   r   timesc                 S   r(   r)   _pytime_to_microsr-   vr)   r)   r/   r0     r1   zHTestConvertDateTimeLikeTypes.test_pytime_from_pandas.<locals>.<listcomp>r   rQ    r  r  r"  microsecond@B rj   )r   rK   time64r8   rg   rE   rd   r  r6   r7   rL   rN   rP   r!  time32rR   )r   pytimesr  aobjsparrrZ   r/  rm   r  r  a3a4r)   r)   r/   test_pytime_from_pandas  s8   

 $z4TestConvertDateTimeLikeTypes.test_pytime_from_pandasc                 C   s  t ddddt ddddt dddg}t|d d d g }td	d
 |d d D d g }tdd
 |d d D d g }tjdd
 |D dd}tjdd
 |D dd}tjg dtd}tj||tdd}tj|d |tdd}tj|d d|tdd}	tj|d d|tdd}
g d}tj	|||	|
g|}||f||f|	|f|
|ffD ]\}}|
 }|j|k sJ q|
 }tj||||d|d}t|| d S )Nr   r2   r   r  r   r   r   r   c                 S      g | ]}|j d dqS )r  r  rR   r,   r)   r)   r/   r0         zJTestConvertDateTimeLikeTypes.test_arrow_time_to_pandas.<locals>.<listcomp>c                 S   r  )r   r  r  r,   r)   r)   r/   r0     r  c                 S   r(   r)   r  r  r)   r)   r/   r0     r1   r   r   c                 S   r(   r)   r  r  r)   r)   r/   r0     r1   FFTr  rU  r  r  r  r"  r  rj   )
time64[us]z
time64[ns]
time32[ms]z	time32[s]r   )r   r8   rg   r    rK   r  r!  r  rL   r   rO   rv   allr6   r7   rX   rY   )r   r  r[   expected_ms
expected_srm   r  r  r  r  r  r   r/  expected_valuesresult_pandasrZ   r-  r)   r)   r/   test_arrow_time_to_pandas  sd   




z6TestConvertDateTimeLikeTypes.test_arrow_time_to_pandasc                 C   sl   t jg ddd}t| t jg ddd}t| t jg ddd}t| t jg dd	d}t| d S )
Nr'  r%   r   )z2007-07-13T01:23:34.123456Nz2006-01-13T12:34:56.432539z2010-08-13T05:46:57.437699r$   )r#  Nr$  r%  r#   )z2007-07-13T01:23:34Nz2006-01-13T12:34:56z2010-08-13T05:46:57r"   r8   rg   r}   )r   datetime64_nsdatetime64_usdatetime64_msdatetime64_sr)   r)   r/   test_numpy_datetime64_columns  s    



z:TestConvertDateTimeLikeTypes.test_numpy_datetime64_columnsc                 C   s   t tjt dkrtd tg dtd}ttj	g ddd}|
 }t|| t|g}|
 }t|| d S )Nr  z0pandas >= 2.0 supports non-nanosecond datetime64r   r"  )r  )r   r6   r  r   r8  rK   rg   r  rh   rF  rO   rX   ri   rP  )r   rm   r[   rj   r)   r)   r/   &test_timestamp_to_pandas_coerces_to_ns?  s   
zCTestConvertDateTimeLikeTypes.test_timestamp_to_pandas_coerces_to_nsc              
   C   s.  dD ]}dD ]}t tdddgt j||d}t d|i}d}tjt|d |jdd	 W d    n1 s9w   Y  tjt|d |jdd	 W d    n1 sVw   Y  tjt|d |	djdd	 W d    n1 svw   Y  |jd
dd |jd
dd |	djd
dd qqd S )Nrj   r"  r  )Nr  r   r  r   z'would result in out of bounds timestampr  Tr\  F)r)  r]  )
rK   rg   r   r  r_   r   r$  r%  rO   column)r   r  r   rm   r_   msgr)   r)   r/   &test_timestamp_to_pandas_out_of_boundsL  s*    
zCTestConvertDateTimeLikeTypes.test_timestamp_to_pandas_out_of_boundsc                 C   sN   t dt jg t ddi}| }tdtjg ddi}t	|| d S )Nr   r  rQ  r$   r   )
rK   r_   rP  r  rO   r6   r7   rh   rX   rY   )r   r_   r`   r[   r)   r)   r/   &test_timestamp_to_pandas_empty_chunkedg  s   zCTestConvertDateTimeLikeTypes.test_timestamp_to_pandas_empty_chunkedr   c                 C   s"   t jg ddd}t||d d S )N)
2007-07-13Nz
2006-01-15z
2010-08-19r[  r   rQ  r  )r   r   datetime64_dr)   r)   r/   test_numpy_datetime64_day_unitn  s   
z;TestConvertDateTimeLikeTypes.test_numpy_datetime64_day_unitc                 C   sx   t g d}ttdddtdddtdddg}tjj||d}td tdddd g}tj||s:J d S )NTFTi  r   i  i  r  )	r8   rg   r6   rh   r   rK   rQ  rN   rP   )r   mr   r`   r[   r)   r)   r/   %test_array_from_pandas_date_with_maskx  s   


zBTestConvertDateTimeLikeTypes.test_array_from_pandas_date_with_maskz1.16.0z1.16.1z#Until numpy/numpy#12745 is resolved)reasonc                 C   s*   t dt dt jgi}t|dd d S )Nr   z2012-11-11 00:00:00+01:00Fr:  )r6   r7   	Timestampr|  rb   r   r)   r)   r/   test_fixed_offset_timezone  s   
z7TestConvertDateTimeLikeTypes.test_fixed_offset_timezonec                 C   h   t tjt dk rd}tdtjg dd| ddi}tdt|}t	|g}t
||d d S )	Nr  r  timedelta64)r   l     qa    @B1timedelta64[r  r   r  r   r6   r  r7   r8   rg   rK   r   durationr@   rb   r   r  rZ   r   r@   r)   r)   r/   test_timedeltas_no_nulls     

z5TestConvertDateTimeLikeTypes.test_timedeltas_no_nullsc                 C   r  )	Nr  r  r  )r   Nr  r  r  r   r  r  r  r)   r)   r/   test_timedeltas_nulls  r  z2TestConvertDateTimeLikeTypes.test_timedeltas_nullsc              
   C   sN   ddl m} tdd |dddddgi}tdt fg}t||d d S )	Nr   )
DateOffsetdate_offseti  r   iX  )r)  monthsmicrosecondsnanosecondsr  )pandas.tseries.offsetsr  r6   r7   rK   r@   month_day_nano_intervalrb   )r   r  rZ   r@   r)   r)   r/   test_month_day_nano_interval  s   
z9TestConvertDateTimeLikeTypes.test_month_day_nano_interval)6r  r  r  r  r  r!  r   r  r  r(  r.  r7  hgivenstnonepast	timezonessettingsr;  rB  rG  rM  rS  rW  rf  rj  rK   rO  rV  r  rq  rs  ru  rv  r  r  r  r  r  r  r  r  r  r  r  skipifr8   r   r  r  r  r  r  r)   r)   r)   r/   r  A  s    









	1%0!
	


r  c                   @   s  e Zd Zdd Zdd Zejjdd Zejjej	ddd	gd
d Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zej	d$e e e gd%d& Zej	d$e e e gd'd( Zd)d* Zd+d, Zd-d. Zd/S )0TestConvertStringLikeTypesc                 C   s~   d}dd ddt jg}td|| i}tdt rt nt	 }t
|g}g d}td|| i}t|||d d S )Nr  r   r=     mañanastrings)r   Nr=  r  Nr  )r8   rS   r6   r7   rK   r   r
   r   large_stringry  r@   rb   )r   repeatsrv   rZ   r   r@   r  r[   r)   r)   r/   test_pandas_unicode  s   z.TestConvertStringLikeTypes.test_pandas_unicodec                 C   sj   ddd t ddtjg}td|i}tj|}|d jt	 ks#J g d}td|i}t
|| d S )Nqux   foo   barzr  r   )   quxr  Nr  r  N)	bytearrayr8   rS   r6   r7   rK   rM   rN   rd   binaryrb   )r   rv   rZ   r_   values2r[   r)   r)   r/   test_bytes_to_binary  s   z/TestConvertStringLikeTypes.test_bytes_to_binaryc                 C   s   dd }dd }t d|gd |g dgd  i}t|d }t|tjs)J |jdks0J d }tj|}|d jdksAJ d S )	N   x kr     r.   r2   r   )	r6   r7   rK   rg   r   ChunkedArray
num_chunksrM   rN   )r   v1v2rZ   rm   r_   r)   r)   r/   test_bytes_exceed_2gb  s   z0TestConvertStringLikeTypes.test_bytes_exceed_2gbcharr.   r  c                 C   s   |d }|d }t d|ggd |gg dgg i}tj|d dd}|jdd t|tjs2J |jd	ks9J t|	d
dksDJ t|	ddksOJ d S )Nr  r  r  r  r  Tr  fullr2   r      r   )
r6   r7   rK   rg   validater   r  r  r   r  )r   r  r  r  rZ   rm   r)   r)   r/   +test_auto_chunking_pandas_series_of_strings  s   zFTestConvertStringLikeTypes.test_auto_chunking_pandas_series_of_stringsc                 C   s   dd t dd d dg}td|i}ttdtdg}tjj||d}|jd j	|d j	ks3J |jd j
|d j
ks@J | }t|| d S )Nr     bar   heyr  r   rR  r   )r  r6   r7   rK   r@   r   r  rM   rN   rd   rf   rO   rX   rY   )r   rv   rZ   r@   r_   r`   r)   r)   r/   test_fixed_size_bytes  s   z0TestConvertStringLikeTypes.test_fixed_size_bytesc                 C   sr   g d}t d|i}ttdtdg}ttj tj	j
||d W d    d S 1 s2w   Y  d S )N)r  Ns   baNNr  r  r   rR  )r6   r7   rK   r@   r   r  r   r$  ArrowInvalidrM   rN   )r   rv   rZ   r@   r)   r)   r/   5test_fixed_size_bytes_does_not_accept_varying_lengths  s   "zPTestConvertStringLikeTypes.test_fixed_size_bytes_does_not_accept_varying_lengthsc                 C   s"   t g d}t|t d d S )N   123    r2  Nrk   )r6   rh   rn   rK   r  r   rj   r)   r)   r/   test_variable_size_bytes  s   z3TestConvertStringLikeTypes.test_variable_size_bytesc                 C   sB   t tdtdtdd g}t|t d t|t d d S )Nr  r	  r2  r
  rl   )r6   rh   r  rn   rK   r  r  r)   r)   r/   test_binary_from_bytearray  s
   z5TestConvertStringLikeTypes.test_binary_from_bytearrayc                 C   L   t g d}t|t d t d|i}t|tdt fgd d S Nr  r
  r   rR  )r6   rh   rn   rK   large_binaryr7   rb   r@   r   rj   rZ   r)   r)   r/   test_large_binary     
z,TestConvertStringLikeTypes.test_large_binaryc                 C   r  N)123r3   r   Nr
  r   rR  )r6   rh   rn   rK   r  r7   rb   r@   r  r)   r)   r/   test_large_string&  r  z,TestConvertStringLikeTypes.test_large_stringc                 C   r  r  )r6   rh   rn   rK   binary_viewr7   rb   r@   r  r)   r)   r/   test_binary_view-  r  z+TestConvertStringLikeTypes.test_binary_viewc                 C   r  r  )r6   rh   rn   rK   string_viewr7   rb   r@   r  r)   r)   r/   test_string_view4  r  z+TestConvertStringLikeTypes.test_string_viewc           
      C   s   g d}t d|i}tdt }t|g}tjj||d}|jdd}t d|i}t	j
||dd |jdd}t dt |i}	t	j
||	dd d S )Nr3   r3   r3   r3   r3   r  rR  Fstrings_to_categoricalTr:  )r6   r7   rK   r   ry  r@   rM   rN   rO   rX   rY   Categorical)
r   rv   rZ   r   r@   r_   result1	expected1r   	expected2r)   r)   r/   test_table_empty_str;  s   z/TestConvertStringLikeTypes.test_table_empty_strc                 C   s   g d}t d|i}tdt }t|g}tjj||d}t d|i}t dt |i}|j	dgd}t
j||dd |j	g d}	t
j|	|dd |j	dd}
t
j|
|dd |j	t d}t
j||dd d S )Nr  r  rR  
categoriesTr:  )r  )r6   r7   rK   r   ry  r@   rM   rN   r  rO   rX   rY   tuple)r   rv   rZ   r   r@   r_   expected_strexpected_catr   r   result3result4r)   r)   r/   test_selective_categoricalsJ  s   z6TestConvertStringLikeTypes.test_selective_categoricalsc                 C   s8   t jg t  d}t jj|gdgd}|jdgd d S )NrQ  ra   r{  r   r$  )rK   rg   r   rM   r   rO   )r   rg   r_   r)   r)   r/   &test_to_pandas_categorical_zero_length\  s   zATestConvertStringLikeTypes.test_to_pandas_categorical_zero_lengthc                 C   sJ   t g d }t jj|gdgd}|jdgd}| |s#J d S )N)r   r   r   r=  ra   r,  r$  )rK   rg   dictionary_encoderM   r   rO   rP   )r   rg   r_   r`   r)   r)   r/   ,test_to_pandas_categories_already_dictionaryc  s   zGTestConvertStringLikeTypes.test_to_pandas_categories_already_dictionarystring_typec           	      C   s  g d}t d|i}td|}t|g}tjj||d}|jdd}t dt |i}t	j
||dd ttj |jddd W d    n1 sOw   Y  |d jdd}t jt |dd}t	|| ttj |d jddd W d    d S 1 sw   Y  d S )	N)r   r   r   r   r   r  rR  Tr  r:  r  zero_copy_onlyre   )r6   r7   rK   r   r@   rM   rN   rO   r  rX   rY   r   r$  r  rh   ri   	r   r0  rv   rZ   r   r@   r_   r`   r[   r)   r)   r/   (test_table_str_to_categorical_without_naj  s*   
"zCTestConvertStringLikeTypes.test_table_str_to_categorical_without_nac           	      C   s"  d ddt jg}td|i}td|}t|g}tjj||d}|j	dd}tdt
|i}tj||dd ttj |j	ddd W d    n1 sRw   Y  |d j	dd}tjt
|dd	}t|| ttj |d j	ddd W d    d S 1 sw   Y  d S )
Nr   r   r  rR  Tr  r:  r1  re   )r8   rS   r6   r7   rK   r   r@   rM   rN   rO   r  rX   rY   r   r$  r  rh   ri   r3  r)   r)   r/   %test_table_str_to_categorical_with_na  s*   
"z@TestConvertStringLikeTypes.test_table_str_to_categorical_with_nac                 C   s2   t tjdgtdt  }|jt  ksJ d S )Nr  r   )rK   rg   r8   rE   ry  rd   )r   	convertedr)   r)   r/   test_array_of_bytes_to_strings  s   z9TestConvertStringLikeTypes.test_array_of_bytes_to_stringsc                 C   sT   t jtjjdd ttjdgtdt  W d    d S 1 s#w   Y  d S )Nzwas not a utf8 stringr  s   r   )	r   r$  rK   libr  rg   r8   rE   ry  r   r)   r)   r/   'test_array_of_bytes_to_strings_bad_data  s   "zBTestConvertStringLikeTypes.test_array_of_bytes_to_strings_bad_datac                 C   sL  t jg ddd}tj|tdd}tjt|tdd}||s&J t g d}tj|td|d}tjg dtdd}||sKJ tjtjj	d	d
 t jg ddd}tj|tdd W d    n1 srw   Y  tjtjj	dd
 t jg ddd}tj|tdd W d    d S 1 sw   Y  d S )N)r  r     bazz|S3r   r   rQ  FTFrT  )r  Nr;  z)Got bytestring of length 3 \(expected 4\)r  r   z*Got bytestring of length 12 \(expected 3\)z|U3)
r8   rg   rK   r  r  rP   r   r$  r8  r  )r   rm   r6  r[   ro   r)   r)   r/   ,test_numpy_string_array_to_fixed_size_binary  s*   
"zGTestConvertStringLikeTypes.test_numpy_string_array_to_fixed_size_binaryN) r  r  r  r  r  r   r  large_memoryr  r  r  r  r  r  r  r  r  r  r  r#  r+  r-  r/  rK   ry  r  r  r4  r5  r7  r:  r=  r)   r)   r)   r/   r    s>    



r  c                   @   s,  e Zd ZdZededgZededgZededgZe	j
de	jeed	d
dde	jeedddde	jeeddddgdd Ze	j
de	jedde	jedde	jeddgdd Zdd Zdd Zdd Zdd Zd d! Ze	j
d"ejejejejgd#d$ Zd%S )&TestConvertDecimalTypesz,
    Conversion test for decimal types.
    z	-1234.123z1234.439z-129934.123331z129534.123731rX  z-314292388910493.12343437128)rv   rg  r   r   r  idr  r   r  rY  rZ  r  c                 C   sR   t d|i}tjj|dd}td|}tj|g|jjd}|j|s'J d S )NrW  Fr   rt  )	r6   r7   rK   rM   rN   r   r@   r  rP   )r   rv   rg  r[   r_   r   r\   r)   r)   r/   test_decimal_from_pandas  s
   z0TestConvertDecimalTypes.test_decimal_from_pandasrv   c                 C   s2   t d|i}tj|}| }t|| d S )NrW  )r6   r7   rK   rM   rN   rO   rX   rY   )r   rv   r[   r6  rZ   r)   r)   r/   test_decimal_to_pandas  s   z.TestConvertDecimalTypes.test_decimal_to_pandasc                 C   s   t dg}tdd}ttj tj||d W d    n1 s$w   Y  t dg}tdd}ttj tj||d W d    d S 1 sNw   Y  d S )Nz1.234r  r2   rQ  z1.2345r   )r   r   rK   r  r   r$  r  rg   )r   data1type1data2type2r)   r)   r/   "test_decimal_fails_with_truncation  s   "z:TestConvertDecimalTypes.test_decimal_fails_with_truncationc                 C   s   t dt dg}t|}t|}| |ksJ |jtddks'J tj|tddd}t dt dg}| |ksDJ d S )	Nz0.01z0.001r   r  r   rQ  z0.01000z0.00100)	r   r   r6   rh   rK   rg   r  rd   r  )r   r   seriesrg   r[   r)   r)   r/   &test_decimal_with_different_precisions  s   

z>TestConvertDecimalTypes.test_decimal_with_different_precisionsc                 C   sP   t tdd g}t|tddd t d gd }t|tddd d S )Nr`  r  r   r
  r2   r6   rh   r   r   rn   rK   r  r   rI  r)   r)   r/   $test_decimal_with_None_explicit_type	  s   z<TestConvertDecimalTypes.test_decimal_with_None_explicit_typec                 C   s,   t tdd g}t|tddd d S )Nr`  r   r2   r  rK  rL  r)   r)   r/   !test_decimal_with_None_infer_type  s   z9TestConvertDecimalTypes.test_decimal_with_None_infer_typec                 C   s0   ddidt did}tj|}t| d S )Nr   r   z0.0r   )r   r   r6   r7   	from_dictrb   )r   tmpdirr   rZ   r)   r)   r/   test_strided_objects  s
   z,TestConvertDecimalTypes.test_strided_objectsr_  c                 C   sD   t dd g}tj||ddd}| }t|}t|| d S )Nr`  r   r2   rQ  )	r   r   rK   rg   rO   r6   rh   rX   ri   )r   r_  r   rm   r`   r[   r)   r)   r/   test_decimal_array_to_pandas   s
   
z4TestConvertDecimalTypes.test_decimal_array_to_pandasN)r  r  r  r  r   r   r  r  r  r   r  r  paramrK   rB  rC  rH  rJ  rM  rN  rQ  r  rR  r)   r)   r)   r/   r?    sF    
	
r?  c                
   @   s&  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zejd,ejd-d.gd/gd0gd0d/gd0gfejd1d2gd3gd0gd0d3gd0gfejd0d0gd0gd0gd0d0gd0gfgd4d5 Z d6d7 Z!d8d9 Z"d:d; Z#d<d= Z$d>d? Z%ejj&d@dA Z'dBdC Z(dDdE Z)dFdG Z*dHdI Z+dJdK Z,dLdM Z-ejdNej.ej/gdOdP Z0ejdNej.ej/gdQdR Z1ejdNej.ej/gdSdT Z2ejdNej.ej/gdUdV Z3ejdNej.ej/gdWdX Z4d0S )YTestConvertListTypesz,
    Conversion tests for list<> types.
    c                 C   t   t  \}}t|||d tjj||dd}||jj}|j|s$J |j	D ]}|
|}t|| |jd q'd S Nr@   r\   Fr  rQ  )r   rb   rK   rM   rN   with_metadatar@   r  rP   rQ   r   rx   rd   r   rZ   r@   r_   r\   r  r   r)   r)   r/   test_column_of_arrays3     


z*TestConvertListTypes.test_column_of_arraysc                 C   s   d}t jt jd|dt jd|dd t jd|dgtd}tt }tj||d}|d  tt	dks8J |d  tt	dksFJ |d  d u sPJ |d	  dgks[J d S )
Nr  r  r   r   r   rQ  r   r2   r   )
r8   rg   r9   rE   rK   rS  r   r  r  r<   )r   r   rm   rk   r  r)   r)   r/   test_column_of_arrays_to_py@  s   z0TestConvertListTypes.test_column_of_arrays_to_pyc                 C   s   t jddgdggt t  d}t jj|gdgd}| }tdddgdggi}t	
|| |d  }t	jt||d dd d S )NTFrQ  r   r   r   rp   )rK   rg   rS  r  rM   r   rO   r6   r7   rX   rY   ri   rh   )r   rg   r_   rZ   r-  rj   r)   r)   r/   test_column_of_boolean_listQ  s   "z0TestConvertListTypes.test_column_of_boolean_listc                 C   s   t jtdtdgtdggt t ddd}t jj|gdgd}| }t	
dtdtdgtdggi}t|| d S )	Nr   r3  z3.3r2   r   rQ  r   r   )rK   rg   r   r   rS  r  rM   r   rO   r6   r7   rX   rY   )r   rg   r_   rZ   r-  r)   r)   r/   test_column_of_decimal_list]  s   

z0TestConvertListTypes.test_column_of_decimal_listc              	   C   s   t tjtjtjgtd}tt t	t t
tddgfD ]6}tj||d}tjd d g|d}||s>J tt tj|j|d W d    n1 sVw   Y  q%d S )Nr   f0r   rQ  )r6   rh   r8   rg   rS   rE   rK   rS  r   
large_liststructr   rP   r   r$  	TypeErrorrv   )r   rj   r  r`   r[   r)   r)   r/   +test_nested_types_from_ndarray_null_entriesi  s   z@TestConvertListTypes.test_nested_types_from_ndarray_null_entriesc                 C   rU  rV  )r   rb   rK   rM   rN   rX  r@   r  rP   rQ   r   rx   rd   rY  r)   r)   r/   test_column_of_listsw  r[  z)TestConvertListTypes.test_column_of_listsc                 C   sT   g g dg dg dgg}t dd |D }t|}t | }t|| d S )NrP  )r   r   r   r   r2   c                 S   s   g | ]	}t j|td qS )r   )r8   rg   r  )r-   rj   r)   r)   r/   r0         zITestConvertListTypes.test_column_of_lists_first_empty.<locals>.<listcomp>)r6   rh   rK   rg   rO   rX   ri   )r   	num_listsrI  rm   r`   r)   r)   r/    test_column_of_lists_first_empty  s
   
z5TestConvertListTypes.test_column_of_lists_first_emptyc                 C   s   t dtjddgd ddgddgddgd	d
ggtdi}ttdtt	 g}tj
j|d d |d}tj
j|dd  |d}t||g}| }t|| d S )Nlistsr   r2   r   r   r   r   r   r   	   r   rR  )r6   r7   r8   rg   rE   rK   r@   r   rS  r   rM   rN   concat_tablesrO   rX   rY   )r   rZ   r@   r  r  r_   r`   r)   r)   r/   test_column_of_lists_chunked  s(   z1TestConvertListTypes.test_column_of_lists_chunkedc              	   C   s^   t dtjg tdi}ttdtt	 g}tj
j||d}| }t|| d S )Nrh  r   rR  )r6   r7   r8   rg   rE   rK   r@   r   rS  r   rM   rN   rO   rX   rY   )r   rZ   r@   r_   r`   r)   r)   r/   "test_empty_column_of_lists_chunked  s   z7TestConvertListTypes.test_empty_column_of_lists_chunkedc           
   	   C   s   ddgddgddgddgd	d
gddgddgddgg}ddgddgg}t |}t |}t jj|gdgd}t jj|gdgd}t ||g}| }td|| i}	t	||	 d S )Nr   r   r2   r   r   r   r   r   r  rZ  r                 r   ri        r   r   )
rK   rg   rM   r   rj  rO   r6   r7   rX   rY   )
r   rD  rF  r  r  r  r  concatenatedr`   r[   r)   r)   r/   test_column_of_lists_chunked2  s   

z2TestConvertListTypes.test_column_of_lists_chunked2c                 C   sP   t  \}}tj|gd dd}|d jd d d }|jd dks"J t| d S )Nr   T)ignore_indexr   r   r   r   )r   r6   concatrv   stridesrx   )r   rZ   r@   rm   r)   r)   r/   test_column_of_lists_strided  s
   
z1TestConvertListTypes.test_column_of_lists_stridedc                 C   s   t jd d gd gtd}t|}tt|}||sJ |jtt ks*J t jd d d d gt jd d gtdgtd}t|}td d d d gd d gg}||sWJ d S )Nr   )	r8   rg   rE   rK   r  rP   rd   rS  r  )r   r   rm   r[   rF  r)   r)   r/   test_nested_lists_all_none  s   

z/TestConvertListTypes.test_nested_lists_all_nonec                 C   sR   t g g g g}t|}tt|}||sJ |jtt ks'J d S N)	r6   rh   rK   rg   r  rP   rd   rS  r  r   r   rm   r[   r)   r)   r/   test_nested_lists_all_empty  
   
z0TestConvertListTypes.test_nested_lists_all_emptyc                 C   sR   t g dgg}t|}tt|}||sJ |jtt ks'J d S )Nr   )	r6   rh   rK   rg   r  rP   rd   rS  ry  r|  r)   r)   r/   test_nested_list_first_empty  r~  z1TestConvertListTypes.test_nested_list_first_emptyc                 C   s   t tjg dddd g}t|}t|j}tjg dd gtt d}||s0J ||s7J t tjg dddd g}t|}tjg dd gtt	 d}||saJ d S )Nr   r  r   rQ  r  )
r6   rh   r8   rg   rK   rv   rS  r   rP   r   )r   r   r`   r   r[   data3r)  	expected3r)   r)   r/   test_nested_smaller_ints  s   
 
 z-TestConvertListTypes.test_nested_smaller_intsc                 C   s   t dtjdgddggfdddgddggfdd dgd	d
ggfdd dgd	d
ggd gfg}t|}ttdtt	 tdtt	 tdtt
 tdttt
 g}t||d d S )Nnan_intsr   r2   r   r  r   strsr   r   dnested_strsr  )r   r8   rS   r6   r7   rK   r@   r   rS  r   ry  rb   r   r   rZ   r\   r)   r)   r/   test_infer_lists  s   
z%TestConvertListTypes.test_infer_listsc           
      C   s   t jt  dd}t t  }g dd g dg dg}t j||d}t j||d}| }| }t||D ]\}}	|d u rE|	d u sEJ t||	 q7d S )Nr   )	list_size)r   r   r2   r   r   )r   ri  r  rZ  rQ  )rK   rS  r   rg   rO   r  rz   r{   )
r   fixed_tyvariable_tyr   	fixed_arrvariable_arrr`   r[   leftrightr)   r)   r/   test_fixed_size_list	  s   z)TestConvertListTypes.test_fixed_size_listc              	   C   sj   t dtjddgtjdtjddgtjdgfg}t|}ttdt	t g}t
||d d S )Nr  r   r   r   r2   r   r  )r   r8   rg   r   r6   r7   rK   r@   r   rS  rb   r  r)   r)   r/   test_infer_numpy_array	  s   
z+TestConvertListTypes.test_infer_numpy_arrayc                 C   s   t g dt  }t ddgddgddggt t  }t j||gdd	g}t jg d
|}t	dddgdgdddgddddgdgg}t	|
 }t  tddt t|| W d    d S 1 sow   Y  d S )Nr   r   r   r   r  eff1r  )r   r   r   r   )r  r  r2   r   rF   rG   )rK   rg   r   rS  ry  StructArrayr   	ListArrayr6   rh   rO   rT   rU   rV   rW   rX   ri   )r   r  r  structsr   r[   rI  r)   r)   r/   test_to_list_of_structs_pandas-	  s&   
"z3TestConvertListTypes.test_to_list_of_structs_pandasc                 C   s   t tjt dkrt tjt dk rtd dddgfddd	gfggd
g fddd dgfgdddgfggg}t|tt	t
 tt
 }| }t|}t  tddt t|| W d    d S 1 spw   Y  d S )N1.25.0.dev0r  $Regression in pandas with numpy 1.25r   r   r   r=  r   r  rJ  r  Nquuxr  quzr  grF   rG   )r   r8   r  r6   r   r8  rK   rg   rS  map_utf8rO   rh   rT   rU   rV   rW   rX   ri   )r   r   rm   rI  r[   r)   r)   r/   test_to_list_of_maps_pandasC	  s   
"(

"z0TestConvertListTypes.test_to_list_of_maps_pandasc           	   
   C   sV  t tjt dkrt tjt dk rtd tg ddd}tdgdgdd	gd
dgg dddggt	t
 dd}tjg d||}tjg d|}| }tddd	gfdd
dgfggdg fdggg}|dd }tdg fdggg}t  tddt t|| t|| W d   dS 1 sw   Y  dS )zL
        A slightly more rigorous test for chunk/slice combinations
        r  r  r  )rF   r   r=  rJ  r  r  rF   r   r   rF   r   r   r   r  Nr  r2   r   r2   r   r   r   r=  rJ  r  rG   )r   r8   r  r6   r   r8  rK   rg   slicerS  ry  MapArrayr   r  rO   rh   rT   rU   rV   rW   rX   ri   )	r   rz  itemsmaprm   rI  r[   series_slicedexpected_slicedr)   r)   r/   "test_to_list_of_maps_pandas_slicedX	  s<   
 
"z7TestConvertListTypes.test_to_list_of_maps_pandas_slicedzt,data,expectedr   r2   r   Naaabbr   c                 C   sX   t g d}t|}tjj||t| d}tjj|t| d|s*J d S )Nr  rU  rQ  )	r8   rg   r6   rh   rK   rQ  rN   rS  rP   )r   r   r   r[   r  rj   r`   r)   r)   r/   ,test_array_from_pandas_typed_array_with_mask	  s   


zATestConvertListTypes.test_array_from_pandas_typed_array_with_maskc                 C   sV   t jdtd}|g  tt g d|d}tj	|}|
 }t|| d S )N)r   r   )r   r3  3r   )r8   emptyrE   fillr6   r7   rg   rK   rM   rN   rO   rX   rY   )r   empty_list_arrayrZ   r}  r`   r)   r)   r/   test_empty_list_roundtrip	  s   
z.TestConvertListTypes.test_empty_list_roundtripc                 C   s`   t  \}}|D ]&}||j j}tjt||jd}t|}|j|jks&J ||s-J qd S )NrQ  )r   rf   rv   rK   rg   r  rd   rP   )r   rZ   r@   r   rm   r[   r`   r)   r)   r/   test_array_from_nested_arrays	  s   

z2TestConvertListTypes.test_array_from_nested_arraysc                 C   s   t jg ddggd gt t t  d }t + tddt tddt	 t
j|tjg ddggd gtddd	 W d    d S 1 sJw   Y  d S )
Nr   r   rQ  rF   z&Creating an ndarray from ragged nestedrG   r   Frp   )rK   rg   r`  r   rO   rT   rU   rV   _np_VisibleDeprecationWarningrW   rX   ri   r6   rh   rE   r  r)   r)   r/   test_nested_large_list	  s$   
"z+TestConvertListTypes.test_nested_large_listc              	   C   s   t jt jfD ]N}t jddgd dgg g|t  d }tj|t	ddgd dgg gdd	 t jddgd dgg g|t 
 d }tj|t	ddgd dgg gdd	 qd S )
Nr#  r  ccrQ  s   aas   bbs   ccFrp   )rK   rS  r`  rg   r  rO   rX   ri   r6   rh   r  )r   list_type_factoryrj   r)   r)   r/   test_large_binary_list	  s(   

z+TestConvertListTypes.test_large_binary_listc                 C   sl   t g d }t jg d|}t| }t	|
 | |g d}d |d< t	|
 | d S )N)r   r=  Nr   )r   r   r   r   r   )r   r   Nr   r2   )rK   rg   r.  r  r   r6   rh   r  rX   ri   rO   take)r   childrm   r[   r)   r)   r/   test_list_of_dictionary	  s   z,TestConvertListTypes.test_list_of_dictionaryc                 C   s   d}t jttj|dfddt|d}tj	|}|j
dd |d }|jd	ks-J t|dd
ks8J t|ddksCJ d S )Ni    i   r   r   r   Tr  r   r2   i r   )r6   r7   rO  r  r8   zerosr<   rK   rM   rN   r   r  r   r  )r   nrZ   r_   column_ar)   r)   r/   #test_auto_chunking_on_list_overflow	  s   z8TestConvertListTypes.test_auto_chunking_on_list_overflowc                 C   sV   ddgdgg ddgg}t d|i}tdtt t fg}t||d d S )Nr2  r      br2      cr      dr      er   )   fr      gr   r  rR  )r6   r7   rK   r@   r  r  r   rb   )r   r   rZ   r@   r)   r)   r/   test_map_array_roundtrip	  s    z-TestConvertListTypes.test_map_array_roundtripc                 C   s   ddgdgg ddgg}dd |D }t j|t t  t  d}t j|t t  t  d}t ||g}t|| }| }t	j
||d	d
 d S )Nr  r  r  r  r  c                 S   s   g | ]	}d d |D qS )c                 S   s   g | ]
\}}||d  fqS )r2   r)   r-   kr  r)   r)   r/   r0   	  s    zJTestConvertListTypes.test_map_array_chunked.<locals>.<listcomp>.<listcomp>r)   r-   rowr)   r)   r/   r0   	  re  z?TestConvertListTypes.test_map_array_chunked.<locals>.<listcomp>rQ  Frp   )rK   rg   r  r  r   rP  r6   rh   rO   rX   ri   )r   rD  rF  arr1rR  rm   r[   actualr)   r)   r/   test_map_array_chunked	  s   z+TestConvertListTypes.test_map_array_chunkedc                 C   sh   ddgd g ddgg}dd |D }t |}tj|tt t d}| }tj	||dd	 d S )
Nr  r  )r  r  )r  Nr  c                 S   s&   g | ]}|d urdd |D nd qS )Nc                 S   s(   g | ]\}}||d urt |nd fqS r{  )r  r  r)   r)   r/   r0   

  s   ( zMTestConvertListTypes.test_map_array_with_nulls.<locals>.<listcomp>.<listcomp>r)   r  r)   r)   r/   r0   

  s
    
zBTestConvertListTypes.test_map_array_with_nulls.<locals>.<listcomp>rQ  Frp   )
r6   rh   rK   rg   r  r  r   rO   rX   ri   )r   r   r[   rm   r  r)   r)   r/   test_map_array_with_nulls
  s   
z.TestConvertListTypes.test_map_array_with_nullsc                 C   sx   t g d}t g d }t ttt|}t j|||}t	g dddgg}|
 }tj||dd d S )Nr   r   r   )r   r   r   r   r  ))r   r   )r   r   )r2   r   )r   r   )r   r  Frp   )rK   rg   r.  r  r<   r   r  r   r6   rh   rO   rX   ri   )r   offsetsr  rz  rm   r[   r  r)   r)   r/   !test_map_array_dictionary_encoded
  s   z6TestConvertListTypes.test_map_array_dictionary_encodedc           	   	   C   sd  t ddgg dd dd gddgg}t |dd|ddg}| }tjd	d
gg dd dtjggdd}t||D ]\}}|d u rK||ksJJ q<t	|| q<td	d
ddddtjgg}t	|d j
| |dd }tjg dd dtjggdd}t||D ]\}}|d u r||ksJ qt	|| qtddddtjgg}t	|d j
| d S )Nr   r2   )r   r   r   r   r   r   r   r   r   r   )r   r   r   r   rE   r   r   r   r   )rK   rg   rP  r  to_numpyr8   rS   r  rz   r{   base)	r   rm   chunked_arrr  r[   r  r  expected_basenp_arr_slicedr)   r)   r/   test_list_no_duplicate_base
  s,   $z0TestConvertListTypes.test_list_no_duplicate_basec                 C   s   t jjt g dt g dt g dd}|jdd}tjddgd d	tjggd
d}t||D ]\}}|d u rA||ks@J q2t	|| q2d S )Nr   r2   r   r   )r   r2   c   r  r   Nr<  )r  rv   ro   Fr2  r   r   r   rE   r   )
rK   r  r   rg   r  r8   rS   r  rz   r{   )r   rm   r  r[   r  r  r)   r)   r/   test_list_values_behind_null=
  s   z1TestConvertListTypes.test_list_values_behind_nullr^   c                 C   b   |j tg dtg dtg dd}| }tddgddgd	d
gg}t|| d S )Nr  r2   r2   r2   r   r2   r   r   r   r   r  sizesrv   r   r2   r   r   r   r   r   rK   rg   rO   r6   rh   rX   ri   r   r^   rm   r  r[   r)   r)   r/   .test_list_view_to_pandas_with_in_order_offsetsL
     zCTestConvertListTypes.test_list_view_to_pandas_with_in_order_offsetsc                 C   r  )N)r2   r   r   r  r  r  r   r   r   r   r   r2   r  r  r)   r)   r/   2test_list_view_to_pandas_with_out_of_order_offsetsY
  r  zGTestConvertListTypes.test_list_view_to_pandas_with_out_of_order_offsetsc                 C   sb   |j tg dtg dtg dd}| }tg dg dg dg}t|| d S )Nr   )r   r   r   r  r  r   )r2   r   r   r   )r   r   r   r   r  r  r)   r)   r/   1test_list_view_to_pandas_with_overlapping_offsetsf
  r  zFTestConvertListTypes.test_list_view_to_pandas_with_overlapping_offsetsc                 C   sh   |j tg dtg dtdd gtg dd}| }tdtjgg d g}t	|| d S )N)r   r2   r2   )r2   r   r   r   r  r  r  rv   ro   )
r   rK   rg   rO   r6   rh   r8   rS   rX   ri   r  r)   r)   r/   )test_list_view_to_pandas_with_null_valuess
  s   z>TestConvertListTypes.test_list_view_to_pandas_with_null_valuesc           	   	   C   s   t   t }|jtg dtg dtg dd}|jtg dtg dtg dtg dd	}t||g}| }t	d
dgdd
gddgg dddt
jgd g}t|| ~~~~t }||ksrJ d S )N)r2   r   r   r  r   r  )r   r   r   )r   r   r   )r   r   r   Nr  r  r   r   r2   r   )r   r   r   r   r   )gccollectrK   total_allocated_bytesr   rg   rP  rO   r6   rh   r8   rS   rX   ri   )	r   r^   bytes_startr  rR  rm   r  r[   	bytes_endr)   r)   r/   (test_list_view_to_pandas_multiple_chunks
  s.   .z=TestConvertListTypes.test_list_view_to_pandas_multiple_chunks)5r  r  r  r  rZ  r\  r]  r^  rc  rd  rg  rk  rl  ru  ry  rz  r}  r  r  r  r  r  r  r  r  r   r  r  rK   r   ry  r  r  r  r  r  r  r  r>  r  r  r  r  r  r  r  ListViewArrayLargeListViewArrayr  r  r  r  r  r)   r)   r)   r/   rT  .  sz    	'



		




rT  c                   @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	j
je	j
jdd Zdd Zdd Zdd ZdS )TestConvertStructTypesz,
    Conversion tests for struct types.
    c              	   C   sf   t dddddddgi}tdtdt fdt fgfg}t||d	 t|||d
 d S )NrU  r   r2   r   r   r   r   r   r  rW  )r6   r7   rK   r@   ra  r   rb   )r   rZ   r\   r)   r)   r/   test_pandas_roundtrip
  s    
z,TestConvertStructTypes.test_pandas_roundtripc                 C   s   t jg dt  d}t jg dt  d}t jg dt  d}t j|||gg d}td ddddd d	dd
dd dg}t|	 }t
|| d S )N)Nr2   r   rQ  )r   Nr   )TFN)r  r  r  r   Tr2   Fr   r   )rK   rg   r   ry  r  r  r   r6   rh   rO   rX   ri   )r   r  r  r  rm   r[   rI  r)   r)   r/   test_to_pandas
  s   


z%TestConvertStructTypes.test_to_pandasc           
      C   s   t   t }tjdgt d}tjdgt d}tj|gdg}tj|gdg}t||g}t	
ddiddig}t	
| }t|| ~~~~~~t }	|	|ks]J d S )Nr   rQ  r2   r  )r  r  rK   r  rg   r   r  r   rP  r6   rh   rO   rX   ri   )
r   r  ints1ints2r  rR  rm   r[   rI  r  r)   r)   r/   test_to_pandas_multiple_chunks
  s*   z5TestConvertStructTypes.test_to_pandas_multiple_chunksc                 C   sX  t dt jfdt jfg}ttdt tdt g}t jg |d}tj||d}| g ks6J t jddg|d}tj||d}| dd	d
ddd
gksVJ tj|t dd	g|d}| dd	d
d gkspJ t g }tg }t jg |d}tj||d}| g ksJ t jddg|d}tj||d}| i i gksJ d S )Nr.   )y_titler  r  r   rQ  )r  T)+   Fr  T)r.   r  r  FrU  r)   )	r8   r   r   r  rK   ra  r   rg   r  r   r  r  r   rm   r)   r)   r/   test_from_numpy
  s0   


z&TestConvertStructTypes.test_from_numpyc                 C   s$  t dt dt jfdt jfgfdt jfdt jfg}|jtjdkr$dndks)J t	
t	dt	
t	dt	 t	dt	 gt	dt	 t	dt	 g}t jg |d	}t	j||d
}| g kshJ t jddg|d	}t	j||d
}| ddddddddddddgksJ d S )Nr.   xxyyr  zl        r  r   r   rQ  ))r   Tr2   r   ))r   Fr   r=  r   T)r  r  r2   r   )r.   r  r  r   Fr   r=  )r8   r   r   r  r   object_itemsizesysmaxsizerK   ra  r   ry  rg   r  r  r)   r)   r/   test_from_numpy_nested
  s6   z-TestConvertStructTypes.test_from_numpy_nestedc                    s4  d}t dt jfdg}d|j }d| }|||j  }t j||d}t j||d< ||d< t j|d |d dk < t	t
dt t
dt g}tj||d	d
}|jd	d |jdksbJ dd  d fdd	}	|	|| ~t j|dk }
tj|||
d	d}|jd	d |jdksJ |	|||
 ~d S )Nl        r.   )r  rE   i      .r   r  rg  Tr
  r  r2   c                 s   s    |   D ]}|E d H  qd S r{  )
iterchunks)rm   r  r)   r)   r/   iter_chunked_array+  s   zHTestConvertStructTypes.test_from_numpy_large.<locals>.iter_chunked_arrayc           	   	      s   t | t |ks
J |d }|d }t | D ]J\}}z9| }|d ur0|| r0|d u s/J n$|| }t|rB|d d u sAJ n|d |ksJJ |d || ksTJ W q tyb   td|  w d S )Nr.   r  zFailed at index)r   	enumerater  r8   r   	Exceptionprint)	rm   r   ro   xsysird  r  r.   r  r)   r/   check/  s&   

z;TestConvertStructTypes.test_from_numpy_large.<locals>.check)rd   ro   rN   r{  )r8   r   r   r  r  r:   random_samplerS   rK   ra  r   r  rg   r   r  )r   target_sizer  bsblockr  r   r  rm   r  ro   r)   r  r/   test_from_numpy_large  s2   

z,TestConvertStructTypes.test_from_numpy_largec                 C   s   t t dt  t dt  g}tdtjfdtjfg}tjg |d}tj	t
dd t j||d W d    n1 s@w   Y  tg }tj	tdd t j||d W d    d S 1 sdw   Y  d S )	Nr.   r  r  r   zMissing field 'y'r  rQ  zExpected struct array)rK   ra  r   r   r  r8   r   rg   r   r$  r%  rb  )r   r  r  r   r)   r)   r/   test_from_numpy_bad_inputO  s$   
"z0TestConvertStructTypes.test_from_numpy_bad_inputc                 C   s   t dddgi}t dddddddgi}td	t fd
t fg}t|d }t||d |d td|fg}t	||||d d S )Ntuples)r   r2   r   r   r   r2   r   r   r   r   r   r  )r[   r@   r\   )
r6   r7   rK   ra  r   r8   asarrayrx   r@   rb   )r   rZ   r-  struct_typerm   r\   r)   r)   r/   test_from_tuples^  s   

z'TestConvertStructTypes.test_from_tuplesc                    s   ddg t g d t g d g}t jj| d}tdd |D  } fdd	|D }t|}t	|
 | |g d
}d |d< t	|
 | d S )Nr  r  )  i  r  )r   r   Nr   c                 s   s    | ]}|  V  qd S r{  )r  )r-   r  r)   r)   r/   	<genexpr>v  s    zCTestConvertStructTypes.test_struct_of_dictionary.<locals>.<genexpr>c                    s   g | ]	}t t |qS r)   )r  r  r  r   r)   r/   r0   w  re  zDTestConvertStructTypes.test_struct_of_dictionary.<locals>.<listcomp>)r   Nr2   r   )rK   rg   r.  r  r   r  r6   rh   rX   ri   rO   r  )r   childrenrm   rows_as_tuplesrows_as_dictsr[   r)   r   r/   test_struct_of_dictionaryo  s   
z0TestConvertStructTypes.test_struct_of_dictionaryN)r  r  r  r  r  r  r  r   r  r   r  slowr>  r  r  r  r$  r)   r)   r)   r/   r  
  s    7r  c                   @   sp   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestZeroCopyConversionz@
    Tests that zero-copy conversion works with some types.
    c                 C   s*   t g djdd}t|g d d S )Nr   Tr  ry   )r   r`   r)   r)   r/   test_zero_copy_success  s   z-TestZeroCopyConversion.test_zero_copy_successc                 C   s^   t jtddgtjdgdd}|jdd}tddg}tj	t
|t
|dd d S )	Nr   r   r   r   Tr  Frp   )rK   r*  r   r8   rg   rO   r6   r  rX   ri   rh   )r   rm   r`   rv   r)   r)   r/   test_zero_copy_dictionaries  s   
z2TestZeroCopyConversion.test_zero_copy_dictionariesc                 C   2   t jdgdd}t|jdd}t|| d S )Nr  r%   r   Tr  r8   rg   rK   rO   rz   r{   r   rm   r`   r)   r)   r/   test_zero_copy_timestamp     z/TestZeroCopyConversion.test_zero_copy_timestampc                 C   r)  )Nr   r'   r   Tr  r*  r+  r)   r)   r/   test_zero_copy_duration  r-  z.TestZeroCopyConversion.test_zero_copy_durationc                 C   s>   t tj |jdd W d    d S 1 sw   Y  d S )NTr  )r   r$  rK   r  rO   r   rm   r)   r)   r/   check_zero_copy_failure  s   "z.TestZeroCopyConversion.check_zero_copy_failurec                 C      |  tg d d S )N)r   BCr0  rK   rg   r9  r)   r)   r/   &test_zero_copy_failure_on_object_types     z=TestZeroCopyConversion.test_zero_copy_failure_on_object_typesc                 C   r1  )N)r   r   Nr4  r9  r)   r)   r/   *test_zero_copy_failure_with_int_when_nulls  r6  zATestZeroCopyConversion.test_zero_copy_failure_with_int_when_nullsc                 C   r1  )N)r  r   Nr4  r9  r)   r)   r/   ,test_zero_copy_failure_with_float_when_nulls  r6  zCTestZeroCopyConversion.test_zero_copy_failure_with_float_when_nullsc                 C   s   |  tddg d S )NTFr4  r9  r)   r)   r/   $test_zero_copy_failure_on_bool_types  r6  z;TestZeroCopyConversion.test_zero_copy_failure_on_bool_typesc                 C   s2   t jddgddggt t  d}| | d S )Nr   r2   r   ri  rQ  )rK   rg   rS  r   r0  r/  r)   r)   r/   $test_zero_copy_failure_on_list_types  s   $z;TestZeroCopyConversion.test_zero_copy_failure_on_list_typesc                 C   &   t jdd gdd}| t| d S )Nr   r%   r   r8   rg   r0  rK   r/  r)   r)   r/   .test_zero_copy_failure_on_timestamp_with_nulls     zETestZeroCopyConversion.test_zero_copy_failure_on_timestamp_with_nullsc                 C   r;  )Nr   r'   r   r<  r/  r)   r)   r/   -test_zero_copy_failure_on_duration_with_nulls  r>  zDTestZeroCopyConversion.test_zero_copy_failure_on_duration_with_nullsN)r  r  r  r  r'  r(  r,  r.  r0  r5  r7  r8  r9  r:  r=  r?  r)   r)   r)   r/   r&    s    r&  c                  C   s$   t  } t| dd t| ddd d S )NFrC   TrD   r]   r?   rb   rZ   r)   r)   r/   _non_threaded_conversion     rC  c                  C   s$   t  } t| dd t| ddd d S )NTrC   r@  rA  rB  r)   r)   r/   _threaded_conversion  rD  rE  c                   @   s  e Zd ZdZde fde fde fde fde	 fde
 fde fd	e fd
e fde fde fde fde fdedfdee fgZdd Zdd Zdd Zdd Zejjejjdd Zdd Zdd Zdd Zdd  Z ej!d!d"g d#iej"fd"g d#iej"fd"d$d%giej"fd"d%d"giej#fd"d$d"giej#fd"d&d"giej#fgd'd( Z$d)d* Z%d+d, Z&d-d. Z'd/d0 Z(d1d2 Z)d3d4 Z*d5d6 Z+d7d8 Z,d9d: Z-d;S )<TestConvertMiscz)
    Miscellaneous conversion tests.
    r   r   r   r   r   r   r   r   r  r   r   rE   r  c                 C   s   t dg di}t| d S )Nr   NNNr   r   r)   r)   r/   test_all_none_objects  s   z%TestConvertMisc.test_all_none_objectsc                 C   s0   t dg di}|d d|d< t| d S )Nr   rG  r   )r6   r7   r!  rb   r   r)   r)   r/   test_all_none_category  s   z&TestConvertMisc.test_all_none_categoryc                 C   s4   | j D ]\}}tjg t|d}t||d qd S )Nr   rQ  )
type_pairsr8   rg   r   rx   )r   	dtype_strpa_typerm   r)   r)   r/   test_empty_arrays  s   z!TestConvertMisc.test_empty_arraysc                 C   s
   t   d S r{  )rC  r9  r)   r)   r/   test_non_threaded_conversion  s   
z,TestConvertMisc.test_non_threaded_conversionc                 C   s>   t d}z|t W |  |  d S |  |  w )Nr2   )mpPoolapplyrE  closejoin)r   poolr)   r)   r/   %test_threaded_conversion_multiprocess  s   

z5TestConvertMisc.test_threaded_conversion_multiprocessc                 C   s   d}dd ddt jg}g d}dd ddt jg}t|| tj|| ddgd	t|| t|| tj|| g d
dd|| || || || || d
}t|}t| |D ]}t||  qZd S )Nr   r   r=  r  )r   r   r   r   r   r  r  r  r$  )r=  r  r   Tr%  r  )
cat_stringscat_strings_with_nacat_ints
cat_binarycat_strings_orderedr  r  r  strings2strings3)r8   rS   r6   r  r7   rb   rx   )r   r  r  r  v3r{  rZ   r  r)   r)   r/   test_category  s2   

zTestConvertMisc.test_categoryc                 C   sL   dd }t jg dddgdt jg dddgddg}|D ]}|| qd S )	Nc                 S   s.   t | }| }tt|t|  d S r{  )rK   rg   rO   rX   ri   r6   rh   )r  rm   r`   r)   r)   r/   _check  s   
zBTestConvertMisc.test_category_implicit_from_pandas.<locals>._checkrc  r   r   r$  TrV  )r6   r  )r   r`  r{  rm   r)   r)   r/   "test_category_implicit_from_pandas  s   
z2TestConvertMisc.test_category_implicit_from_pandasc                 C   s    t dt g i}t| d S )Ncat)r6   r7   r  rb   r   r)   r)   r/   test_empty_category(  s   z#TestConvertMisc.test_empty_categoryc                 C   s   t  dft  dffD ]D\}}t g t t  |}| }tjg t	j
g |dd}tt|t| t d|i}| }td|i}t|| qd S )NrE   r   r   r$  r   )rK   ry  r   rP  
dictionaryr   rO   r6   r  r8   rg   rX   ri   rh   r_   r7   rY   )r   rL  r   r   r`   r[   r_   r)   r)   r/   test_category_zero_chunks-  s    z)TestConvertMisc.test_category_zero_chunkszdata,error_typer   )r   r   r   r   Tr   c                 C   sN   t |}d}tj||d tj| W d    d S 1 s w   Y  d S )N/Conversion failed for column a with type objectr  )r6   r7   r   r$  rK   rM   rN   )r   r   
error_typerZ   r  r)   r)   r/   test_mixed_types_fails:  s
   
"z&TestConvertMisc.test_mixed_types_failsc              	   C   sd  g }g d}d\}}t j|| d }g d}|D ]#}t  td ||| W d    n1 s9w   Y  q|t j	dd t
|| D td||  t j	g d	| td|| }d |d
< || |t jd|| dd||  |dktd d df }	|D ]}
tj|
|d}|d }t| t| t||	d qd S )Nrc  )r   r   r   )
r  r  r  r  r  r  r  r  r  r  rF   c                 S      g | ]}t d qS r  r   r-   r  r)   r)   r/   r0   \  r1   z<TestConvertMisc.test_strided_data_import.<locals>.<listcomp>r   r  r   r!   r#   r   r   r   r  )r8   r:   r;   ru   rT   rU   r   r  r!  rg   r<   rE   reshaper9   r    r6   r7   rb   rx   )r   casesrQ   NKrandom_numbersnumeric_dtypes	type_nameboolean_objectsstrided_maskcaserZ   ra   r)   r)   r/   test_strided_data_importK  sD   


z(TestConvertMisc.test_strided_data_importc                 C   sX   dd }|t jd gd td |t jtjgd td |t jd tjd gtd d S )Nc                 S   sT   t | }t|t jsJ t|dksJ |jdksJ |D ]	}|t ju s'J qd S )Nr   )rK   rg   r   	NullArrayr   rs   r  )rj   r6  itemr)   r)   r/   _check_seriesw  s   
z5TestConvertMisc.test_all_nones.<locals>._check_seriesr   r   )r6   rh   rE   r8   rS   )r   rz  r)   r)   r/   test_all_nonesv  s   zTestConvertMisc.test_all_nonesc                 C   s~   t dg dfdtjg dtjdfdg dfg}t|}ttdt	 tdt	 g}t
|||ddg |d d S )Nr   )r   r   r2   r   r   r   )ir   r   r  r   r   )r@   r[   r\   )r   r8   rg   r   r6   r7   rK   r@   r   r   rb   )r   r   rZ   partial_schemar)   r)   r/   test_partial_schema  s   




z#TestConvertMisc.test_partial_schemac                 C   s   t i }t|d d t|d dd t jt g d}t||dd t||ddd t ji g dd}t|dd t|ddd d S )	Nr   T)rA   r]   r   Fr   r   )r]   rA   )r6   r7   rb   r   )r   rZ   r[   r   r)   r)   r/    test_table_batch_empty_dataframe  s   
z0TestConvertMisc.test_table_batch_empty_dataframec              	   C   s   t jg t  d}ttjg td}t|	 ttjg tjd t jg t 
 d}t|	 | t jg t t  d}t|	 | t jg t t dt  gd}t|	 | d S )NrQ  r   r   )rK   rg   r   r6   rh   r8   rE   rX   ri   rO   ry  rS  ra  r   )r   rm   empty_objectsr)   r)   r/   test_convert_empty_table  s   
"z(TestConvertMisc.test_convert_empty_tablec                 C   s   t dt jfdt jfg}t jddg|d}|jdksJ tj|d t d}| dd	gks2J tj|d t d}| d
dgksGJ dS )zt
        ARROW-2172: converting from a Numpy array with a stride that's
        not a multiple of itemsize.
        r.   r  )r  r'  )r2   r   )r   rQ  r  r  r'  r2   N)r8   r   r   r   rg   rx  rK   r  )r   r   r   rm   r)   r)   r/   test_non_natural_stride  s   z'TestConvertMisc.test_non_natural_stridec                 C   sR   t jddt jdddd }tj|t d}tjg dt d}|| d S )	Nr   r  r   r   r'  r2   rQ  )r   r   r   g      @)r8   r9   r   rK   rg   r   rP   )r   r  pa_arrr[   r)   r)   r/   #test_array_from_strided_numpy_array  s   z3TestConvertMisc.test_array_from_strided_numpy_arrayc                 C   s   t tdtdddd}ttdt tdt	 g}t
t tjj||d W d    n1 s:w   Y  tjj||d	d
}|djt	 ksTJ d S )Nabcr   r   r   )r   r2  r   r2  rR  Fr  )r6   r7   r  r8   linspacerK   r@   r   ry  r   r   r$  r%  rM   rN   r  rd   r  r)   r)   r/   test_safe_unsafe_casts  s   z&TestConvertMisc.test_safe_unsafe_castsc                 C   s   zt dt jdtjdgi}W n ty(   t dt dtjdgi}Y nw tjt	dd t
j| W d    d S 1 sBw   Y  d S )Nr   r   r   zSparse pandas datar  )r6   r7   r{  SparseArrayr8   rS   AttributeErrorr   r$  rb  rK   rM   rN   r   r)   r)   r/   test_error_sparse  s   " "z!TestConvertMisc.test_error_sparseN).r  r  r  r  rK   r   r   r   r   r   r   r   r   r  r   r   ry  r  rS  rJ  rH  rI  rM  rN  r   r  	processes	threadingrU  r_  ra  rc  re  r  r  r  rh  rw  r{  r~  r  r  r  r  r  r  r)   r)   r)   r/   rF    sb    












	
+rF  c                  C   sL   t g d} tjj| t dd}tjg dt d}||s$J d S )N)r   r2   Nr   Trd   r)  rQ  )r6   rh   rK   rQ  rN   r   rg   rP   )rv   rm   r[   r)   r)   r/   *test_safe_cast_from_float_with_nans_to_int  s   r  c                  C   s   t jt jddddttjddgtddg} t jddd}||	d	|	d
|d d d 	d	d
dddgd t ddgd 
djddgd tjdtjjddddt jddddt jddddd}t j|| dS )NrZ  r   )r   r2   r   r=  r   r  r5  r&  r   TFr   r   r=   2013Mr   r   r   )r  r   r   )r   r   r2   r   r   r   r   r   r   ri  r  r   )r6   r   r   r   repeatr8   tilerg   rE   r  r!  rh   rv   r:   r;   r  period_rangeinterval_ranger7   )r   rw  r   r)   r)   r/   _fully_loaded_dataframe_example  s$   


r  rQ   r  r   c                 C   s   t dt tj  krt dk rn ntd tj| d}tj|}tj|	 }|
|s3J |j
|js<J |jj|jjksFJ d S )Nr  r6  r7  r   )r   r6   r  r   r8  r7   rK   rM   rN   rO   rP   r@   r  )rQ   rZ   table1table2r)   r)   r/   !test_roundtrip_with_bytes_unicode  s   &
r  c                 C   s>   | d }| d } | d }| d } | d }| d }t ||||S )Nr  r=  )r   )valr  secondsminutesr<  r)   r)   r/   _pytime_from_micros  s   r  c                 C   s$   | j d | jd  | jd  | j S )Nl    $'- i r  )hourminuterq  r  )pytimer)   r)   r/   r    s   r  c                  C   sh   G dd d} t d|  |  gi}d}tjt|d tj| W d    d S 1 s-w   Y  d S )Nc                   @   rH  )z6test_convert_unsupported_type_error_message.<locals>.ANrI  r)   r)   r)   r/   r   !  rK  r   r   rf  r  )r6   r7   r   r$  r%  rK   rM   rN   )r   rZ   r  r)   r)   r/   +test_convert_unsupported_type_error_message  s   "r  c                 C   s,   |   }tj|| jdd}|| sJ d S )NTr
  )rO   rK   rg   rd   rP   )rm   rj   r   r)   r)   r/   test_array_to_pandas_roundtrip/  s   r  c                 C   s   dd t | D }|| S )Nc                 S   ri  rj  )r   rl  r)   r)   r/   r0   ;  r1   z+_generate_dedup_example.<locals>.<listcomp>)r<   )nuniquer  unique_valuesr)   r)   r/   _generate_dedup_example:  s   r  c                 C   s   t dd | D |ksJ d S )Nc                 S   s   h | ]}t |qS r)   r@  r,   r)   r)   r/   	<setcomp>@  r1   z"_assert_nunique.<locals>.<setcomp>)r   )rd  r[   r)   r)   r/   _assert_nunique?  s   r  c                  C   s   t  r	td d} d}t| |}tj|t dtj|t dt	||gfD ]}t
| |  t
|jddt| q*d S )NDpandas uses string dtype and not object dtype, keyword has no effectr   r  rQ  Fdeduplicate_objects)r
   r   r   r8  r  rK   rg   r  r  rP  r  rO   r   )r  r  rv   rm   r)   r)   r/   .test_to_pandas_deduplicate_strings_array_typesC  s   
r  c                  C   s   t  r	td d} d}t| |}t|}tj|gdg}tj	
|g}||fD ]}t| d |  t|jddd t| q+d S )Nr  r   r  r   Fr  )r
   r   r   r8  r  rK   rg   rL   r   rM   r+  r  rO   r   )r  r  rv   rm   r|  r}  rd  r)   r)   r/   .test_to_pandas_deduplicate_strings_table_typesS  s    

r  c                  C   sn   d} d}t tjjdd| d}d || d < t|| }t|jdd|  t|jdd	d
| d | d  d S )Nr   r  i i ʚ;r=   r2   Tr  F)r  r  r   )r  r8   r:   r  rK   rg   r  rO   )r  r  r  rm   r)   r)   r/   .test_to_pandas_deduplicate_integers_as_objectsf  s   r  c            	      C   s   d} d}t t| }ddddifddddifdd	i fdd
i fg}|D ]-\}}}tj|| |d}||}t|jdi ||  t|jdddi|t| q"d S )Nr   r  r   rO  r_  Tr   rV  r  r  rQ  r  Fr)   )r  r<   rK   rg   rM  r  rO   r   )	r  r  r  rn  raw_type
array_typepandas_optionsraw_arr
casted_arrr)   r)   r/   $test_to_pandas_deduplicate_date_timew  s(   
r  c                  C   s   t g dtjddgd} ttjdt ddtjdt ddg}t	
t tjj| |d	 W d    d S 1 s>w   Y  d S )
N)333333?g @r   ry  r   r   r   Fr  r   rR  )r6   r7   r8   rS   rK   r@   r   r   r  r   r$  r%  rM   rN   )rZ   r@   r)   r)   r/   /test_table_from_pandas_checks_field_nullability  s   

"r  c               	   C   s   t tdg dfdg dddgd d gfdg dfg} | g d	 }tdt fdtt fdt fg}tdt fdt fdtt fg}tjj	| d
d}tjj	|d
d}|j
|shJ |j
|spJ d S )N	partitionr   r   r   r   r{  r   r   r   r  NNr   gffffff
@r  r  r{  Fr   )r6   r7   r   rK   r@   r   rS  r   rM   rN   rP   )df1r   schema1schema2r  r  r)   r)   r/   6test_table_from_pandas_keeps_column_order_of_dataframe  s(   





r  c               	   C   s   t tdg dfdg dddgd d gfdg dfg} tdt fdtt fdt fg}| | jd	k }| | jd
k g d }tj	j
||dd}tj	j
||dd}|j|s_J |j|jshJ d S )Nr  r  r{  r   r   r   r  r  r   r   r  Fr  )r6   r7   r   rK   r@   r   rS  r   r  rM   rN   rP   )rZ   r@   r  r   r  r  r)   r)   r/   3test_table_from_pandas_keeps_column_order_of_schema  s    



r  c               	   C   s   t tdg dfdg dddgd d gfdg dfg} g d	}tdtt fdt fdt fg}ddg}tdt fdt fg}tjj	| |d
d}tjj	| |d
d}|j
|sdJ |j
|slJ d S )Nr  r  r{  r   r   r   r  r  )r{  r  r  F)rQ   rA   )r6   r7   r   rK   r@   rS  r   r   rM   rN   rP   )rZ   columns1r  columns2r  r  r  r)   r)   r/   ;test_table_from_pandas_columns_argument_only_does_filtering  s(   





r  c               	   C   s   t tdg dfdg dddgd d gfdg dfg} tdt fdtt fdt fg}ddg}t	t
 tjj| ||d	 W d    d S 1 sQw   Y  d S )
Nr  r  r{  r   r   r   r  r  )r@   rQ   )r6   r7   r   rK   r@   r   rS  r   r   r$  r%  rM   rN   )rZ   r@   rQ   r)   r)   r/   @test_table_from_pandas_columns_and_schema_are_mutually_exclusive  s   



"r  c                  C   sz   t dg di} ttjdt ddg}tj| }|jdjdu s(J tjj| |d}|jdjdu s;J d S )Nr   r   Fr  TrR  )	r6   r7   rK   r@   r   r   rM   rN   r  rZ   r@   r_   r)   r)   r/   /test_table_from_pandas_keeps_schema_nullability  s   r  c                  C   s  t g dg dd} tdt fdt fdt fg}tjtdd tj	j
| |d	 W d    n1 s:w   Y  d| j_t| |d
|d tjtdd tj	j
| |dd W d    n1 sfw   Y  tjtdd tj	j
| |d d W d    n1 sw   Y  t jg ddd| _t| |d |d t| |d
|d tdt fdt fdt fg}t| |d |d t| |d
|d tdt fdt fg}|  }|jd
d}t| |d ||d t| |d
||d t jjg dddgd| _tdt fdt fdt fdt fg}t| |d
|d t| |d |d tdt fdt fdt fg}|  }|jdd
d}t| |d
||d t| |d ||d d S )Nr   re  r   r   r   r   zname 'index' present in ther  rR  T)r@   rA   r\   z'preserve_index=False' wasFr  z=name 'index' is present in the schema, but it is a RangeIndexr   re   ri  )r@   rA   r\   r[   ))r   r   )r   r2   )r   r   level1level2r   )r6   r7   rK   r@   r   r   r   r$  KeyErrorrM   rN   r   rf   rb   r%  r   ru   rl  r   from_tuplesry  )rZ   r@   r[   r)   r)   r/   +test_table_from_pandas_schema_index_columns	  s   















r  c                  C   s   t g dg dd} tdt fdt fdt fg}tjj| dd}tjj| d|d	}|j	 
|s;J t jg dg ddg d
d} tj| }tjj| |d}|j	 
|scJ d S )Nr   re  r   r   r   r   Tr   )rA   r@   r   r   rR  )r6   r7   rK   r@   r   r   SchemarN   rM   rN  rP   )rZ   r\   r@   r_   r)   r)   r/   :test_table_from_pandas_schema_index_columns__unnamed_indexc  s   


 r  c                  C   sH   t  } tj| ddi}tjj| |d}|jj	ddks"J d S )NmetaTruerR  s   metas   True)
r6   r7   rK   r  rN   rX  rM   r@   r  getr  r)   r)   r/   2test_table_from_pandas_schema_with_custom_metadatax  s   r  c               	   C   s(  t t jddddtjdd} ttjdt	 ddtjd	tj
d
ddddg}tjj| |d}|j|s<J |jjd d }|d dksLJ |d d u sTJ |jjd d }|d d	ksdJ |d ddiksnJ | }ddi}tt jtdkrd|d	< | dd	g |}t|| d S )Nz2020-01-01T00:00:00Zr  r2   )r   r   )r   r  r  Tr  r   rj   r  r  FrR  rQ   r   rf   r  r   r   r   r  zdatetime64[s, UTC])r6   r7   r   r8   r:   r;   rK   r@   r   r   r  rM   rN   rP   r   rO   r   r  r!  rX   rY   )rZ   r@   r_   metadata_floatmetadata_datetimer`   coerce_cols_to_typesr[   r)   r)   r/   2test_table_from_pandas_schema_field_order_metadata  s,   
r  c                  C   sf   t tjg dddtjg dddtjdg dg dd} tj| }|	 }t
| | d S )	Nr   r2   r   r   r   r   r   r   r   )r   r=  NrJ  r  )FTFTF)rw  rx  c3c4c5)r6   r7   r8   rg   r:   r;   rK   rL   rN   rO   rX   rY   )r   r/  r`   r)   r)   r/   test_recordbatch_from_to_pandas  s   
r  c                  C   s   t tjg dddtjg dddg dg dd} t tjd	d
gddtjddgddddgddgd}tj| }tj|}tj||g}|	 }t 
| |gjdd}t|| d S )N)r   r   r2   r   r   r   r   )TNF)r   r=  N)rw  rx  r  r  r   r   r   r   TrJ  r  ri  )r6   r7   r8   rg   rK   rL   rN   rM   r+  rO   rw  rl  rX   rY   )rD  rF  batch1batch2r_   r`   r   r)   r)   r/   test_recordbatchlist_to_pandas  s$   r  c                  C   sh   t jt g dgdgd} t jt g dgdgd}| d  jdks'J |d  jdks2J d S )Nr   a0r   r   )rK   record_batchrg   r_   rO   rf   )r|  r   r)   r)   r/   *test_recordbatch_table_pass_name_to_pandas  s   r  rd   r[   r  r    r   r   r   r   r   r   r   r   r  r   r   r   rE  r   )lengthr  zlist[list[int16]]rr  r   r   r"  r   r  r  r  rj   r   c                 C   s   t | |ksJ d S r{  )r	   r  r)   r)   r/   test_logical_type  s   r  c                  C   s   d} t jtj| tjdtjjdd| dtjd}t	
  t  }| }t  || d  ks2J d }t	
  t  |ks@J t tj| tjd}t  }| }t  |ks[J d S )N'  r   r   r2   r=   r  r   )rK   rg   r8   r9   r   r:   r  r!  r  r  r  r  rO   )ro  rm   prior_allocationr.   r)   r)   r/   test_array_uses_memory_pool  s   r  c                  C   sd   t t tjdtjdgdg} t| dd t  }|  }|d j	j
js(J t  |ks0J d S )Nr  r   r_  Tsplit_blocks)rK   r_   rg   r8   r9   r   !_check_to_pandas_memory_unchangedr  rO   _valuesflags	writeable)r   r  r`   r)   r)   r/   test_singleton_blocks_zero_copy  s   "r  c                 K   s^   t  }| jdi |}t r%td|jjd }t  || ks#J d S t  |ks-J d S )N   r2   r)   )rK   r  rO   r
   r   r  rQ   nbytes)rd  kwargsr  r.   max_index_allocationr)   r)   r/   r  "  s   r  c                  C   s   t t jg dd ddt jg dd ddt jg dd ddt jg dd ddt jg dd ddt jg dd ddt jg dd ddt jg dd ddgd	d
 tdD } t| d t| dd d S )Nr  r   r  rQ  r  r  r  r  c                 S      g | ]}d | qS r  r)   rl  r)   r)   r/   r0   ;      z/test_to_pandas_split_blocks.<locals>.<listcomp>r   Tr  )rK   r_   rg   r<   _check_blocks_createdr  )r   r)   r)   r/   test_to_pandas_split_blocks0  s   	
r  c                 C   s   t tjt dk r| jS | jS )Nz1.1.0)r   r6   r  _data_mgrrB  r)   r)   r/   _get_mgrA  s   r  c                 C   s&   | j dd}tt|j|ksJ d S )NTr  )rO   r   r  blocks)r   numberr.   r)   r)   r/   r  H  s   r  c                     s:   d  fdd} |  }t |ddd |  }t |dd d S )N2   c                      s(   t dd t D dd t D S )Nc                 S   s(   g | ]}t tjd ddd qS )r  Nr2   )rK   rg   r8   r:   r;   rl  r)   r)   r/   r0   Q  s    zEtest_to_pandas_self_destruct.<locals>._make_table.<locals>.<listcomp>c                 S   r  r  r)   rl  r)   r)   r/   r0   U  r  )rK   r_   r<   r)   rp  r)   r/   _make_tableP  s
   
z1test_to_pandas_self_destruct.<locals>._make_tableT)r  self_destruct)r  )r  )r  r   r)   r  r/   test_to_pandas_self_destructM  s   r  c                  C   s   d} t tj| tjd}t |||gg d}t  }| }d|  d }t	 r.|d7 }t  || ks8J d }t
  t  |ksFJ d S )Nr  r   )r_  r  r  r   r      )rK   rg   r8   r9   r   r_   r  rO   r
   r   r  r  )ro  rm   r   r  r.   new_allocationr)   r)   r/   test_table_uses_memory_pool_  s   r  c                  C   sl   t ddig} |  }|jtdksJ |d }t|}t||ks(J ~t||d ks4J d S )Nr   r   rE   r   )rK   rg   rO   r   r8   r  getrefcount)rm   r  rd  refcountr)   r)   r/   test_object_leak_in_numpy_arrayt  s   
r  c                  C   s   t ddig} t | gdg}| d }|jtdks J |d }t|}t||ks2J ~t||d ks>J d S )Nr   r   r_  rE   r   )rK   rg   r_   rO   r   r8   r  r  )rm   r_   ra   rd  r  r)   r)   r/   test_object_leak_in_dataframe  s   
r  c                  C   s   ddgddgg} t  }t j| d |d}t j| t |d}tj| d tjd}ttj| d tjdtj| d tjdg}|j|ksGJ |t |sQJ |t |s[J d S )	Nr  g333333@g      "@g      E@r   rQ  r   r   )	rK   r   rg   rS  r8   r6   rh   rd   rP   )r   r   r  rR  r!  r"  r)   r)   r/   test_array_from_py_float32  s   r  c            
      C   sR  t  } t| g}|jdjd}tjddd}tj	j
||d}|j|ks*J tj	j
|tdd}|d  |d  ksCJ |d  |d  ksQJ tjdgddtd	}tjd
gddtd}|jtd	kswJ td}tt || W d    n1 sw   Y  |j|dd}||sJ ttdtdtdg}	tjg dtdd}tt tj|	tdd W d    n1 sw   Y  tt tj	j
|	tdd W d    n1 sw   Y  tj	j
|	tddd}||sJ tj|	tddd}||s'J d S )Nz	tzlocal()r  r  r  rQ  r   i r   r"  {   rj   Fr(  r   r  r  )r   r   r   r  )r   nowr6   rh   r  r  
tz_convertrK   r  rQ  rN   rd   r  to_pydatetimerg   rM  r   r$  r%  rP   r  )
r  rj   s_nyc
us_with_tzrm   rR  r[   targetr`   rI  r)   r)   r/   test_cast_timestamp_unit  s<   
"r  c                  C   sf   t j } |  }tj|gtjdddd}tj||gddg}|	 }t|}|
|s1J d S )Nr  r  r  rQ  r  stop)r6   r  r	  r  rK   rg   r  r  r   rO   rP   )tsts_dtrm   ra  r`   r   r)   r)   r/   (test_nested_with_timestamp_tz_round_trip  s   

r  c            
      C   s  t j } |  }dD ]3}|dv rdd }ndd }tj| gt|d}tj| gtj|ddd}tj||gd	d
g}tj||gd	d
g}|	 }t
|d d	 tsXJ |d d	 jd u scJ t
|d d
 tsnJ |d d
 jd u syJ |	 }t
|d d	 tsJ |d d	 jd usJ |d d	 tj}	||	jd d||ksJ t
|d d
 tsJ |d d
 jd usJ td|i	 }t
|d d d	 tsJ |d d d	 jd u sJ t
|d d d
 tsJ |d d d
 jd u sJ td|i	 }t
|d d d	 tsJ |d d d	 jd us#J t
|d d d
 ts1J |d d d
 jd us?J qd S )Nr  )rj   r"  c                 S   s   | j ddS )Nr   r  r  r.   r)   r)   r/   truncate  s    z/test_nested_with_timestamp_tz.<locals>.truncatec                 S   s   | S r{  r)   r  r)   r)   r/   r    s    rQ  r  r  r  r  r   r2  r   )r6   r  r	  r  rK   rg   r  r  r   rO   r   r   r3  
astimezoner   r5  rR   r_   )
r  r  r  r  rm   rR  arr3arr4r`   utc_dtr)   r)   r/   test_nested_with_timestamp_tz  sB   


r  c               	   C   s  t g dd} t jg dtd}t g d}dD ]}| |}tj||}tjj|||d}|dkrQtj	t
d	d
 |  W d    n1 sKw   Y  q| }|dkr_|d}n|dkri|d}n|dkrs|d}n|}tjj||d}	tt|t|	 | }
|
  dksJ |dkr|d}n|dkr|d}n|dkr|d}n|}tjjt |d||d}tt|
t| qd S )Nr   r2   rI  r   )FFTFFF)r   r   r   r   r   r   r   r   r  r   zUInt64 dictionary indicesr  r   r   r   r   r   r   r$  r   r'  )r8   r  rg   rE   r!  rK   r*  r   r   r$  rb  rO   r6   r  
from_codesrX   ri   rh   rr   rt   where)src_indicesrd  ro   
index_typer-  d1d2pandas1compare_indices
ex_pandas1pandas2signed_indices
ex_pandas2r)   r)   r/   test_dictionary_with_pandas  sP   

r'  c                    sd   |d ur|t jjdt|| d }nt j fddt| D td}|dkr0d |t j| |k < |S )Nr   r=   c                    s   g | ]}t  qS r)   rk  rl  	item_sizer)   r/   r0   N  r1   z"random_strings.<locals>.<listcomp>r   )r8   r:   r  r   rg   r<   rE   rand)r  r)  pct_nullrd  r`   r)   r(  r/   random_stringsJ  s   r,  c                  C   s  t jd tjtdddd} tjtdddd}tjtdddd}tjt jjd	t	| d
dd| }tjt jjd	t	|d
dd|}tjt jjd	t	|d
dd|}tjt jjd	t	|d
ddt j
d
dk d}tj||}t| ||g}t||||g}	t|d|d|d|dg}
|	 }|
 }|jj| k sJ |d}d || < t|| d S )Ni90  r       ry  rQ  rp  r  r  r   r  r  r  rf  r  r+   )r8   r:   r  rK   rg   r,  r*  r   r  r   r*  concat_arraysrP  rM  rO   rb  r%  r  r!  rr   rX   ri   )r  r   d3r  r  r  r  r  expected_dictr   a_denser`   result_denseexpected_denser)   r)   r/   "test_variable_dictionary_to_pandasW  sB   
r4  c                  C   sf   t g d } t jg d| }| }ttjg dt	dtjddgt	dg}t
|| d S )N)r   r   r   r   r   r  )r   r   r   r   r   )rK   rg   r.  r  r   rO   r6   rh   r8   rE   rX   ri   )r  rm   r`   r[   r)   r)   r/   (test_dictionary_encoded_nested_to_pandas  s   r5  c                  C   s   t g d} tt t rt nt }t	| }|
 g dks(J |j|s0J t g d} t	| }|
 g dksFJ |j|sNJ tj	| t	g dd}|
 g dksdJ |j|slJ d S )N)r   r   r   )r   r   Nr   )FFFTr  )r   r   NN)r6   r  rK   rd  r   r
   r   r  ry  rg   r  rd   rP   r8   )rb  rg  r`   r)   r)   r/   test_dictionary_from_pandas  s   

r6  c                  C   sx  t jtjddgddtjddgtd} tjt t	 d}tj| |d}|j
|s/J | ddgks9J tjt t d}ttj tj| |d}W d    n1 s\w   Y  tjt t	 d	d
}d}tjt|d tj| |d}W d    n1 sw   Y  | ddgksJ tjt t	 d}tj| |tdd	gd}|j
|sJ | dd gksJ t g } tjt t	 d}tj| |d}|j
|sJ | g ksJ tjt t d}tj| |d}|j
|sJ | g ksJ t ddg} tj| t	 d}tjddgt	 d}||s/J | ddgks:J d S )Nr   r   r   r   r   r   )r  
value_typerQ  T)r  r7  r  z4The 'ordered' flag of the passed categorical values r  FrT  )r6   r  r  r8   rg   rE   rK   rd  r   ry  rd   rP   r  r   r   r   r$  r  r%  )rb  r_  r`   r  r[   r)   r)   r/   *test_dictionary_from_pandas_specified_type  sJ    
r8  c                  C   s   t tjt dk rtd tjdg didd} | d} t| d j	j
}t| d j	jj}t|tjs9J tj| d }tj||}||ksNJ d S )Nz1.3.0z:PyArrow backed string data type introduced in pandas 1.3.0r.   r   r=  r   zstring[pyarrow]r   r   )r   r6   r  r   r8  r7   r!  rK   rg   rb  codesr%  rv   r   rQ  rN   r*  r   )rZ   r-  rd  r[   r`   r)   r)   r/   :test_convert_categories_to_array_with_string_pyarrow_dtype  s   

r;  c                  C   s(  t dt jg dddi} t| }tg dt }|d d|s)J t	dt
 fg}tj| |d}tg dt
 }|d d|sPJ t| d }||s^J tj| d t
 d}||spJ t| d j}||sJ tj| d jt
 d}||sJ d S )Nr   r  Int64r   r   rR  rQ  )r6   r7   rh   rK   r_   rg   r   r  rP   r@   r   rv   )rZ   r`   r[   r@   r"  r)   r)   r/   test_array_protocol  s    
r=  c                       s0   e Zd Z fddZdd Zedd Z  ZS )DummyExtensionTypec                       t  t d d S )Nz,pyarrow.tests.test_pandas.DummyExtensionTypesuper__init__rK   r   r9  	__class__r)   r/   rB       zDummyExtensionType.__init__c                 C      dS Nr	  r)   r9  r)   r)   r/   __arrow_ext_serialize__     z*DummyExtensionType.__arrow_ext_serialize__c                 C   s"   |dksJ |t  ksJ |  S rG  )rK   r   )clsstorage_type
serializedr)   r)   r/   __arrow_ext_deserialize__  s   z,DummyExtensionType.__arrow_ext_deserialize__)r  r  r  rB  rH  classmethodrM  __classcell__r)   r)   rC  r/   r>    s
    r>  c                 C   s&   t jg dt  d}t jt |S )Nr   rQ  )rK   rg   r   ExtensionArrayfrom_storager>  )r   rd   storager)   r)   r/   PandasArray__arrow_array__  s   rS  c                 C   s   t jg dt  d}t jt |}| jtjj	dt
dd | jtjjdt
dd tjdddd	jtd
djfD ]C}t |}||sGJ t t|}||sVJ t t|}||seJ t td|idd}||s|J q9d S )Nr   rQ  __arrow_array__F)raising
2012-01-01r   Dr  r   r   r   r   )rK   rg   r   rP  rQ  r>  setattrr6   r{  PeriodArrayrS  IntervalArrayr  r  rP   rh   r   r_   r7   r  r  )monkeypatchrR  r[   rm   r`   r)   r)   r/   *test_array_protocol_pandas_extension_types%  s(   
 r\  c                 C   s   t |tjr	|}n|d}| }tj|d dd|j|jt|  }|d }|d urAtj	
t t|d |g}t|}n	tjt|td}tjj| | dd}|S )Nr   r'  r   r   F)ru   )r   rK   rQ  r  buffersr8   
frombufferoffsetr   BooleanArrayfrom_buffersr  r  r  r    r6   r{  IntegerArrayru   )r   rg   rm   buflistr   bitmaskro   int_arrr)   r)   r/   _Int64Dtype__from_arrow__?  s    
rf  c                 C   sZ  t g dt jg dddg dd}t|}| }t|jd jj	t
	dks-J t|jd	 jj	t  ks<J t|| t d
t jg dddi}t|}| }t|jd jj	t  kshJ t|| tt jtdk r| t jjjjd n
| t jjjjd | }tt|jd	ksJ t|jd jj	t
	dksJ d S )Nr   rP  r<  r   )r   r   r   rc  r   r   r   r   r  	1.3.0.dev__from_arrow__)r6   r7   rg   rK   r_   rO   r  r  rv   r   r8   
Int64DtyperX   rY   r   r  delattrcorer{  integer_IntegerDtypeNumericDtyper   )r[  rZ   r_   r`   r   r  r)   r)   r/   test_convert_to_extension_arrayU  s2   
 
$ro  c                       s,   e Zd Z fddZdd Zdd Z  ZS )MyCustomIntegerTypec                    r?  )Nz-pyarrow.tests.test_pandas.MyCustomIntegerTyper@  r9  rC  r)   r/   rB  z  rE  zMyCustomIntegerType.__init__c                 C   rF  rG  r)   r9  r)   r)   r/   rH  ~  rI  z+MyCustomIntegerType.__arrow_ext_serialize__c                 C   s   t  S r{  )r6   ri  r9  r)   r)   r/   ro    s   z#MyCustomIntegerType.to_pandas_dtype)r  r  r  rB  rH  ro  rO  r)   r)   rC  r/   rp  x  s    rp  c                 C   sz  t g dt  }t jt |}t d|i}| }t|j	d j
jt ks,J tjg ddd}t|| | }t|j	d j
jt ksNJ tdtjg dddi}t|| ttjtdk rv| tjjjjd n
| tjjjjd | }t|j	d j
jtdksJ tg d}t|| tt |  W d    d S 1 sw   Y  d S )	Nr   r   r   r<  r   rg  rh  r   )rK   rg   r   rP  rQ  rp  r_   rO   r  r  rv   r   r6   ri  rh   rX   ri   r7   rY   r   r  rj  rk  r{  rl  rm  rn  r8   r   r$  r%  )r[  rR  rm   r_   r`   r[   r)   r)   r/   /test_conversion_extensiontype_to_extensionarray  s2    
"rq  c               	   C   s4  t dt g dt  i} |  }|d jtdksJ | jt  t ij	d}t
|d jtjs7J t dt g dt  i} | jt  t ij	d}|d jtdks_J t tdtjg dddi} |  }t
|d jtjsJ | jt  tdij	d}t
|d jtjsJ d S )	Nr   r   r   types_mapperr   r<  r   rW  )rK   r_   rg   r   rO   r   r8   r6   ri  r  r   r   r7   PeriodDtype)r_   r`   r)   r)   r/   'test_to_pandas_extension_dtypes_mapping  s   "ru  c                  C   s   t tjt dk rtd ttjdt ddtjdt	 ddg} t
| }ttd| g}tddt	d	d
iddd d
igd|i}tjj||d}|jtj
d}tj|| d S )Nz1.5.2zTest relies on pd.ArrowDtyper=  Fr  rJ  Tr   r   )r=  rJ  rR  rr  )r   r6   r  r   r8  rK   ra  r   r  r   
ArrowDtyper@   r7   r8   r!  rM   rN   rO   r  rY   )rL  pd_typer@   df0r_   r  r)   r)   r/   4test_to_pandas_extension_dtypes_mapping_complex_type  s&   


ry  c                  C   s   t tjt dk rtd tjddddjtddjfD ],} t| 	 }t
| }t|| td	| id	 	 }tj
| d	d
}t|| qd S )Nz1.1z'ExtensionDtype to_pandas method missingrV  r   rW  r  r   r   ra   re   )r   r6   r  r   r8  r  rg   r  rK   rO   rh   rX   ri   r_   )rm   r`   r[   r)   r)   r/   test_array_to_pandas  s   

rz  c               	   C   s   t jt jdddd} t| }tt jtdkr%t|	 j
| j
 d S t|	 j
t jdddddddddgd	d
 d S )Nr   r   )r  endr   z1.0r   )r  r  r2   rE   r   )r6   r7   r  rK   r_   r   r  rX   assert_index_equalrO   r   r   rZ   r_   r)   r)   r/   5test_roundtrip_empty_table_with_extension_dtype_index  s   
r~  r   r   r   c                 C   s~   t tjt dk rtd tjddgddgddgd	tt d
	| }|
 }t|}|jtjd}t|| d S )Nz1.5.0zArrowDtype missingr   r2   r   r   r   r   rc  r   rr  )r   r6   r  r   r8  r7   rv  rK   r   r   ru   r_   rO   rX   rY   )r   rZ   r[   r_   r`   r)   r)   r/   !test_to_pandas_types_mapper_index  s   

r  c                  C   s   t tjt dk rtd tg dt } t t ij	}| j
|d}|jt ks0J t d ij	}| j
|d}|jtdksGJ t t ij	}| j
|d}|jtdks`J d S Nz1.2.0z$Float64Dtype extension dtype missingr   rr  r   )r   r6   r  r   r8  rK   rg   r   ri  r  rO   r   r8   r   Float64Dtyper   rs  r`   r)   r)   r/   !test_array_to_pandas_types_mapper	  s   
r  c                  C   s   t tjt dk rtd ttg dt g} t	| tj
s$J t t ij}| j|d}|jt ks<J t d ij}| j|d}|jtdksSJ t t ij}| j|d}|jtdkslJ d S r  )r   r6   r  r   r8  rK   rP  rg   r   r   r  ri  r  rO   r   r8   r   r  r  r)   r)   r/   )test_chunked_array_to_pandas_types_mapper   s   
r  c                  C   s|  g d} g d}t j| dd}t j|dd}t jg ddd}d}d}tjd	| itjd
ddddd}t jj||gd	dgd}|dt	dgd d ddddidgd	d	ddd dddddd dgddi}|
 }	t|	| tjd| itjd
ddddd}
t jj||gd|gd}|dt	|gd d ddddidgd	d	ddd dd|ddd dgddi}|
 }t||
 tjd	| itjd
ddd dd}t jj||gd	|gd}|dt	|gd d ddddidgd	d	ddd dd |ddd dgddi}|
 }t|| tjd	| itjd
dddd|gd}t jj|||gd	d|gd}|dt	d|gd d ddddidgd	d	ddd dddddd dd |ddd dgddi}|
 }t|| tjd	| itjd
ddd d|gd}t jj|||gd	||gd}|dt	||gd d ddddidgd	d	ddd dd |ddd dd |ddd dgddi}|
 }t|| d S )N)r   r=  NrJ  )r   r   r   r   r  rQ  r  r   r   __index_level_1__r   r   r   r2   r  r   r   r      pandasr  rE   r  r  )rf   r   r  r  r  z0.23.4)r   r  rQ   r  )rK   rg   r6   r7   r   rM   r   replace_schema_metadatajsondumpsrO   rX   rY   )a_valuesb_valuesa_arrowb_arrowrng_index_arrow
gen_name_0
gen_name_1e1r  r1e2r  r2e3t3r3e4t4r4e5t5r5r)   r)   r/   )test_metadata_compat_range_index_pre_0_12=  s  


r  c                  C   s   g d} g d}t j| dd}t j|dd}tj| |dtjddd	d
dd}t ||d}|dtd d d dddgd ddddd ddddgdd
dd	ddgddi}|	 }t
|| d S )Nr   )r   r   r   r  r   rQ  r  r   r   r   r2   r  r   r   r  rE   zmixed-integer)r   r  rf   r  r  r   )r  rf   r  r  r   r  r<   )kindrf   r  r   r  z0.25.0)r  rQ   r   r  )rK   rg   r6   r7   r   r_   r  r  r  rO   rX   rY   )r  r  r  r  r[   r_   r`   r)   r)   r/   'test_metadata_compat_missing_field_name  sV   r  c                  C   sL   t d} ttjtjdd| dd}|jj}|d d d dks$J d S )	Nr   r   r   re   r   r   rf   6)	r8   r   rK   r_   r6   r7   r   r@   r   rf   r_   r  r)   r)   r/   .test_metadata_index_name_not_json_serializable  s   
r  c                  C   sF   d} t tjtjdd| dd}|jj}|d d d dks!J d S )Nr   r   r   re   r   r   rf   )rK   r_   r6   r7   r   r@   r   r  r)   r)   r/   -test_metadata_index_name_is_json_serializable   s   r  c               
   C   s   t tddtddtddtddgtddtddtddtddgd	} | d
 d| d
< | jj| jjftdtdfksMJ | S )Nz0001-01-01 00:00r"  z2012-05-02 12:35z2012-05-03 15:42z3000-05-03 15:42z1991-01-01 00:00r  z2050-05-03 15:42)
dateTimeMs
dateTimeNsr  rE   r  zM8[ns])r6   r7   r8   r  r!  r  r   r  rB  r)   r)   r/   make_df_with_timestamps'  s"   








r  c                 C   sL   t  }tj|}| d }t|| t|}|jdd}t	|| d S )Nztimestamps_from_pandas.parquetTtimestamp_as_object)
r  rK   rM   rN   pqwrite_table
read_tablerO   rX   rY   )tempdirrZ   r_   filenamer`   r   r)   r)   r/    test_timestamp_as_object_parquetB  s   
r  c                  C   s.   t  } tj| }|jdd}t| | d S )NTr  )r  rK   rM   rN   rO   rX   rY   )rZ   r_   r   r)   r)   r/   %test_timestamp_as_object_out_of_rangeO  s   r  
resolutionr  r   r  r  i  i  c                 C   s   t j|gt j| |dd}t d|i}|jdd|jddd fD ]9}|jtks+J t|d ts4J |rH|d j	d us?J |d j	
|}n|d j	d u sQJ |}|d |ks[J q"d S )Nr  rQ  r   Tr  r   )rK   rg   r  r_   rO   r   rE   r   r   r3  fromutc)r  r   r  rm   r_   r`   r[   r)   r)   r/   'test_timestamp_as_object_non_nanosecondX  s   
r  c               	   C   sl   t d} dd l}| d}||ddddd}td	t|gi}|jd
d}t||ks4J d S )Nr/  r   x   i  r   r  rp  9   timestamp_colTr  )	r   r4  r   r6  localizerK   r_   rg   rO   )r/  r   r   r  r_   r`   r)   r)   r/   %test_timestamp_as_object_fixed_offsetq  s   

r  c                   C   s   t d d S )Nzpandas_threaded_import.py)r   r)   r)   r)   r/   test_threaded_pandas_import}  s   r  c                  C   s^   t d} t t j| ksJ tdt  gi}tj|}|  t t j| ks-J d S )Nm8r   )	r8   r   r  r6   r7   rK   rM   rN   rO   )r[   rZ   r   r)   r)   r/   $test_does_not_mutate_timedelta_dtype  s   
r  c                  C   sf   ddl m}  d| dddig}| ddd	d
g}t||d}| }|d d  |d ks1J d S )Nr   )r   timedelta_1r  r   )r  r  r   (   r0  )r<  r  r  )r  timedelta_2r  )r   r   rK   r_   rO   to_pytimedelta)r   r  r  r_   rZ   r)   r)   r/   %test_does_not_mutate_timedelta_nested  s    r  c                  C   sP  t t dt t t  t t dt  gg} t jdggd dddifgddd ifdddifgggg| d	}t	
ddggd dddifgddd ifdddifgggi}t	
dd
d igd dddiidd iddidggi}| }|jdd}t|| t|| t jj|| d	}||sJ t jj|| d	}||sJ d S )Nr   r   )r   Nr2   s   abcr   r   s   defrR  r   r  strictmaps_as_pydicts)rK   r@   r   rS  r  r   ra  r  r_   r6   r7   rO   rX   rY   rM   rN   rP   )r@   r_   expected_default_dfexpected_as_pydicts_df
default_dfas_pydicts_dftable_default_roundtriptable_as_pydicts_roundtripr)   r)   r/   ,test_roundtrip_nested_map_table_with_pydicts  sJ   "r  c               	      s  t ddg} t g d}t g t  }t ddgddggt t  }t g ddd	gd
dggt t  }t g t t  }t jddg| |}t jg d||}t jddg||}t t jddg|dt jddg|ddt jddg|dg}	|		 }
t
dddgfdddgfggdd
dgfggg g}|	j	dd}t
ddgddgdgdd
dgigg g}|	dd}|	 }t
dd
dgfggg g}|j	dd}t
dd
dgigg g}t ' tddt t|
| t|| t|| t|| W d   n	1 sw   Y  t t t  t t   dt
jddf fdd}||
|	 |||	 ||| ||| dS )z=
    Slightly more robust test with chunking and slicing
    r   r=  )rJ  r  r  r  r   r   r   r  Nr  r  r  r   r2   )r   r   r   r   r  r  r  r   r=  r   rF   rG   rI  returnc                    s4   t t jj|  d}|jdd ||sJ d S )NrQ  Tr  )rK   rP  rQ  rN   r   rP   )rI  r   array_roundtripr  r)   r/   assert_roundtrip  s   zMtest_roundtrip_nested_map_array_with_pydicts_sliced.<locals>.assert_roundtrip)rK   rg   ry  rS  r  r   rP  r  r  rO   r6   rh   rT   rU   rV   rW   rX   ri   r  )keys_1keys_2keys_3items_1items_2items_3map_chunk_1map_chunk_2map_chunk_3rP  series_defaultexpected_series_defaultseries_pydictsexpected_series_pydictsslicedseries_default_slicedexpected_series_default_slicedseries_pydicts_slicedexpected_series_pydicts_slicedr  r)   r  r/   3test_roundtrip_nested_map_array_with_pydicts_sliced  sz   
 


r  c                  C   s6  t g d} t ddgddgddggt t  }dd	g}t j|| |}t t  t t  }tt j	j
 |jd
d W d    n1 sLw   Y  |jdd}tddgddgdg}|t jj||drqJ | }tdddgfdddgfdddgfgg}|t jj||dsJ t|t|ksJ t||D ]2\}	}
t|	t|
ksJ t|	 |
 D ]\}}|d |d ksJ t|d |d sJ qqt|t|ksJ t||D ]0\}	}
t|	t|
ksJ t|	|
D ]\}}|d |d ks
J t|d |d sJ qqd S )Nr9  r   r   r   r  r   r3  r   r   r  r  lossyr  rQ  r   r=  r   )rK   rg   rS  ry  r  r   r  r   r$  r8  ArrowExceptionrO   r6   rh   rP   rQ  rN   r   r  r  r8   array_equal)rz  r  r  mapsr  r  r  r  r  row1row2tup1tup2r)   r)   r/   4test_roundtrip_map_array_with_pydicts_duplicate_keys  sH    r  c            
   	   C   s\  t ddgddgg dgd dgddggt t  } t g d	}g d
}t j|| |}tt |j	dd W d    n1 sCw   Y  |	 }t
ddgdfddgdfgg dfdgdfd dgdfddgdfgg}t|t|ksxJ t||D ].\}}t|t|ksJ t||D ]\}}	t|d |	d sJ |d |	d ksJ qq}d S )Nr   r   r   r  r  r  r  r  )r   r=  rJ  r  r  r  )r   r2   r   r  r  r   r=  rJ  r  r  r  r   r   )rK   rg   rS  ry  r  r   r   r$  rb  rO   r6   rh   r   r  r8   r  )
rz  r  r  r  rI  r  r  r  r  r  r)   r)   r/   %test_unhashable_map_keys_with_pydictsJ  s.    $r  c                  C   s^   t jt jdddddd} tdt| i}|d}| }|jdks'J t	
||  d S )N2012r2   r   rd  datetime_columnre   )r6   rh   r   rK   r_   rg   r  rO   rf   rX   ri   )rI  r_   	table_colr`   r)   r)   r/   )test_table_column_conversion_for_datetimek  s   
r  c                  C   s8   t t jdddd} t| }| }t||  d S )Nr  r2   r   rd  )r6   rh   r   rK   rg   rO   rX   ri   )rI  rm   r`   r)   r)   r/   "test_array_conversion_for_datetimez  s   
r  c            	   
   C   s  ddd} dd }| t d|||gi d|i}| t d|||gi |g}| t d|||gi |g}| t d	|||gi d|i}| t d
|||gi d|i}tt ttdt fg}td|fg}| t d|||gi|d d S )Nc                 S   sN   t jj| |d}|jdd |dj}|dksJ t|jddd|  d S )NrR  Tr  r   r   r  )r  r  )	rK   rM   rN   r   r  r  rX   rY   rO   )rZ   r@   tabr  r)   r)   r/   	roundtrip  s   
z-test_nested_chunking_valid.<locals>.roundtrip   0i T*r  struct_fieldr  rh  lossolr   r  rR  r{  )	r6   r7   rK   r  ry  rS  ra  r  r@   )	r  r.   ra  rh  r  r  
map_of_losmap_typer@   r)   r)   r/   test_nested_chunking_valid  s&   



r  c                  C   sR   t jddgddggddgd} tj| }|jdd	gksJ | | s'J d S )
Nrf  rg  rh  g?s   col1s   col2r   r   r   )r6   r7   rK   rM   rN   r   rO   rP   r}  r)   r)   r/    test_bytes_column_name_to_pandas  s   r  c                   C   s   t d d S )Nzarrow_39313.py)	test_utilr   r)   r)   r)   r/   !test_is_data_frame_race_condition  s   r  c                  C   s|   t dg di} td| jd< tjtdd t	| }W d    n1 s(w   Y  t
|jjd }|d r<J d S )	Nr.   r   z2025-10-28T14:20:42r  z'Could not serialize pd.DataFrame.attrs:r  r  
attributes)r6   r7   r   fromisoformatattrsr   r   r   rK   r_   r  loadsr@   r  )rZ   df_tablepd_metadatar)   r)   r/   $test_json_unserializable_pd_df_attrs  s   r  )r   )NFNTNFF)NNrG  r{  )r   N)r  r   r  multiprocessingrO  r  rT   collectionsr   r   r   r   r   r   
hypothesisr  hypothesis.strategies
strategiesr  r   numpyr8   numpy.testingr  rz   r   r  r  numpy.exceptionsImportErrorpyarrow.pandas_compatr	   r
   pyarrow.tests.utilr   r   r   pyarrow.tests.strategiestestsr  utilr  pyarrow.vendored.versionr   pyarrowrK   r   r  pandasr6   pandas.testingrX   pandas_examplesr   r   r  
pytestmarkr?   rb   rn   rx   r}   r~   r  r  r  r  r  r  r?  rT  r  r&  rC  rE  rF  r  r  r  r  r  r  r  r{  pandas_compatible_typesr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r  r   r   rO  rV  r  ry  rS  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r,  r4  r5  r6  r8  r;  r=  ExtensionTyper>  rS  r\  rf  ro  rp  rq  ru  ry  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r>  r  r  r  r  r)   r)   r)   r/   <module>   s  
    G  '

     	  h    u d<  



Z%

















144,5#$

 *3
	 
-N4!
&