o
    h.                    @   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%dd	 Z&d
d Z'dJd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! Z0d"d# Z1G d$d% d%e j2Z3G d&d' d'e3Z4G d(d) d)e4Z5G d*d+ d+e4Z6G d,d- d-e3Z7G d.d/ d/e7Z8ej9jG d0d1 d1e7Z:G d2d3 d3Z;G d4d5 d5e;ej<Z=G d6d7 d7e;ej<Z>d8d9 Z?d:d; Z@d<d= ZAd>d? ZBej9Cd@dAdB dCdB dDdB dEdB fdFdG ZDdHdI ZEdS )K    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   J/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/test_csv.pygenerate_col_names/   s   
r   c                 c   s.    t d|| |D ]}| |||  V  q	d S Nr   rangearrnum_colsnum_rowsir   r   r   
split_rows8   s   r!   c                 c   s&    t d|D ]
}| |d | V  qd S r   r   r   r   r   r   split_columns>   s   r"      
   
Tc           
         s   t d  fddt| | D }t }ttt | }|r.|	d
| |	| t|| |D ]}|	d
tt| |	| q4|  }dd t|| |D }tj||}	||	fS )N*   c                    s   g | ]}  d dqS )r     )randint).0_rndr   r   
<listcomp>F   s    z#make_random_csv.<locals>.<listcomp>,c                 S   s   g | ]}t j|t  d qS ))type)paarrayint64)r)   rowr   r   r   r-   P   s    )randomRandomr   ioStringIOlist	itertoolsislicer   writejoinr!   mapstrgetvalueencoder"   r0   Tablefrom_arrays)
r   r   linesepwrite_namesr   csv	col_namesr3   columnsexpectedr   r+   r   make_random_csvD   s    


rI   c                 C   s.   t  }|d|  |d |  S )Nr.   
)r6   r7   r;   r<   r?   r@   )column_namesrE   r   r   r   make_empty_csvV   s   
rL   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>n   s    z'check_options_class.<locals>.<dictcomp>r   )itemsgetattrsetattrpytestraisesAttributeErrorzzz_non_existent)clsattr_valuesoptsrN   rO   vnon_defaultsvaluer   r   r   check_options_class]   s"   r^   c                 K   sL   | di |}| |j||jd}| D ]\}}t|||ks#J qd S )N)protocolr   )loadsdumpsHIGHEST_PROTOCOLrQ   rR   )rX   picklerrY   rZ   new_optsrN   r]   r   r   r   check_options_class_picklingu   s   
re   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)selfrh   r   r   r   __init__~   s   
zInvalidRowHandler.__init__c                 C   s   | j | | jS r   )ri   appendrh   )rj   r3   r   r   r   __call__   s   zInvalidRowHandler.__call__c                 C   s   t |to
|j| jkS r   
isinstancerg   rh   rj   otherr   r   r   __eq__   s   

zInvalidRowHandler.__eq__c                 C   s   t |t p|j| jkS r   rn   rp   r   r   r   __ne__   s   
zInvalidRowHandler.__ne__N)__name__
__module____qualname__rk   rm   rr   rs   r   r   r   r   rg   }   s
    rg   c                  C   s   d} d}dd t ddD }tt|| |}|g dg dgks"J tt|| |}|dd	gdd
