o
    Zh%                    @   sJ  d dl Z d dlZd dlmZmZ d dlmZ 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Z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Zd dlZd dlZd dlZd dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z% dd Z&dDddZ'dd Z(dd Z)dd Z*G dd dZ+dd Z,dd Z-dd Z.dd Z/G dd de j0Z1G d d! d!e1Z2G d"d# d#e2Z3G d$d% d%e2Z4G d&d' d'e1Z5G d(d) d)e5Z6G d*d+ d+e5Z7G d,d- d-Z8G d.d/ d/e8ej9Z:G d0d1 d1e8ej9Z;d2d3 Z<d4d5 Z=d6d7 Z>d8d9 Z?ej@Ad:d;d< d=d< d>d< d?d< fd@dA ZBdBdC ZCdS )E    N)datedatetime)Decimal)
open_csvread_csvReadOptionsParseOptionsConvertOptionsISO8601	write_csvWriteOptions	CSVWriter
InvalidRow)utilc                  c   s4    t j} | E d H  | D ]}| D ]}|| V  qqd S N)stringascii_lowercase)lettersfirstsecond r   M/var/www/html/lang_env/lib/python3.10/site-packages/pyarrow/tests/test_csv.pygenerate_col_names0   s   
r      
   
Tc           
      C   s   t jdjdd| |fd}t }ttt	 | }|r*|
d| |
| |jD ]}|
dtt| |
| q-|  }dd |D }tj||}	||	fS )N*   r     )size,c                 S   s   g | ]}t j|t  d qS ))type)paarrayint64).0ar   r   r   
<listcomp>D   s    z#make_random_csv.<locals>.<listcomp>)nprandomZRandomStaterandintioStringIOlist	itertoolsislicer   writejoinTmapstrgetvalueencoder!   Tablefrom_arrays)
num_colsnum_rowslinesepwrite_namesZarrcsv	col_namesrowcolumnsexpectedr   r   r   make_random_csv9   s   

rA   c                 C   s.   t  }|d|  |d |  S )Nr   
)r*   r+   r/   r0   r4   r5   )column_namesr<   r   r   r   make_empty_csvI   s   
rD   c                 K   s   |  }|  D ])\}}t|||d ksJ d| |D ]}t||| t|||ks/J dqqtt d|_W d   n1 sDw   Y  dd |  D }| di |}|  D ]\}}t|||ksjJ q]dS )	zD
    Check setting and getting attributes of an *Options class.
    r   zincorrect default value for zfailed setting valueTNc                 S   s   i | ]	\}}||d  qS )   r   )r$   namevaluesr   r   r   
<dictcomp>a   s    z'check_options_class.<locals>.<dictcomp>r   )itemsgetattrsetattrpytestraisesAttributeErrorZzzz_non_existent)clsattr_valuesoptsrF   rG   vZnon_defaultsvaluer   r   r   check_options_classP   s"   rT   c                 K   sL   | di |}| |j||jd}| D ]\}}t|||ks#J qd S )N)protocolr   )loadsdumpsHIGHEST_PROTOCOLrI   rJ   )rO   picklerrP   rQ   Znew_optsrF   rS   r   r   r   check_options_class_picklingh   s   
rZ   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
InvalidRowHandlerc                 C   s   || _ g | _d S r   )resultrows)selfr]   r   r   r   __init__q   s   
zInvalidRowHandler.__init__c                 C   s   | j | | jS r   )r^   appendr]   )r_   r>   r   r   r   __call__u   s   zInvalidRowHandler.__call__c                 C   s   t |to
|j| jkS r   
isinstancer\   r]   r_   otherr   r   r   __eq__y   s   

zInvalidRowHandler.__eq__c                 C   s   t |t p|j| jkS r   rc   re   r   r   r   __ne__}   s   
zInvalidRowHandler.__ne__N)__name__
__module____qualname__r`   rb   rg   rh   r   r   r   r   r\   p   s
    r\   c              
   C   s  t }| }t|ddgddgg ddggddgddgdd	gd
 t|| ddddgddd	d |jdks3J d|_|jdks=J |dd}|jdksIJ |  d}tjtj|d | }d|_|  W d    n1 slw   Y  d}tjtj|d | }d|_	|  W d    n1 sw   Y  d}tjtj|d | }d|_
|  W d    n1 sw   Y  d}tjtj|d | }d|_d|_|  W d    d S 1 sw   Y  d S )NTFr      abcdutf8utf16   )use_threads	skip_rowsrC   autogenerate_column_namesencodingskip_rows_after_names)rY   rr   rs   rC   rt   ru   rv   90  i  
block_sizez-ReadOptions: block_size must be at least 1: 0matchz-ReadOptions: skip_rows cannot be negative: -1z9ReadOptions: skip_rows_after_names cannot be negative: -1zTReadOptions: autogenerate_column_names cannot be true when column_names are providedr%   b)r   rT   rZ   ry   validaterL   rM   r!   ArrowInvalidrs   rv   rt   rC   )pickle_modulerO   rQ   r{   r   r   r   test_read_options   s`   






"r   c                 C   s$  t }td}t|ddgddgg dddgddgddgd |gd t|| dddddd|d		 |   | }d
|_|  d}tjtj	|d | }d|_|  W d    n1 s[w   Y  tjtj	|d | }d|_|  W d    n1 s}w   Y  d}tjtj	|d | }d|_
|  W d    n1 sw   Y  tjtj	|d | }d|_
|  W d    n1 sw   Y  d}tjtj	|d | }d|_|  W d    n1 sw   Y  tjtj	|d | }d|_|  W d    d S 1 sw   Y  d S )Nskipr   xFy)"zFT)	delimiterescape_char
quote_chardouble_quotenewlines_in_valuesignore_empty_linesinvalid_row_handler)rY   r   r   r   r   r   r   r   	z,ParseOptions: delimiter cannot be \\r or \\nrz   rB   z-ParseOptions: quote_char cannot be \\r or \\nz.ParseOptions: escape_char cannot be \\r or \\n)r   r\   rT   rZ   r   r   rL   rM   r!   r   r   r   )r   rO   Zskip_handlerrQ   r{   r   r   r   test_parse_options   sp   

	





$r   c                 C   sx  t }| }t|ddgddgddgddgg ddggddgddgg tdggd	 t|| ddddddgddtdgd	
 tt d
|_W d    n1 sKw   Y  |jdksWJ d|_|jdksaJ |j	i kshJ t
 t
 d|_	|j	t
 t
 dksJ ddd|_	|j	t
 t
 dksJ t