gddgddgddggks?J d S )N   r#   c                 S   s   g | ]}|qS r   r   )r)   xr   r   r   r-      s    z7test_split_rows_and_columns_utility.<locals>.<listcomp>rM      )rM   r#         rw   )         	   r$   r|   r}   rz   r~   r{   r   r$   )r   r8   r!   r"   )r   r   r   ri   rG   r   r   r   #test_split_rows_and_columns_utility   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   rz   abcdutf8utf16   )use_threads	skip_rowsrK   autogenerate_column_namesencodingskip_rows_after_names)rc   r   r   rK   r   r   r   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ab)r   r^   re   r   validaterT   rU   r0   ArrowInvalidr   r   r   rK   )pickle_modulerX   rZ   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.   rx   Fy)"zFT)	delimiterescape_char
quote_chardouble_quotenewlines_in_valuesignore_empty_linesinvalid_row_handler)rc   r   r   r   r   r   r   r   	z,ParseOptions: delimiter cannot be \\r or \\nr   rJ   z-ParseOptions: quote_char cannot be \\r or \\nz.ParseOptions: escape_char cannot be \\r or \\n)r   rg   r^   re   r   r   rT   rU   r0   r   r   r   )r   rX   skip_handlerrZ   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)	rc   r   r   r   r   r   r   r   r   z..r   韆 )r   cint16null)r[   wr   r   r   rx   zDataType expectedr    N/AxxxyyyNnnTttFffi  z%Y-%m-%d)column_typesnull_valuestrue_valuesfalse_valuesauto_dict_max_cardinalityr   )r	   r^   r
   re   rT   rU   
ValueErrorr   r   r   r0   r   float32r   schemaint32r   binary	TypeErrorro   r   r8   r   r   r   )r   rX   rZ   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   r   i&  )
batch_sizez.WriteOptions: batch_size must be at least 1: 0r   )r   r^   r   r   rT   rU   r0   r   )rX   rZ   r   r   r   r   test_write_optionsf  s$   

"r   c                   @   sl   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ejj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rj   r   kwargsr   r   r   
read_bytes  s   zBaseTestCSV.read_bytesc                 C   r   )z#Whether this test is multi-threadedr   rj   r   r   r   r     s   zBaseTestCSV.use_threadsc                 C   s$   | j t|ks	J | j|ksJ d S r   )num_columnslenrK   )tablenamesr   r   r   check_names  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
rM   read_optionsefghijmnklop)r   r   rz   )r   r   r{      abcd
,,,,,
ij,kl
mn,op
r#   )r   r   )
r   r   r   r   	to_pydictrT   rU   r0   r   rK   rj   ri   rZ   r   r   r   r   test_header_skip_rows  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   rM   r   r   r   r   r   r   r   r   r   rz   r{   r   r#   f0f1r   r   s#   ab,cd
"e
f","g

h"
"ij","k
l"
mn,opTr   parse_options   rw   r'   r   r   i  ry   d      F)r   r   rD   %   )   )r   r   r   r   r   rK   r   r   r   rI   r   r   r   rQ   r   r   )	rj   ri   rZ   r   
parse_optsrH   
table_dictrN   rO   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 #{}: )r   format)
msg_formatr3   argsrow_infor   r   r   
format_msg.  s   
z@BaseTestCSV.test_row_number_offset_in_errors.<locals>.format_msgr{   r   T)rD   rz   r   s   1,2
z{}Expected 4 columns, got 2f   r   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      )rI   r   r   r   r	   r0   r   r   rT   rU   r   r   decoder   rK   r   r   )rj   r  rE   r*   r   r  csv_bad_columnsmessage_columnscsv_bad_typemessage_valuelong_rowcsv_bad_columns_long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: cr   r   r   r	  r    ejr   c                    s    j rd S | S r   )r   )rx   r   r   r   row_num  s   z5BaseTestCSV.test_invalid_row_handler.<locals>.row_numr#   rM   r   rz   r{   zf,g,herror)r   rT   rU   r   r   rg   r   r   r   ri   r`   ra   )rj   r   ri   r   r   r  expected_rowsr   r   r   test_invalid_row_handler  sF   


z$BaseTestCSV.test_invalid_row_handlerc              	   C   s   d}ddgddgddgd}t d	d
D ]}| j|tddt|dd }||ks+J qt d	dD ]#}tjtdd | j|t|dd W d    n1 sOw   Y  q1d S )Ns   a,b,c
d,e,"f
"
g,h,i
r	  gr  hzf
r    r   r   r   r~      T)r   r   r   r   ry   z#cell values spanning multiple linesr   r   )r   r   r   r   r   rT   rU   r   )rj   ri   rH   r   r	  r   r   r   test_chunker_out_of_sync  s.   

z$BaseTestCSV.test_chunker_out_of_syncN)rt   ru   rv   __doc__r   abstractmethodr   propertyr   staticmethodr   r   r   rT   marknumpyr  r  r!  r   r   r   r   r   ~  s    

-i
h+r   c                   @   s2  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"e#j$j%dCdD Z&e#j$j%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)ro   r   bool
setdefaultr   r   r   )rj   rE   r)  r   r   r   r   r   r   r   r     s   zBaseCSVTableRead.read_csvc                 K      | j t|fi |S r   )r   r0   	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
rM   r#   r   )	r6   BytesIOr   r   r7   r  rT   rU   r   )rj   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   ro   r0   rA   r   r   rj   ri   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
rM   r#   r   r   r   )rj   ri   r3  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)   
      
    rM   )rM   rz   8   )r#   r{   N   r   )r<   r   r   
to_batchesr   )rj   ri   line_endingfile_endingr2  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   rx   r   r   r   r   r   r   r   r   r   r   rx   r   rz   r   r   r{   rw   r   )rx   r   r   Expected 3 columns, got 2r   r   r#   r   r   )
r   rK   r   r   r   r   rT   rU   r0   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   rF  rG  r   rz   r   r   r{   )
r   r   r   r   r   r   rT   rU   r0   r   r   r   r   r   %test_header_autogenerate_column_namesF  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   r   r  r   r   r   r   r   r   r   )r   r   xxr   yyz9Column 'xx' in include_columns does not exist in CSV filer   )r	   r   r   r   r   r0   r   r   rT   rU   KeyError)rj   ri   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   rO  Tr  rP  r   rQ  NNNrM  r   rG  )NNNN)rQ  r   )s   cds   ghs   kls   op)r   r	   r   r   r   r0   r   r   r   r   rK   r   r   r   rj   ri   r   r  r   r   r   r   r   test_include_missing_columns|  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   rM   r{   r#   rw   rz   r|   r  )r   r0   r   r2   r   rj   ri   r   r   r   r   r   test_simple_ints  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   r0   r   float64r2   r   bool_r   rW  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)rY  Ng      @)r#   rZ  N)r   r\  nanrT  )   3s   nan   )NTF)r   r   r   r	  r  r`  )
r   r0   r   r]  r2   r   r   r   r^  r   rW  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.25rg  z-4)g      @g      N)r   r   r0   r   r]  r   r   r	   )rj   r   ri   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  rM   r}      r   ix @ r  )r   r0   r   r2   	timestampr   r   rW  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
rL  r   r   ri  z
1970/01/01z
1970/01/02i  rM   r#   r   z%Y/%m/%drk  z1980-01-01 00z1980-01-02 00)
r	   r   r0   r   r   rn  r   r   r   r
   )rj   ri   rZ   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   rk  rM   i  r#   r   rL  ri  ms)r   r0   r   date32r   r   r	   date64r   rn  r   )rj   ri   r   r   rZ   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   ri  r      "   r@  r  ;   z12:34:56.789z23:59:59.999r   usrq  rL  i
 iX> )r   ru  r   r0   r   time32r   r   r	   time64r   )rj   ru  ri   r   r   rZ   r   r   r   
test_timesN  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,4rL  r   r   )r      cdér}  r   )rM   r#   rz   r{   r   r#   rM   2   Fs   a,b
ab,1
cd,2
ab,3)r  r)  r   r      cd)   abr  r  rM   r#   rz   )r	   r@   r   r0   r   
dictionaryr   r   r2   r   r   r   chunkr   as_py	as_bufferr   )rj   rZ   ri   r   r   rH   dict_valuesr   r   r   test_auto_dict_encodei  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 )NXxxZzz)r   s$   a,b,c,d
Zzz,"Xxx",1,2
Xxx,#N/A,,Zzz
rL  r   r   r   r	  z#N/A1r   r#   r  T)r   r   Fs
   a,b