dt
 fdt
 fg}||_	|j	t
 t
 dksJ dt
 fg|_	|j	dt
 iksJ tjtdd dd i|_	W d    n1 sw   Y  tt d|_	W d    n1 sw   Y  t|jtsJ d|jv sJ d|jv sJ ddg|_|jddgks#J t|jts,J ddg|_|jddgks;J t|jtsDJ ddg|_|jddgksSJ |jg ks[J tg|_|jtgkshJ |dt
 iddgddgdd gd!td"gd#}|j	dt
 iksJ |jddgksJ |jdd gksJ |jddgksJ |jd!ksJ |jtd"gksJ d S )$NTF.r   defabcz%y-%m)
check_utf8strings_can_be_nullquoted_strings_can_be_nulldecimal_pointinclude_columnsinclude_missing_columnsauto_dict_encodetimestamp_parsers)	rY   r   r   r   r   r   r   r   r   z..r   韆 )r~   cint16null)rR   wr%   r~   r}   r   zDataType expectedrz    N/AZxxxZyyyNnnr1   ttFffi  z%Y-%m-%d)column_typesnull_valuestrue_valuesfalse_valuesauto_dict_max_cardinalityr   )r	   rT   r
   rZ   rL   rM   
ValueErrorr   r   r   r!   r   float32r   schemaint32r   binary	TypeErrorrd   r   r,   r   r   r   )r   rO   rQ   r   r   r   r   test_convert_options   s   





r   c                  C   s   t } |  }t| ddgg dg dd |jdksJ d|_|jdks$J | dd	}|jdks0J |  d
}tjtj|d |  }d|_|  W d    d S 1 sTw   Y  d S )NTF)r   r   |)needednone	all_valid)include_headerr   quoting_styler   rw   i&  )
batch_sizez.WriteOptions: batch_size must be at least 1: 0rz   )r   rT   r   r   rL   rM   r!   r   )rO   rQ   r{   r   r   r   test_write_optionsF  s$   

"r   c                   @   s\   e Zd ZdZejdd Zeejdd Ze	dd Z
dd	 Zd
d Zdd Zdd ZdS )BaseTestCSVzDCommon tests which are shared by streaming and non streaming readersc                 K      t )z
        :param b: bytes to be parsed
        :param kwargs: arguments passed on to open the csv file
        :return: b parsed as a single RecordBatch
        NotImplementedErrorr_   r~   kwargsr   r   r   
read_bytesa  s   zBaseTestCSV.read_bytesc                 C   r   )z#Whether this test is multi-threadedr   r_   r   r   r   rr   j  s   zBaseTestCSV.use_threadsc                 C   s$   | j t|ks	J | j|ksJ d S r   )num_columnslenrC   )tablenamesr   r   r   check_namesp  s   zBaseTestCSV.check_namesc                 C   sP  d}t  }d|_| j||d}| |ddg | ddgdd	gd
ks&J d|_| j||d}| |dd	g | g g dksCJ d|_ttj | j||d}W d    n1 s^w   Y  d}d|_| j||d}| |ddg | dgd	gdksJ d|_ddg|_	| j||d}| |ddg | g g dksJ d S )N   ab,cd
ef,gh
ij,kl
mn,op
rE   read_optionsefghijmnklop)r   r   rl   )r   r         abcd
,,,,,
ij,kl
mn,op
r   )r   r   )
r   rs   r   r   	to_pydictrL   rM   r!   r   rC   r_   r^   rQ   r   r   r   r   test_header_skip_rowsu  sH   
z!BaseTestCSV.test_header_skip_rowsc           	      C   s^  d}t  }d|_| j||d}| |ddg | ddgdd	gd
ks&J d|_| j||d}| |ddg | g g d
ksCJ d|_| j||d}| |ddg | g g d
ks`J d}d|_ddg|_| j||d}| |ddg | ddgdd	gdksJ t  }d}d|_t }d|_| j|||d}| |ddg | dgd	gd
ksJ d|_d|_| j|||d}| |ddg | dgd	gd
ksJ t  }t	ddd\}}d|_t
|d |_| j||d}|j|jksJ |jdksJ | }|  D ]\}}|dd  || ksJ q| j|||d}|j|jks0J |jdks8J | }|  D ]\}}|dd  || ksSJ qBt	dddd\}}t  }d|_d |_|jj|_| j|||d}|j|jks}J |j|j|j |j ksJ | }|  D ]\}}||j|j d  || ksJ qd S )!Nr   rE   r   rm   rn   r   r   r   r   rm   rn   rl   r   r   r   f0f1r   r   s#   ab,cd
"e
f","g

h"
"ij","k
l"
mn,opTr   parse_options      r   r8   r9   i     d      F)r8   r9   r;   %   )   )r   rv   r   r   r   rC   r   r   ry   rA   r   r   r9   rI   rs   r   )	r_   r^   rQ   r   
parse_optsr@   Z
table_dictrF   rG   r   r   r   test_skip_rows_after_names  s   




z&BaseTestCSV.test_skip_rows_after_namesc                    s   fdd}t dddd\}}t }t|d |_t }dt i|_|d	 }|d
d}tj	tj
|d  j|||d W d    n1 sGw   Y  |d }|dd|}	tj	tj
|	d  j|||d W d    n1 sqw   Y  d}
||
 }|dd|
dd d}tj	tj
|d  j|||d W d    n1 sw   Y  d|_tj	tj
|d  j|||d W d    n1 sw   Y  tj	tj
|	d  j|||d W d    n1 sw   Y  tj	tj
|d  j|||d W d    n	1 sw   Y  d|_t dddd\}}g d|_|d	 }|d
d}tj	tj
|d  j|||d W d    n	1 sCw   Y  ||
 }|dd|
dd d}tj	tj
|d  j|||d W d    n	1 suw   Y  |d }|dd}	|	t|}	tj	tj
|	d  j|||d W d    n	1 sw   Y  d|_tj	tj
|d  j|||d W d    n	1 sw   Y  tj	tj
|	d  j|||d W d    d S 1 sw   Y  d S )Nc                    s(    j rd}nd|}| j|g|R  S )Nr   z	Row #{}: )rr   format)Z
msg_formatr>   argsZrow_infor   r   r   
format_msg  s   
z@BaseTestCSV.test_row_number_offset_in_errors.<locals>.format_msgr   r   T)r;   rl   r%   s   1,2
z{}Expected 4 columns, got 2f   rz   r   convert_optionss	   a,b,c,d
zDIn CSV column #0: {}CSV conversion error to int32: invalid value 'a's  this is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long rowthis is a long row,3
z#{}Expected 4 columns, got 2: {} ...r   `   zutf-8/   Fr%   r~   r   de      )rA   r   r   ry   r	   r!   r   r   rL   rM   r   r   decoderv   rC   r   rs   )r_   r   r<   _r   r   Zcsv_bad_columnsZmessage_columnsZcsv_bad_typeZmessage_valueZlong_rowZcsv_bad_columns_longZmessage_longr   r   r    test_row_number_offset_in_errors  s   