#N/A,
r   )	r	   r   r0   r   r   r   r2   r   r   rj   rZ   ri   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 )Nr   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
rL  r   r   r   )TrueFalser  r  r   )TFTFN)tr`  r  r  r   r  )r	   r   r0   r   r   r^  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   booleanry   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
rL  r   r   r   r	  r  rM   r{          @g      r[  6TF1.00z0.00)r   r   r   r	  r  r  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	   r0   
decimal128r   r   r2   r   r   r^  r   r   rT   rU   r   r>   r]   )rj   rZ   ri   r   r   rH   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   ry   r#   r	  r  s<   a,b,c,d
abc,123456,1.0,zz
defg,123456,0.5,xx
abc,N/A,1.0,xx
rL  )r   defgr   )rm  rm  Nr  z0.50)r  rP  rP  r  r   )r0   r  r   r   r2   r  
large_utf8r	   dictr   r   r   r   int8rT   rU   r   )rj   r   rZ   ri   r   r   rH   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
rx   r   rK   r  r  )   a   c   e)r   r	  r`  rH  )r   r	   r0   r   r   r   r   r   rU  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,6rM   r{   r#   rw   rz   r|   r  r:  r8  r   r   r   test_no_ending_newline6  s   
z'BaseCSVTableRead.test_no_ending_newlinec                 C   s&   d}|  |}| dg iksJ d S )Ns   ,

r   r:  r8  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
rM   rz   r#   r{   r   F)r   r  )NrM   Nrz   )Nr#   Nr{   )r   r   )r  2)r   r   r   r   )rj   ri   r   r   r   r   r   r   test_empty_linesF  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
rI  r   s   a,b,c
1,2,3
4zExpected 3 columns, got 1)r?  r<  r>  r=  s   

Empty CSV file)rT   rU   r0   r   r   )rj   ri   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   re  rf  r  de,fgehr   b,c)r   r   r   )rj   ri   r   rZ   r   r   r   test_options_delimiterg  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   )rI   r   r   equalsr   )rj   rE   rH   r   r   r   r   test_small_random_csvu  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   )ry   rv        r   o   r>  r   r   )rI   rstripr   r   r   r  r   )	rj   csv_baserH   block_sizescsvsrE   r   r   r   r   r   r   test_stress_block_sizes|  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-         zGBaseCSVTableRead.test_stress_convert_options_blowup.<locals>.<listcomp>c                 S   s   i | ]}|t  qS r   )r0   r   )r)   kr   r   r   rP     r  zGBaseCSVTableRead.test_stress_convert_options_blowup.<locals>.<dictcomp>r#   r  rL        $@r   )
ru  thread_timerV   r   rL   r	   r   r   r   rK   )	rj   clockr   rF   rE   t1r  r   dtr   r   r   "test_stress_convert_options_blowup  s$   


z3BaseCSVTableRead.test_stress_convert_options_blowupc                 C   s  t  jt  jkrtd 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yd }
 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tjksJ d S )Nz'test only works from main Python threadc                   S   s   t d ttj d S )Ng?)ru  sleepsignalraise_signalSIGINTr   r   r   r   signal_from_thread  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  rz   z0Failed to get an interruption during CSV readingr  )	threadingcurrent_threadidentmain_threadrT   r   printr   signal_wakeup_fdThreadstartru  r   KeyboardInterruptselect__context__failro   r0   ArrowCancelledsignumr  r  )rj   r  last_durationworkload_sizeattempts	large_csvexc_infosigfdr  r  r  r   r   r   test_cancellation  sV   


.
(
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  r<   )rj   r  r   r   r   test_cancellation_disabled  s
   
z+BaseCSVTableRead.test_cancellation_disabledN)(rt   ru   rv   r   r   r6  r9  r;  rE  rJ  rK  rS  rV  rX  r_  rd  rh  ro  rp  rt  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rT   r&  r  r  r  r   r   r   r   r(    sJ    3-"$1.) 

Br(  c                   @      e Zd Zedd ZdS )TestSerialCSVTableReadc                 C      dS NFr   r   r   r   r   r        z"TestSerialCSVTableRead.use_threadsNrt   ru   rv   r$  r   r   r   r   r   r        r  c                   @   r  )TestThreadedCSVTableReadc                 C   r  NTr   r   r   r   r   r     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ejj 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   r   r   )rj   rE   r   r   r   r   r   r   r     s   zBaseStreamingCSVRead.open_csvc                 K   r.  r   )r   r0   r/  r   r   r   r   
open_bytes	  r0  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   r8   r   zipr   r   )rj   readerexpected_schemar3  batchesbatch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
rM   rz   r#   r{   r   r   r   )r6   r1  r   r0   r   r2   r  )rj   r2  r3  r4  r  r  r   r   r   r6    s   


z%BaseStreamingCSVRead.test_file_objectc                 C   sH   d}|  |}tdt fdt fdt fg}| ||g  d S )Nr7  r   r   r   )r  r0   r   r   r  rj   ri   r  r  r   r   r   r9  !  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   rM   r  r   r   r  r   r  )	r0   r   r   r   r   r   r   r  r  )rj   ri   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  r}   r   r   r   {   i  r   zCSV conversion error to int64r   )r   r   r   r  r0   r   r2   read_next_batchr   rT   rU   r   StopIterationrj   ri   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 3r   r   s   a,b
1,2
3,4,5
6,7
r~   rM   r#   r   )
r   r   rT   rU   r0   r   r  r  r   r  )rj   ri   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  re  rf  r  r   r  r  r  r  )r  r0   r   r   r  r   )rj   ri   r  r  rZ   r   r   r   r  h  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 )Nr  r   r   r   rM   r{   r#   rw   rz   r|   r  )r  r0   r   r2   r  r  r   r   r   r  y  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  r   r?  )rT   rU   r   r  r   r   r   r   test_empty_file     "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`  rM   r{   r#   rw   rz   r|   r  )r  r`  r  5)r  r`  r  z,Column 'g' in include_columns does not existr   Tr  )r  r  r`  )r  r  )r   rK   r  r0   r   r2   r  r	   r   r   r   rT   rU   rR  r   r   r]  )rj   ri   r   r  r  r  r   r   r   test_column_options  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 r   )r   r  r0   r   r   r   r  r   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  )rI   r  r  r   r  r   )rj   rE   rH   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<  r   r   )	rI   r  countr   r  r  r   r  r   )
rj   r  rH   r  r  rE   r   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  rH   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$   ry   r   rv  r  rl  r     r  )gccollectr0   total_allocated_bytesr   rK   r   r  rT   rU   r  r  )rj   old_allocatedr  ri   r   r  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{   r   r   r   )
superr   r   r   rK   r  rT   rU   r  r  rj   ri   rZ   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   rz   r   r   )	r  r   r   r   r  rT   rU   r  r  r  r  r   r   r   +  s   
"z/BaseStreamingCSVRead.test_skip_rows_after_names)rt   ru   rv   r   r  r  r   r6  r9  r  r  r  r  r  r	  r  r  r  r  r  r   rT   r&  r'  r   __classcell__r   r   r  r   r    s*    		Ar  c                   @   r  )TestSerialStreamingCSVReadc                 C   r  r  r   r   r   r   r   r   @  r  z&TestSerialStreamingCSVRead.use_threadsNr  r   r   r   r   r   ?  r  r   c                   @   r  )TestThreadedStreamingCSVReadc                 C   r  r  r   r   r   r   r   r   G  r  z(TestThreadedStreamingCSVRead.use_threadsNr  r   r   r   r   r!  E  s    r!  c                   @   rf   )
BaseTestCompressedCSVReadc                 C   s   t jdd| _d S )Nzarrow-csv-test-)prefix)tempfilemkdtemptmpdirr   r   r   r   setUpN  s   zBaseTestCompressedCSVRead.setUpc                 C   s   t | j d S r   )shutilrmtreer&  r   r   r   r   tearDownQ  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   r0   ArrowNotImplementedErrorrT   r   r>   )rj   csv_pathr  r   r   r   r   T  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*  )rI   ospathr<   r&  csv_filename
write_filer   r   r   r  r   )rj   rE   rH   r,  r   r   r   r   test_random_csvZ  s   
z)BaseTestCompressedCSVRead.test_random_csvN)rt   ru   rv   r'  r*  r   r1  r   r   r   r   r"  L  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wbrz   )gzipopenr;   rj   r.  contentsr`  r   r   r   r0  h  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 )	Nr3  rz   s   ab,cd
ef,gh
r   s   ij,kl
mn,op
rM  rN  r   )
r-  r.  r<   r&  r/  r4  r5  r;   r   r   )rj   r,  r`  r   r   r   r   test_concatenatedl  s   
z!TestGZipCSVRead.test_concatenatedN)rt   ru   rv   r/  r0  r8  r   r   r   r   r2  e  s    r2  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;   r6  r   r   r   r0  }  s   "zTestBZ2CSVRead.write_fileN)rt   ru   rv   r/  r0  r   r   r   r   r9  z  s    r9  c                  C   s    t d} t|  | jrJ d S Nr  )r6   r1  r   closed)bufr   r   r   0test_read_csv_does_not_close_passed_file_handles  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 )Nr  r  c1c2r{   )max_chunksizer   T)r   Fr  r   r   rf  )r   r   r   write_optionsr   rM   )r0   rA   rB   rB  r6   r1  r   r   seekr   r   rK   r   r   r   write_tablewrite_batch)	r  record_batchr2  r>  r   r   rD  writerr  r   r   r   test_write_read_round_trip  sV   








rJ  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)rM   r#   N)r   Nr   r@  rA  r   )r   s   "c1","c2"
1,a
2,
,c
s   "c1","c2"
1,"a"
2,
,"c"
r   s   "c1","c2"
"1","a"
"2",
,"c"
rC  r   r.   r   r   s   "c1"
","
""""
)r0   rA   rB   r6   r1  r   r   r   rF  r?   rE  libr   	Exceptionro   )r  r>  rD  resrI  r  r   r   r   test_write_quoting_style  s@   
rN  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<  )r6   r1  r   weakrefref)r>  r   r   r   r   inner  s   

z,test_read_csv_reference_cycle.<locals>.inner)r   disabled_gc)rQ  wrr   r   r   test_read_csv_reference_cycle  s
   
"rT  type_factoryc                   C      t ddS N   rM   r0   r  r   r   r   r   r        r  c                   C   rV  )N&   r  rY  r   r   r   r   r    rZ  c                   C   rV  rW  r0   
decimal256r   r   r   r   r    rZ  c                   C   rV  )NL   r$   r\  r   r   r   r   r    rZ  c                 C   s`   | }t dt ddg|i}t|| d  t| d }|d||dks.J d S )NcolrM   r#   zout.csv)r0   r   r1   castr   r   column)r&  rU  r/   r   outr   r   r   test_write_csv_decimal  s
   "rc  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?)ru  r  r  readrj   r   r  r   r   rf       
z2test_read_csv_gil_deadlock.<locals>.MyBytesIO.readc                    rd  re  )ru  r  r  readintorg  r  r   r   ri    rh  z6test_read_csv_gil_deadlock.<locals>.MyBytesIO.readinto)rt   ru   rv   rf  ri  r  r   r   r  r   	MyBytesIO  s    rj  rX  )r6   r1  r   rT   rU   r0   r   r   )r2  rj  r    r   r   r   test_read_csv_gil_deadlock  s   	rk  )r#   r$   r%   T)Fr   r:  r   r   decimalr   r  r4  r6   r9   r-  r4   r  r(  r  r   r$  r  ru  unittestrO  rT   pyarrowr0   pyarrow.csvr   r   r   r   r	   r
   r   r   r   r   pyarrow.testsr   r   r!   r"   rI   rL   r^   re   rg   r   r   r   r   r   ABCr   r(  r  r  r  r   r&  r!  r"  TestCaser2  r9  r?  rJ  rN  rT  parametrizerc  rk  r   r   r   r   <module>   s   0	
7<Q  ]        E,!