$z,BaseTestCSV.test_row_number_offset_in_errorsc                    sp  d}t  }tjtdd  j||d W d    n1 sw   Y  td|_ j||d}| ddgdd	gd
ks>J  fdd}tdd|ddtdd|ddg}|jj	|ks^J td|_tjtdd  j||d W d    n1 s|w   Y  tdd|ddg}|jj	|ksJ td|_|
||} j||d}| ddgdd	gd
ksJ d S )Ns   a,b
c
d,e
f,g,h
i,j
zExpected 2 columns, got 1: crz   r   r   r   iejr}   c                    s    j rd S | S r   )rr   )r   r   r   r   row_num  s   z5BaseTestCSV.test_invalid_row_handler.<locals>.row_numr   rE   r   rl   r   zf,g,herror)r   rL   rM   r   r   r\   r   r   r   r^   rV   rW   )r_   r   r^   r   r   r   Zexpected_rowsr   r   r   test_invalid_row_handlers  sF   


z$BaseTestCSV.test_invalid_row_handlerN)ri   rj   rk   __doc__r   abstractmethodr   propertyrr   staticmethodr   r   r   r   r   r   r   r   r   r   ^  s    

-ihr   c                   @   s"  e Zd Zdd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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?d@ Z!dAdB Z"dCdD Z#dEdF Z$dGS )HBaseCSVTableReadT)validate_fullc                O   sL   t | jtsJ |dt }| j|_t|g|R i |}|j|d |S )a=  
        Reads the CSV file into memory using pyarrow's read_csv
        csv The CSV bytes
        args Positional arguments to be forwarded to pyarrow's read_csv
        validate_full Whether or not to fully validate the resulting table
        kwargs Keyword arguments to be forwarded to pyarrow's read_csv
        r   full)rd   rr   bool
setdefaultr   r   r   )r_   r<   r  r   r   r   r   r   r   r   r     s   zBaseCSVTableRead.read_csvc                 K      | j t|fi |S r   )r   r!   	py_bufferr   r   r   r   r        zBaseCSVTableRead.read_bytesc                 C   s~   d}dgdgd}t |}| |}| |ksJ t | }tt | | W d    d S 1 s8w   Y  d S )Ns   a,b
1,2
rE   r   r}   )	r*   BytesIOr   r   r+   r   rL   rM   r   )r_   dataexpected_databior   sior   r   r   test_file_object  s   

"z!BaseCSVTableRead.test_file_objectc                 C   s@   d}|  |}t|tjsJ | |g d |jdksJ d S )N   abc,def,gh
)r   r   r   r   )r   rd   r!   r6   r   r9   r_   r^   r   r   r   r   test_header  s
   
zBaseCSVTableRead.test_headerc                 C   s0   d}dgdgd}|  |}| |ksJ d S )Ns   ﻿a,b
1,2
rE   r   r}   r   r   )r_   r^   r  r   r   r   r   test_bom  s   
zBaseCSVTableRead.test_bomc                 C   sn   g d}dD ].}d|fD ]'}| || }| |}t| dks$J | g dg ddks3J qqd S )N)s   a,bs   1,2s   3,4s   56,78)   
      
    rE   )rE   rl   8   )r   r   N   r}   )r0   r   r   
to_batchesr   )r_   r^   Zline_endingZfile_endingr  r   r   r   r   test_one_chunk  s   
zBaseCSVTableRead.test_one_chunkc                 C   s  d}t  }ddg|_| j||d}| |ddg | g dg ddks(J d|_| j||d}| |ddg | d	gd
gdksGJ d|_| j||d}| |ddg | g g dksdJ d|_ttj	 | j||d}W d    n1 sw   Y  d|_g d|_tjtj	dd | j||d}W d    n1 sw   Y  d}d|_ddg|_| j||d}| |ddg | dd	gdd
gdksJ d S )Nr   r   r   r   rm   r   r   r   rn   r   r   r   r   r   rl   r   r   r   r   r   )r   r   r   Expected 3 columns, got 2rz   r   r   r   r   )
r   rC   r   r   r   rs   rL   rM   r!   r   r   r   r   r   test_header_column_names  sV   


z)BaseCSVTableRead.test_header_column_namesc                 C   s   d}t  }d|_| j||d}| |ddg | g dg ddks&J d	|_| j||d}| |ddg | d
gdgdksEJ d|_ttj	 | j||d}W d    d S 1 saw   Y  d S )Nr   Tr   r   r   r  r  r   rl   r   r   r   )
r   rt   r   r   r   rs   rL   rM   r!   r   r   r   r   r   %test_header_autogenerate_column_names  s(   "z6BaseCSVTableRead.test_header_autogenerate_column_namesc                 C   s   d}t  }dg|_| j||d}| |dg | dg diks#J ddg|_| j||d}tdt fdt fg}|j|ksEJ | g dg ddksTJ g d|_tj	t
d	d
 | j||d W d    d S 1 ssw   Y  d S )Nr   rm   r   r   r   r   rn   r   r   r   )rn   rm   xxrm   yyz9Column 'xx' in include_columns does not exist in CSV filerz   )r	   r   r   r   r   r!   r   r   rL   rM   KeyError)r_   r^   r   r   r   r   r   r   test_include_columns%  s0   



"z%BaseCSVTableRead.test_include_columnsc                 C   sj  d}t  }t }g d|_d|_| j|||d}tdt fdt fdt fg}|j|ks3J |	 g dg d	g ddksEJ ddg|_
dd
g|_| j|||d}tdt fd
t fg}|j|ksmJ |	 g dg ddks|J t t d|_| j|||d}tdt fd
t fg}|j|ksJ |	 g dg ddksJ d S )Nr   r'  Tr   r(  rm   r)  NNNr%  rn   r  )NNNN)r)  rn   )s   cds   ghs   kls   op)r   r	   r   r   r   r!   r   r   r   r   rC   r   r   r   r_   r^   r   r   r   r   r   r   r   test_include_missing_columnsB  sZ   






z-BaseCSVTableRead.test_include_missing_columnsc                 C   sl   d}|  |}tdt fdt fdt fg}|j|ks"J | ddgddgd	d
gdks4J d S )Ns   a,b,c
1,2,3
4,5,6
r%   r~   r   rE   r   r   r   rl      r%   r~   r   )r   r!   r   r#   r   r_   r^   r   r   r   r   r   test_simple_intso  s   


z!BaseCSVTableRead.test_simple_intsc                 C   s|   d}|  |}tdt fdt fdt fdt fg}|j|ks'J | ddgdd	gd
dgddgdks<J d S )Ns    a,b,c,d
1,2,3,0
4.0,-5,foo,True
r%   r~   r   r         ?g      @r   3fooFTr   )r   r!   r   float64r#   r   bool_r   r1  r   r   r   test_simple_varied}  s   



z#BaseCSVTableRead.test_simple_variedc              
   C   s   d}|  |}tdt fdt fdt fdt fdt fdt fg}|j|ks1J |	 g dg d	g d
g dg dg ddksLJ d S )NsC   a,b,c,d,e,f
1,2,,,3,N/A
nan,-5,foo,,nan,TRUE
4.5,#N/A,nan,,,false
r%   r~   r   r   r   f)r3  Ng      @)r   r4  N)r   r6  nanr,  )   3s   nan   )NTF)r%   r~   r   r   r   r:  )
r   r!   r   r7  r#   r   r   r   r8  r   r1  r   r   r   test_simple_nulls  s$   





z"BaseCSVTableRead.test_simple_nullsc                 C   s   t dd}d}| j||d}tdt fdt fg}|j|ks$J | g dg dd	ks3J td
d}| j|||d}tdt fdt fg}|j|ksVJ | g dg dd	kseJ d S )N;r   s   a;b
1.25;2,5
NA;-3
-4;NAr   r%   r~   )g      ?Ng      )z2,5z-3NAr}   r   )r   )r   r   )z1.25rA  z-4)g      @g      N)r   r   r!   r   r7  r   r   r	   )r_   r   r^   r   r   r   r   r   r   test_decimal_point  s.   



z#BaseCSVTableRead.test_decimal_pointc                 C   s   d}|  |}tdt fdtdfdtdfg}|j|ks$J | ddgtdd	d	tdd
dd	gtdd	d	ddddtdd
dd	dddgdksOJ d S )Nsk   a,b,c
1970,1970-01-01 00:00:00,1970-01-01 00:00:00.123
1989,1989-07-14 01:00:00,1989-07-14 01:00:00.123456
r%   r~   sr   ns  i  rE         r   ix @ r0  )r   r!   r   r#   	timestampr   r   r1  r   r   r   test_simple_timestamps  s   
z'BaseCSVTableRead.test_simple_timestampsc                 C   sp  d}t  }| j||d}tdt fdtdfg}|j|ks#J | ddgtdd	d	tdd	d
gdks:J dg|_| j||d}tdtdfdt fg}|j|ks\J | tdd	d	tdd	d
gddgdkssJ dt	g|_| j||d}tdtdfdtdfg}|j|ksJ | tdd	d	tdd	d
gtdd	d	tdd	d
gdksJ d S )Ns6   a,b
1970/01/01,1980-01-01 00
1970/01/02,1980-01-02 00
r$  r%   r~   rC  z
1970/01/01z
1970/01/02i  rE   r   r}   z%Y/%m/%drE  z1980-01-01 00z1980-01-02 00)
r	   r   r!   r   r   rI  r   r   r   r
   )r_   r^   rQ   r   r   r   r   r   test_timestamp_parsers  s>   

z'BaseCSVTableRead.test_timestamp_parsersc                 C   s  d}|  |}tdt fdt fg}|j|ksJ | tdddtdddgtdddtdddgdks<J t }t t d|_| j ||d	}tdt fdt fg}|j|ksfJ | tdddtdddgtdddtdddgdksJ t }t	d
t	dd|_| j ||d	}tdt	d
fdt	dfg}|j|ksJ | t
dddt
dddgt
dddt
dddgdksJ d S )Ns0   a,b
1970-01-01,1970-01-02
1971-01-01,1971-01-02
r%   r~   rE  rE   i  r   r}   r$  rC  ms)r   r!   r   Zdate32r   r   r	   Zdate64r   rI  r   )r_   r^   r   r   rQ   r   r   r   
test_dates  s@   


zBaseCSVTableRead.test_datesc                 C   s  ddl m} d}| |}tdtdfdt fg}|j|ks$J | |ddd	|d
ddgddgdks;J t }t	dtdd|_
| j||d}tdt	dfdtdfg}|j|ksiJ | |ddd	|d
ddg|ddd	d|d
dddgdksJ d S )Nr   )times0   a,b
12:34:56,12:34:56.789
23:59:59,23:59:59.999
r%   rC  r~      "   r  r   ;   z12:34:56.789z23:59:59.999r}   usrL  r$  i
 iX> )r   rN  r   r!   r   Ztime32r   r   r	   Ztime64r   )r_   rN  r^   r   r   rQ   r   r   r   
test_times  s,   

zBaseCSVTableRead.test_timesc                 C   s  t dd}d }| j||d}tdtt t fdt fg}g dg dd	}|j|ks5J |	 |ks=J d
|_
| j||d}|j|ksNJ |	 |ksVJ d|_
| j||d}|jtdt fdt fgkstJ |	 |ks|J d|_
d|_d}| j||dd}|j|ksJ |d dj}t|d
ksJ |d  dksJ |d  dksJ d|_| j||d}tdtt t fdt fg}g dg dd	}|j|ksJ |	 |ksJ d S )NT)r   u   a,b
ab,1
cdé,2
cdé,3
ab,4r$  r%   r~   )rm      cdérT  rm   )rE   r   rl   r   r}   r   rE   2   Fs   a,b
ab,1
cd,2
ab,3)r   r  r   rm      cd)   abrV  rW  rE   r   rl   )r	   r5   r   r!   r   
dictionaryr   r   r#   r   r   r   chunkr   Zas_pyZ	as_bufferr   )r_   rQ   r^   r   r   r@   dict_valuesr   r   r   test_auto_dict_encode/  sT   



z&BaseCSVTableRead.test_auto_dict_encodec                 C   sv  t ddgd}d}| j||d}tdt fdt fdt fd	t fg}|j|ks0J | d d gdd
gddgdd gdksEJ t ddgdd}| j||d}| d d gd d
gddgdd gdksiJ d|_| j||d}| d d gdd
gddgdd gdksJ t g d}d}| j||d}tdt fdt fg}|j|ksJ | d
gdgdksJ d S )NZXxxZZzz)r   s$   a,b,c,d
Zzz,"Xxx",1,2
Xxx,#N/A,,Zzz
r$  r%   r~   r   r   z#N/A1r   r   r   T)r   r   Fs
   a,b
#N/A,
r}   )	r	   r   r!   r   r   r   r#   r   r   r_   rQ   r^   r   r   r   r   r   test_custom_nulls`  sX   




z"BaseCSVTableRead.test_custom_nullsc                 C   s   t ddgddgd}d}| j||d}tdt fd	t fd
t fg}|j|ks.J | g dg dg ddks@J d S )Nr1   yesr   no)r   r   s>   a,b,c
True,T,t
False,F,f
True,yes,yes
False,no,no
N/A,N/A,N/A
r$  r%   r~   r   )TrueFalserb  rc  r   )TFTFN)tr:  r`  ra  r   r0  )r	   r   r!   r   r   r8  r   r^  r   r   r   test_custom_bools  s   

z"BaseCSVTableRead.test_custom_boolsc                 C   s  t dddtddddd}d	}| j||d
}tdt fdt fdt fdt fdtddfg}ddgddgddgddgt	dt	dgd}|j|ksUJ |
 |ks]J t tdt fdt fdt fdtddfdt fgd}| j||d
}|j|ksJ |
 |ksJ d}ttj}| j||d
 W d    n1 sw   Y  t|j}d|v sJ d|v sJ d S )Nr   r   booleanr   r   r   )r~   r   r   r   zzr   s(   a,b,c,d,e
1,2,3,true,1.0
4,-5,6,false,0
r$  r%   r~   r   r   r   rE   r   g       @g      r5  6TF1.00z0.00)r%   r~   r   r   r   rg  s(   a,b,c,d,e
1,XXX,3,true,5
4,-5,6,false,7
zIn CSV column #1: z2CSV conversion error to float: invalid value 'XXX')r	   r!   
decimal128r   r   r#   r   r   r8  r   r   rL   rM   r   r3   rS   )r_   rQ   r^   r   r   r@   excerrr   r   r   test_column_types  sP   








z"BaseCSVTableRead.test_column_typesc              
   C   s<  dt t  t  fdt t  t  fdt t  t ddfdt t  t  fg}tt|d}d}| j	||d	}t 
|}g d
g dtdtdtdgg dd}|j
|ksbJ | |ksjJ dt t  t  f|d< tt|d}tt | j	||d	}W d    d S 1 sw   Y  d S )Nr%   r~   r   r   r   r   rh  s<   a,b,c,d
abc,123456,1.0,zz
defg,123456,0.5,xx
abc,N/A,1.0,xx
r$  )r   Zdefgr   )rH  rH  Nrj  z0.50)rg  r(  r(  r   r   )r!   rY  r   ro   r#   rk  Z
large_utf8r	   dictr   r   r   r   Zint8rL   rM   r   )r_   r   rQ   r^   r   r   r@   r   r   r   test_column_types_dict  s*   
"z'BaseCSVTableRead.test_column_types_dictc                 C   s   d}t ddgd}tdt id}| j|||d}tdt fdt fg}|j|ks0J | g dg dd	ks?J d S )
Ns   a,b
c,d
e,f
r   r   rC   rh  r   )   a   c   e)r~   r   r:  r   )r   r	   r!   r   r   r   r   r   r-  r   r   r   #test_column_types_with_column_names  s   
z4BaseCSVTableRead.test_column_types_with_column_namesc                 C   s6   d}|  |}| ddgddgddgdksJ d S )	N   a,b,c
1,2,3
4,5,6rE   r   r   r   rl   r/  r0  r  r  r   r   r   test_no_ending_newline  s   
z'BaseCSVTableRead.test_no_ending_newlinec                 C   s&   d}|  |}| dg iksJ d S )Ns   ,

r   r  r  r   r   r   test_trivial  s   
zBaseCSVTableRead.test_trivialc                 C   s   d}|  |}| ddgddgdksJ tdd}| j ||d	}| g d
g ddks1J tdd}| j |||d}| d dgd dgdksMJ d S )Ns   a,b
1,2

3,4
rE   rl   r   r   r}   F)r   r   )NrE   Nrl   )Nr   Nr   )rs   )r   r   )r]  2)r   r   r   r   )r_   r^   r   r   r   r   r   r   test_empty_lines  s(   


z!BaseCSVTableRead.test_empty_linesc              	   C   s   d}t jtjdd | | W d    n1 sw   Y  d}t jtjdd | | W d    n1 s9w   Y  dD ]}t jtjdd | | W d    n1 sZw   Y  q@d S )Ns   a,b,c
1,2
4,5,6
r!  rz   s   a,b,c
1,2,3
4zExpected 3 columns, got 1)r  r  r  r  s   

Empty CSV file)rL   rM   r!   r   r   )r_   r^   r   r   r   test_invalid_csv!  s   z!BaseCSVTableRead.test_invalid_csvc                 C   s^   d}|  |}| dgdgdksJ tdd}| j ||d}| dgd	gd
ks-J d S )N   a;b,c
de,fg;eh
defg;eha;br   r?  r@  r   de,fgehr%   b,c)r   r   r   )r_   r^   r   rQ   r   r   r   test_options_delimiter-  s   

z'BaseCSVTableRead.test_options_delimiterc                 C   sP   t ddd\}}| |}|j|jksJ ||sJ | | ks&J d S Nr   r   r   )rA   r   r   equalsr   )r_   r<   r@   r   r   r   r   test_small_random_csv;  s
   
z&BaseCSVTableRead.test_small_random_csvc           	      C   s   t ddd\}}g d}||dg}|D ]*}|D ]%}t|d}| j||d}|j|jks/J ||s>| | ks>J qqd S )Nr     r   )r   rO        r   o   r  rx   r   )rA   rstripr   r   r   r  r   )	r_   csv_baser@   block_sizescsvsr<   ry   r   r   r   r   r   test_stress_block_sizesB  s   

z(BaseCSVTableRead.test_stress_block_sizesc           	      C   s   zt j}W n ty   t j }Y nw d}dd t|D }t|}| }tdd |d d d D d}| j||d}| | }|d	ksEJ |j|ksLJ |jd
ksSJ |j	|ksZJ d S )Ni'  c                 S   s   g | ]}d  |qS )zK{})r   )r$   r   r   r   r   r&   X      zGBaseCSVTableRead.test_stress_convert_options_blowup.<locals>.<listcomp>c                 S   s   i | ]}|t  qS r   )r!   r   )r$   kr   r   r   rH   \  r  zGBaseCSVTableRead.test_stress_convert_options_blowup.<locals>.<dictcomp>r   rh  r$        $@r   )
rN  thread_timerN   rangerD   r	   r   r   r9   rC   )	r_   clockr   r=   r<   t1r   r   dtr   r   r   "test_stress_convert_options_blowupP  s$   


z3BaseCSVTableRead.test_stress_convert_options_blowupc                    s  t  jt  jkrtd t  tj	 fdd}d}d}d}|dk r|dk rt
d	| d
d|  }d }z^t P}z<t j|d}|  t }	z| | W n tyn }
 z|
}t |	 }W Y d }
~
nd }
~
ww W t|gg |gd nt|gg |gd w W d    n1 sw   Y  W n	 ty   Y nw |d ur|jd urn|d }|dk r|dk s+|d u rtd |dksJ |j}
t|
tjsJ |
jksJ d S )Nz'test only works from main Python threadc                      s   t d   d S )Ng?)rN  sleepr   raise_signalsignumr   r   signal_from_threadp  s   
z>BaseCSVTableRead.test_cancellation.<locals>.signal_from_threadg        i r   g      @r   zworkload size:s   a,b,c
s   1,2,3
targetr  rl   z0Failed to get an interruption during CSV readingr3  )	threadingcurrent_threadidentmain_threadrL   r   r   Zget_raise_signalsignalSIGINTprintZsignal_wakeup_fdThreadstartrN  r   KeyboardInterruptselect__context__Zfailrd   r!   ZArrowCancelledr  )r_   r  Zlast_durationZworkload_sizeZattemptsZ	large_csvexc_infoZsigfdrd  r  r   r   r  r   test_cancellationh  sZ   


.
(
z"BaseCSVTableRead.test_cancellationc                    s(   t j fddd}|  |  d S )Nc                      s
     dS )Ns   f64
0.1)r   r   r   r   r   <lambda>  s   
 z=BaseCSVTableRead.test_cancellation_disabled.<locals>.<lambda>r  )r  r  r  r0   )r_   rd  r   r   r   test_cancellation_disabled  s
   
z+BaseCSVTableRead.test_cancellation_disabledN)%ri   rj   rk   r   r   r  r  r  r  r"  r#  r+  r.  r2  r9  r>  rB  rJ  rK  rM  rS  r\  r_  re  rn  rp  ru  rw  rx  rz  r|  r  r  r  r  r  r  r   r   r   r   r    sF    3-"$1.) 
Er  c                   @      e Zd Zedd ZdS )TestSerialCSVTableReadc                 C      dS NFr   r   r   r   r   rr        z"TestSerialCSVTableRead.use_threadsNri   rj   rk   r   rr   r   r   r   r   r        r  c                   @   r  )TestThreadedCSVTableReadc                 C   r  NTr   r   r   r   r   rr     r  z$TestThreadedCSVTableRead.use_threadsNr  r   r   r   r   r    r  r  c                       s   e 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 fd#d$Z fd%d&Z  ZS )'BaseStreamingCSVReadc                 O   s,   | dt }| j|_t|g|R i |S )z
        Reads the CSV file into memory using pyarrow's open_csv
        csv The CSV bytes
        args Positional arguments to be forwarded to pyarrow's open_csv
        kwargs Keyword arguments to be forwarded to pyarrow's open_csv
        r   )r  r   rr   r   )r_   r<   r   r   r   r   r   r   r     s   zBaseStreamingCSVRead.open_csvc                 K   r  r   )r   r!   r	  r   r   r   r   
open_bytes  r
  zBaseStreamingCSVRead.open_bytesc                 C   sl   |j |ksJ t|}t|t|ksJ t||D ]\}}|jdd |j |ks+J | |ks3J qd S )NTr  )r   r,   r   zipr   r   )r_   readerexpected_schemar  ZbatchesbatchZexpected_batchr   r   r   check_reader  s   z!BaseStreamingCSVRead.check_readerc                 K   s   | j |fi | S r   )r  read_allr   r   r   r   r     s   zBaseStreamingCSVRead.read_bytesc                 C   s\   d}ddgddgd}t |}| |}tdt fdt fg}| |||g d S )	Ns   a,b
1,2
3,4
rE   rl   r   r   r}   r%   r~   )r*   r  r   r!   r   r#   r  )r_   r  r  r  r  r  r   r   r   r    s   


z%BaseStreamingCSVRead.test_file_objectc                 C   sH   d}|  |}tdt fdt fdt fg}| ||g  d S )Nr  r   r   r   )r  r!   r   r   r  r_   r^   r  r  r   r   r   r    s   


z BaseStreamingCSVRead.test_headerc                 C   s   d}t dt  fdt  fg}t }t||_| j||d}| ||g dg ddg t|d |_| j||d}| ||d	d
gddgddgdgdg d S )N   a,b
123,456
abc,de
gh,ij
r%   r~   r   )123r   r   )   456   de   ijr}   rE   r  r   r  r  r   r  )	r!   r   r   r   r   r   ry   r  r  )r_   r^   r  r   r  r   r   r   test_inference  s.   

z#BaseStreamingCSVRead.test_inferencec                 C   s   d}t  }t|d |_| j||d}tdt fdt fg}|j|ks)J |  dgdgdks8J t	j
td	d
 |  W d    n1 sNw   Y  t	
t |  W d    d S 1 shw   Y  d S )Nr  rF  r   r%   r~   {   i  r}   zCSV conversion error to int64rz   )r   r   ry   r  r!   r   r#   read_next_batchr   rL   rM   r   StopIterationr_   r^   r   r  r  r   r   r   test_inference_failure  s&   



"z+BaseStreamingCSVRead.test_inference_failurec                 C   s   d}t  }d|_tjtjdd | j||d}W d    n1 s"w   Y  d}d|_| j||d}|  dgd	gd
ksBJ tjtjdd |  W d    n1 sYw   Y  tt	 |  W d    d S 1 ssw   Y  d S )Ns   a,b
1,2,3
4,5
6,7
r   zExpected 2 columns, got 3rz   r   s   a,b
1,2
3,4,5
6,7
   rE   r   r}   )
r   ry   rL   rM   r!   r   r  r  r   r  )r_   r^   r   r  r   r   r   r|    s,   

"z%BaseStreamingCSVRead.test_invalid_csvc                 C   s   d}|  |}tdt fdt fg}| ||dgdgdg tdd}| j ||d	}td
t fdt fg}| ||dgdgdg d S )Nr}  r  r   r~  r  r  r?  r@  r   r%   r  r  r  r  )r  r!   r   r   r  r   )r_   r^   r  r  rQ   r   r   r   r  /  s(   



z+BaseStreamingCSVRead.test_options_delimiterc                 C   s^   d}|  |}tdt fdt fdt fg}| ||ddgddgd	d
gdg d S )Nrv  r%   r~   r   rE   r   r   r   rl   r/  r0  )r  r!   r   r#   r  r  r   r   r   rw  @  s   


z+BaseStreamingCSVRead.test_no_ending_newlinec                 C   s>   t jtdd | d W d    d S 1 sw   Y  d S )Nr{  rz   r  )rL   rM   r   r  r   r   r   r   test_empty_fileL     "z$BaseStreamingCSVRead.test_empty_filec                 C   sB  d}t  }g d|_| j||d}tdt fdt fdt fg}| ||ddgd	d
gddgdg t }ddg|_| j|||d}tdt fdt fg}| ||d	d
gddgdg dt	 i|_
| j|||d}tdt fdt	 fg}| ||ddgddgdg g d|_tjtdd | j|||d}W d    n1 sw   Y  d|_| j|||d}tdt fdt fdt	 fg}| ||d d gddgddgdg t	 t d|_
| j|||d}tdt fdt fdt	 fg}| ||d d gddgddgdg d S )Ns   1,2,3
4,5,6)r   r   r:  r   r   r   r:  rE   r   r   r   rl   r/  r   )r   r:  ry  5)gr:  r   z,Column 'g' in include_columns does not existrz   Tr  )r  r   r:  )r   r  )r   rC   r  r!   r   r#   r  r	   r   r   r   rL   rM   r*  r   r   r7  )r_   r^   r   r  r  r   r   r   r   test_column_optionsP  s   










z(BaseStreamingCSVRead.test_column_optionsc                 C   s   d}t  }| j||d}tdt fdt fg}| ||dgdgdg d|_| j||d}tdt fdt fg}| ||dgd	gdg d
}d|_| j||d}tdt fdt fg}| ||dgd	gdg d S )Ns   a,b
un,lphantr   r%   r~   uns   lphantr}   latin1u
   éléphants    a , b 
 u n ,  l  p h a n t rp   )r   r  r!   r   r   r   r  ru   r  r   r   r   test_encoding  s@   


z"BaseStreamingCSVRead.test_encodingc                 C   sX   t ddd\}}| |}| }|j|jksJ ||s J | | ks*J d S r  )rA   r  r  r   r  r   )r_   r<   r@   r  r   r   r   r   r    s   
z*BaseStreamingCSVRead.test_small_random_csvc           
      C   s   t ddd\}}g d}||dg}|D ];}|D ]6}|d | ddks(J t|d}| j||d}| }	|	j|jks@J |	|sO|	 | ksOJ qqd S )	Nr   r  r   )      r   r   r   r  r  r  rx   r   )	rA   r  countr   r  r  r   r  r   )
r_   r  r@   r  r  r<   ry   r   r  r   r   r   r   r    s"   

z,BaseStreamingCSVRead.test_stress_block_sizesc                 C   s"  t   t }dd }d}t }ddg|_d|_| j||d}||dgd	gd
 t }||dgdgd
 t |ks@J ||dgdgd
 t |ksRJ ||dgdgd
 t |ksdJ t	t
 |  W d    n1 sxw   Y  t |ksJ d }t |ksJ d S )Nc                 S   s   |   }| |ksJ d S r   )r  r   )r  r@   r  r   r   r   check_one_batch  s   zABaseStreamingCSVRead.test_batch_lifetime.<locals>.check_one_batchs   10,11
12,13
14,15
16,17
r%   r~   r/  r   r   r   r}   rO  r  rG        r  )gcZcollectr!   Ztotal_allocated_bytesr   rC   ry   r  rL   rM   r  r  )r_   Zold_allocatedr  r^   r   r  Zallocated_after_first_batchr   r   r   test_batch_lifetime  s,   

z(BaseStreamingCSVRead.test_batch_lifetimec                    sn   t    d}t }d|_ddg|_| j||d}tt |	 s%J W d    d S 1 s0w   Y  d S )Nr   r   rm   rn   r   )
superr   r   rs   rC   r  rL   rM   r  r  r_   r^   rQ   r  	__class__r   r   r     s   

"z*BaseStreamingCSVRead.test_header_skip_rowsc                    s   t    d}t }d|_| j||d}tt | s J W d    n1 s*w   Y  d|_| j||d}tt | sEJ W d    d S 1 sPw   Y  d S )Nr   rl   r   r   )	r  r   r   rv   r  rL   rM   r  r  r  r  r   r   r     s   
"z/BaseStreamingCSVRead.test_skip_rows_after_names)ri   rj   rk   r   r  r  r   r  r  r  r  r|  r  rw  r  r  r  r  r  r  r   r   __classcell__r   r   r  r   r    s(    		Ar  c                   @   r  )TestSerialStreamingCSVReadc                 C   r  r  r   r   r   r   r   rr     r  z&TestSerialStreamingCSVRead.use_threadsNr  r   r   r   r   r    r  r  c                   @   r  )TestThreadedStreamingCSVReadc                 C   r  r  r   r   r   r   r   rr     r  z(TestThreadedStreamingCSVRead.use_threadsNr  r   r   r   r   r    r  r  c                   @   r[   )
BaseTestCompressedCSVReadc                 C   s   t jdd| _d S )Nzarrow-csv-test-)prefix)tempfilemkdtemptmpdirr   r   r   r   setUp  s   zBaseTestCompressedCSVRead.setUpc                 C   s   t | j d S r   )shutilrmtreer  r   r   r   r   tearDown  s   z"BaseTestCompressedCSVRead.tearDownc              
   C   sB   zt |W S  tjy  } ztt| W Y d }~d S d }~ww r   )r   r!   ZArrowNotImplementedErrorrL   r   r3   )r_   csv_pathr   r   r   r   r     s   
z"BaseTestCompressedCSVRead.read_csvc                 C   sz   t ddd\}}tj| j| j}| || | |}|jdd |j	|j	ks*J |
|s1J | | ks;J d S )Nr   r   r   Tr  )rA   ospathr0   r  csv_filename
write_filer   r   r   r  r   )r_   r<   r@   r  r   r   r   r   test_random_csv  s   
z)BaseTestCompressedCSVRead.test_random_csvN)ri   rj   rk   r  r  r   r  r   r   r   r   r    s
    r  c                   @   s    e Zd ZdZdd Zdd ZdS )TestGZipCSVReadzcompressed.csv.gzc                 C   s>   t |dd}|| W d    d S 1 sw   Y  d S )Nwbrl   )gzipopenr/   r_   r  contentsr:  r   r   r   r  -  r  zTestGZipCSVRead.write_filec                 C   s   t j| j| j}t|dd}|d W d    n1 s w   Y  t|dd}|d W d    n1 s<w   Y  | |}|	 g dg ddksUJ d S )	Nr  rl   s   ab,cd
ef,gh
rm   s   ij,kl
mn,op
r%  r&  r   )
r  r  r0   r  r  r  r  r/   r   r   )r_   r  r:  r   r   r   r   test_concatenated1  s   
z!TestGZipCSVRead.test_concatenatedN)ri   rj   rk   r  r  r  r   r   r   r   r  *  s    r  c                   @   s   e Zd ZdZdd ZdS )TestBZ2CSVReadzcompressed.csv.bz2c                 C   s<   t |d}|| W d    d S 1 sw   Y  d S )Nr   )bz2BZ2Filer/   r  r   r   r   r  B  s   "zTestBZ2CSVRead.write_fileN)ri   rj   rk   r  r  r   r   r   r   r  ?  s    r  c                  C   s    t d} t|  | jrJ d S Nrv  )r*   r  r   closed)bufr   r   r   0test_read_csv_does_not_close_passed_file_handlesG  s   
r  c            	   	   C   s  t jg dg dgddg} | jddd }| |fD ]>}t }t||tdd	 |d | t	|ks7J t }t||td
d	 |d t
| jd}| t	||dksYJ qd d tdd	ft
| jdd td
d	fd tddtdddft
| jdtddtd
ddffD ]p\}}}t }t|| j|d}||  W d    n1 sw   Y  |d | t	|||dksJ t }t|| j|d}| jddD ]}|| qW d    n1 sw   Y  |d | t	|||dksJ qd S )NrX  r0  c1c2r   )Zmax_chunksizer   T)r   Frq  r   r   r@  )r   r   r   write_optionsr   rE   )r!   r6   r7   r  r*   r  r   r   seekr   r   rC   r   r   r   write_tableZwrite_batch)	rd  Zrecord_batchr  r  r   r   r  writerr  r   r   r   test_write_read_round_tripN  sV   








r  c                  C   s  t jg dg dgddg} t }tdddft dftd	dd
ffD ].\}}t|| j|d}||  W d    n1 sAw   Y  |	 |ksNJ |
d q%t jddggdg} t }tdddftddt jjffD ]R\}}t|| j|d1}z||  W n! ty } zt||sJ W Y d }~W d     d S d }~ww W d    n1 sw   Y  |	 |ksJ |
d qsd S )N)rE   r   N)r%   Nr   r  r  r   )r   s   "c1","c2"
1,a
2,
,c
s   "c1","c2"
1,"a"
2,
,"c"
r   s   "c1","c2"
"1","a"
"2",
,"c"
r  r   r   r   r   s   "c1"
","
""""
)r!   r6   r7   r*   r  r   r   r   r
  r4   r	  libr   	Exceptionrd   )rd  r  r  resr  r   r   r   r   test_write_quoting_stylez  s@   
r  c                  C   sJ   dd } t   |  }| d u sJ W d    d S 1 sw   Y  d S )Nc                  S   s   t d} t| }t|S r  )r*   r  r   weakrefref)r  r   r   r   r   inner  s   

z,test_read_csv_reference_cycle.<locals>.inner)r   Zdisabled_gc)r  wrr   r   r   test_read_csv_reference_cycle  s
   
"r  type_factoryc                   C      t ddS N   rE   r!   rk  r   r   r   r   r        r  c                   C   r  )N&   r  r  r   r   r   r   r    r  c                   C   r  r  r!   Z
decimal256r   r   r   r   r    r  c                   C   r  )NL   r   r  r   r   r   r   r    r  c                 C   s`   | }t dt ddg|i}t|| d  t| d }|d||dks.J d S )NcolrE   r   zout.csv)r!   r   r"   castr   r   column)r  r  r    r   outr   r   r   test_write_csv_decimal  s
   "r#  c               	   C   s`   d} G dd dt j}tdD ]}ttj t||  W d    n1 s(w   Y  qd S )Ns   a,b,cc                       s(   e Zd Z fddZ fddZ  ZS )z-test_read_csv_gil_deadlock.<locals>.MyBytesIOc                       t d t j| S NgMbP?)rN  r  r  readr_   r   r  r   r   r&       
z2test_read_csv_gil_deadlock.<locals>.MyBytesIO.readc                    r$  r%  )rN  r  r  readintor'  r  r   r   r)    r(  z6test_read_csv_gil_deadlock.<locals>.MyBytesIO.readinto)ri   rj   rk   r&  r)  r  r   r   r  r   	MyBytesIO  s    r*  r  )r*   r  r  rL   rM   r!   r   r   )r  r*  r   r   r   r   test_read_csv_gil_deadlock  s   	r+  )r   r   r   T)Dr   r  r   r   decimalr   r  r  r*   r-   r  r  r  r  r   r  r  rN  Zunittestr  rL   numpyr'   Zpyarrowr!   Zpyarrow.csvr   r   r   r   r	   r
   r   r   r   r   Zpyarrow.testsr   r   rA   rD   rT   rZ   r\   r   r   r   r   ABCr   r  r  r  r  r  r  r  ZTestCaser  r  r  r  r  r  markZparametrizer#  r+  r   r   r   r   <module>   s   0
	7<Q  C        D,!

