
    g.                       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 Z%d Z&d Z'd3d	Z(d
 Z)d Z*d Z+ G d d      Z,d Z-d Z.d Z/d Z0d Z1 G d de jd                        Z3 G d de3      Z4 G d de4      Z5 G d de4      Z6 G d de3      Z7 G d de7      Z8ejr                  j"                   G d  d!e7             Z: G d" d#      Z; G d$ d%e;ejx                        Z= G d& d'e;ejx                        Z>d( Z?d) Z@d* ZAd+ ZBejr                  j                  d,d- d. d/ d0 f      d1        ZDd2 ZEy)4    N)datedatetime)Decimal)
open_csvread_csvReadOptionsParseOptionsConvertOptionsISO8601	write_csvWriteOptions	CSVWriter
InvalidRow)utilc               #   n   K   t         j                  } | E d {    | D ]  }| D ]	  }||z      y 7 wN)stringascii_lowercase)lettersfirstseconds      K/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/test_csv.pygenerate_col_namesr   /   s=     $$GF&.    s   535c              #   J   K   t        d||z  |      D ]  }| |||z      y wNr   rangearrnum_colsnum_rowsis       r   
split_rowsr#   8   s/     1h)84!AL!! 5s   !#c              #   B   K   t        d|      D ]  }| |d |     y wr   r   r   s       r   split_columnsr%   >   s(     1h!+X+  s   c           	         t        j                  d      }t        | |z        D cg c]  }|j                  dd       }}t	        j
                         }t        t        j                  t               |             }|r1|j                  dj                  |             |j                  |       t        || |      D ]A  }	|j                  dj                  t        t        |	                   |j                  |       C |j                         j!                         }t#        || |      D 	cg c]+  }	t%        j&                  |	t%        j(                               - }
}	t$        j*                  j-                  |
|      }||fS c c}w c c}	w )N*   r     ,)type)randomRandomr   randintioStringIOlist	itertoolsislicer   writejoinr#   mapstrgetvalueencoder%   paarrayint64Tablefrom_arrays)r    r!   linesepwrite_namesrnd_r   csv	col_namesrowcolumnsexpecteds               r   make_random_csvrG   D   s=   
--
C).x(/B)C
D)CA3;;q$)CC
D
++-CY%%&8&:HEFI		#((9%&		'#x2		#((3sC=)*		' 3 ,,.


!C'Xx@B@3 xx"((*-@  Bxx##GY7H= EBs   F-0Fc                     t        j                         }|j                  dj                  |              |j                  d       |j	                         j                         S )Nr)   
)r.   r/   r3   r4   r7   r8   )column_namesrB   s     r   make_empty_csvrK   V   sB    
++-CIIchh|$%IIdO<<>  ""    c                     |        }|j                         D ]K  \  }}t        ||      |d   k(  s
J d|z          |D ]%  }t        |||       t        ||      |k(  r J d        M t        j                  t
              5  d|_        ddd       |j                         D ci c]  \  }}||d    }}} | di |}|j                         D ]  \  }}t        ||      |k(  rJ  y# 1 sw Y   axY wc c}}w )zD
    Check setting and getting attributes of an *Options class.
    r   zincorrect default value for zfailed setting valueTN    )itemsgetattrsetattrpytestraisesAttributeErrorzzz_non_existent)clsattr_valuesoptsnamevaluesvnon_defaultsvalues           r   check_options_classr_   ]   s    5D#))+ftT"fQi/ 	2*T1	2/AD$"4&!+C-CC+  , 
~	& $ 
' 9D8I8I8KL8KfD&)O8KLLD#))+etT"e+++ , 
'	& Ms   ?C'"C3'C0c                      | di |}|j                  |j                  ||j                              }|j                         D ]  \  }}t	        ||      |k(  rJ  y )N)protocolrO   )loadsdumpsHIGHEST_PROTOCOLrP   rQ   )rW   picklerrX   rY   new_optsrZ   r^   s          r   check_options_class_picklingrg   u   sf    D}}W]]44;4L4L + N OH"((*ex&%/// +rL   c                   $    e Zd Zd Zd Zd Zd Zy)InvalidRowHandlerc                      || _         g | _        y r   )resultrows)selfrk   s     r   __init__zInvalidRowHandler.__init__~   s    	rL   c                 P    | j                   j                  |       | j                  S r   )rl   appendrk   )rm   rD   s     r   __call__zInvalidRowHandler.__call__   s    		{{rL   c                 X    t        |t              xr |j                  | j                  k(  S r   
isinstanceri   rk   rm   others     r   __eq__zInvalidRowHandler.__eq__   s'    5"34 ,+	-rL   c                 Z    t        |t               xs |j                  | j                  k7  S r   rs   ru   s     r   __ne__zInvalidRowHandler.__ne__   s*    u&788 ,+	-rL   N)__name__
__module____qualname__rn   rq   rw   ry   rO   rL   r   ri   ri   }   s    --rL   ri   c                      d} d}t        dd      D cg c]  }| }}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 y c c}w )N      rN      )rN   r         r~   )         	   
   r   r   r   r   r   r   r   )r   r0   r#   r%   )r    r!   xr   rl   rE   s         r   #test_split_rows_and_columns_utilityr      s    HHArl
#l1lC
#
3(34D    =h9:G	
A	
A	
A	
A	
B    $s   	A.c           
         t         } |       }t        |ddgddgg ddggddgddgdd	g
       t        || ddddgddd	       |j                  dkD  sJ d|_        |j                  dk(  sJ  |d      }|j                  dk(  sJ |j	                          d}t        j                  t        j                  |      5   |       }d|_        |j	                          d d d        d}t        j                  t        j                  |      5   |       }d|_	        |j	                          d d d        d}t        j                  t        j                  |      5   |       }d|_
        |j	                          d d d        d}t        j                  t        j                  |      5   |       }d|_        d|_        |j	                          d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   wxY w# 1 sw Y   y xY w)NTFr   r   abcdutf8utf16   )use_threads	skip_rowsrJ   autogenerate_column_namesencodingskip_rows_after_names)re   r   r   rJ   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_   rg   r   validaterS   rT   r9   ArrowInvalidr   r   r   rJ   )pickle_modulerW   rY   r   s       r   test_read_optionsr      s   
C5D$#$a&&(4,%738$-"('!2/0"g7 !m-1+,/3Tl;@*179; ??QDO??e###$D??d"""MMO;E	re	4u 
5
 <E	re	4u 
5
 HE	re	4u%'" 
5
)E	re	4u)-&&	 
5	4' 
5	4 
5	4 
5	4 
5	4s0   =GG"G.'&G:G"G+.G7:Hc                 (   t         }t        d      }t        |ddgddgg dddgddgddgd |g       t        || dddddd|		        |       j	                           |       }d
|_        |j	                          d}t        j                  t        j                  |      5   |       }d|_        |j	                          d d d        t        j                  t        j                  |      5   |       }d|_        |j	                          d d d        d}t        j                  t        j                  |      5   |       }d|_
        |j	                          d d d        t        j                  t        j                  |      5   |       }d|_
        |j	                          d d d        d}t        j                  t        j                  |      5   |       }d|_        |j	                          d d d        t        j                  t        j                  |      5   |       }d|_        |j	                          d d d        y # 1 sw Y   xY w# 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nskipr)   r   Fy)"zFT)	delimiterescape_char
quote_chardouble_quotenewlines_in_valuesignore_empty_linesinvalid_row_handler)re   r   r   r   r   r   r   r   	z,ParseOptions: delimiter cannot be \\r or \\nr   rI   z-ParseOptions: quote_char cannot be \\r or \\nz.ParseOptions: escape_char cannot be \\r or \\n)r	   ri   r_   rg   r   r   rS   rT   r9   r   r   r   )r   rW   skip_handlerrY   r   s        r   test_parse_optionsr      s   
C$V,LSz%*CL#4&*E],14=,0%=-1<,@B !m+.-0,1.348495AC ENN5DDNMMO>E	re	4u 
5
 
re	4u 
5
 @E	re	4u 
5
 
re	4u 
5
 AE	re	4u 
5
 
re	4u 
5	47 
5	4
 
5	4 
5	4
 
5	4 
5	4
 
5	4sH   !I	-I;I#I0I<!J	II #I-0I9<JJc                    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	       t        || ddddddgddt        dg	
       t	        j
                  t              5  d
|_        d d d        |j                  dkD  sJ d|_        |j                  dk(  sJ |j                  i k(  sJ t        j                         t        j                         d|_	        |j                  t        j                         t        j                         dk(  sJ ddd|_	        |j                  t        j                         t        j                         dk(  sJ t        j                  dt        j                         fdt        j                          fg      }||_	        |j                  t        j                         t        j                          dk(  sJ dt        j"                         fg|_	        |j                  dt        j"                         ik(  sJ t	        j
                  t$        d      5  dd i|_	        d d d        t	        j
                  t$              5  d|_	        d d d        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*              sJ ddg|_        |j.                  ddgk(  sJ |j0                  g k(  sJ t        g|_        |j0                  t        gk(  sJ  |dt        j                         iddgddgdd gd!t        d"g#      }|j                  dt        j                         ik(  sJ |j(                  ddgk(  sJ |j.                  dd gk(  sJ |j,                  ddgk(  sJ |j                  d!k(  sJ |j0                  t        d"gk(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)$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)	re   r   r   r   r   r   r   r   r   z..r   韆 )r   cint16null)r\   wr   r   r   r   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   rg   rS   rT   
ValueErrorr   r   r   r9   r   float32r   schemaint32r   binary	TypeErrorrt   r   r0   r   r   r   )r   rW   rY   r   s       r   test_convert_optionsr     s   
C5Du"DM$(%=CjeU^,!&124 !] #( %"G,	. 
z	"! 
# ))A---%*D"))U222""" hhjrzz|<Dbhhjrzz| DDDD%F3Dbhhjrwwy AAAAYYbhhj)C+=>?FDbhhjryy{ CCCCryy{+,Dbiik 2222	y(;	< $K 
=	y	! 
" d&&---!!!!!D$$$$$u~Du~---d&&---u~Du~---d''...D...!!R'''%YD!!gY...S"''),;S$K $K3"):!68D bggi 0000T{***d+++T{***))S000!!gz%::::k 
#	"* 
=	<	!	!s$   0P'<
P4'Q'P14P>Qc                     t         }  |        }t        | ddgg dg d       |j                  dkD  sJ d|_        |j                  dk(  sJ  | d	      }|j                  dk(  sJ |j                          d
}t	        j
                  t        j                  |      5   |        }d|_        |j                          d d d        y # 1 sw Y   y xY w)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   rS   rT   r9   r   )rW   rY   r   s      r   test_write_optionsr   f  s    
C5DT5M5E57 ??QDO??e###$D??d"""MMO<E	re	4u 
5	4	4s   CCc                       e Zd ZdZej
                  d        Zeej
                  d               Ze	d        Z
d Zd Zej                  j                  d        Zd Zd	 Zy
)BaseTestCSVzDCommon tests which are shared by streaming and non streaming readersc                     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rm   r   kwargss      r   
read_byteszBaseTestCSV.read_bytes  s
     "!rL   c                     t         )z#Whether this test is multi-threadedr   rm   s    r   r   zBaseTestCSV.use_threads  s
     "!rL   c                 Z    | j                   t        |      k(  sJ | j                  |k(  sJ y r   )num_columnslenrJ   )tablenamess     r   check_nameszBaseTestCSV.check_names  s.      CJ...!!U***rL   c                    d}t               }d|_        | j                  ||      }| j                  |ddg       |j	                         ddgdd	gd
k(  sJ d|_        | j                  ||      }| j                  |dd	g       |j	                         g g dk(  sJ d|_        t        j                  t        j                        5  | j                  ||      }d d d        d}d|_        | j                  ||      }| j                  |ddg       |j	                         dgd	gdk(  sJ d|_        ddg|_	        | j                  ||      }| j                  |ddg       |j	                         g g dk(  sJ y # 1 sw Y   xY w)N   ab,cd
ef,gh
ij,kl
mn,op
rN   read_optionsefghijmnklop)r   r   r   )r   r   r      abcd
,,,,,
ij,kl
mn,op
r   )r   r   )
r   r   r   r   	to_pydictrS   rT   r9   r   rJ   rm   rl   rY   r   s       r   test_header_skip_rowsz!BaseTestCSV.test_header_skip_rows  s   .}48t- ,,%
 
 	
 

 48t- %
 
 	
 

 ]]2??+OODtO<E ,
 .48t- &&%
 
 	
 
 !4L48t- %
 
 	
 
' ,+s   E==Fc                 T   d}t               }d|_        | j                  ||      }| j                  |ddg       |j	                         ddgdd	gd
k(  sJ d|_        | j                  ||      }| j                  |ddg       |j	                         g g d
k(  sJ d|_        | j                  ||      }| j                  |ddg       |j	                         g g d
k(  sJ d}d|_        ddg|_        | j                  ||      }| j                  |ddg       |j	                         ddgdd	gdk(  sJ t               }d}d|_        t               }d|_        | j                  |||      }| j                  |ddg       |j	                         dgd	gd
k(  sJ d|_        d|_        | j                  |||      }| j                  |ddg       |j	                         dgd	gd
k(  sJ t               }t        dd      \  }}d|_        t        |      dz  |_        | j                  ||      }|j                  |j                  k(  sJ |j                  dk(  sJ |j	                         }|j	                         j                         D ]  \  }}|dd  ||   k(  rJ  | j                  |||      }|j                  |j                  k(  sJ |j                  dk(  sJ |j	                         }|j	                         j                         D ]  \  }}|dd  ||   k(  rJ  t        ddd      \  }}t               }d|_        d |_        |j                  j                  |_        | j                  |||      }|j                  |j                  k(  sJ |j                  |j                  |j                  z
  |j                  z
  k(  sJ |j	                         }|j	                         j                         D ])  \  }}||j                  |j                  z   d  ||   k(  r)J  y )!Nr   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   f0f1r  r  s#   ab,cd
"e
f","g

h"
"ij","k
l"
mn,opTr   parse_options   r~   r(   r    r!   i  r   d      F)r    r!   r?   %   )   )r   r   r   r   r   rJ   r	   r   r   rG   r   r   r!   rP   r   r   )	rm   rl   rY   r   
parse_optsrF   
table_dictrZ   r[   s	            r   test_skip_rows_after_namesz&BaseTestCSV.test_skip_rows_after_names  s   .}%&"48t- ,,%
 
 	
 
 &'"48t- %
 
 	
 
 &'"48t- %
 
 	
 
 .%&"!4L48t- ,,%
 
 	
 
 } =%&"!^
(,
%4.8   :t- &&%
 
 	
 
 &'"4.8   :t- &&%
 
 	
 
 } )!dCh%("d)b.48||x...~~$$$__&
$..0668LD&#$<:d#3333 9 4.8   :||x...~~$$$__&
$..0668LD&#$<:d#3333 9 )!c5:<h}%'"$OO114.8   :||x...!!DNN2**++ 	, + __&
$..0668LD&4>>D,F,FFGHt$% & % 9rL   c                 	     fd}t        ddd      \  }}t               }t        |      dz  |_        t	               }dt        j                         i|_        |dz   } |d	d
      }t        j                  t
        j                  |      5   j                  |||       d d d        |dz   } |dd
|      }	t        j                  t
        j                  |	      5   j                  |||       d d d        d}
||
z   } |dd
|
dd j                  d            }t        j                  t
        j                  |      5   j                  |||       d d d        d|_        t        j                  t
        j                  |      5   j                  |||       d d d        t        j                  t
        j                  |	      5   j                  |||       d d d        t        j                  t
        j                  |      5   j                  |||       d d d        d|_        t        ddd      \  }}g d|_        |dz   } |d	d      }t        j                  t
        j                  |      5   j                  |||       d d d        ||
z   } |dd|
dd j                  d            }t        j                  t
        j                  |      5   j                  |||       d d d        |dz   } |dd      }	|	j                  t        |            }	t        j                  t
        j                  |	      5   j                  |||       d d d        d|_        t        j                  t
        j                  |      5   j                  |||       d d d        t        j                  t
        j                  |	      5   j                  |||       d d d        y # 1 sw Y   WxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   JxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                 j    j                   rd}ndj                  |      } | j                  |g| S )Nr   z	Row #{}: )r   format)
msg_formatrD   argsrow_inform   s       r   
format_msgz@BaseTestCSV.test_row_number_offset_in_errors.<locals>.format_msg.  s9    &--c2$:$$X555rL   r   r	  T)r?   r   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      )rG   r   r   r   r
   r9   r   r   rS   rT   r   r   decoder   rJ   r  r   )rm   r  rB   rA   r   r  csv_bad_columnsmessage_columnscsv_bad_typemessage_valuelong_rowcsv_bad_columns_longmessage_longs   `            r    test_row_number_offset_in_errorsz,BaseTestCSV.test_row_number_offset_in_errors+  s	   	6 !CT:Q"}"%c(Q,(*(+RXXZ'8$ 
*$%BCH]]2??/BOOO)5,;  = C
 ^+"? ]]2??-@OOL)5,;  = A
 <"X~!"G"*1R."7"7"@B]]2??,?OO0)5,;  = @ .0*]]2??/BOOO)5,;  = C
 ]]2??-@OOL)5,;  = A
 ]]2??,?OO0)5,;  = @
 ./* !CU;Q$8!
*$%BCH]]2??/BOOO)5,;  = C
  #X~!"G"*1R."7"7"@B]]2??,?OO0)5,;  = @
 ^+"? &,,SX6]]2??-@OOL)5,;  = A "$]]2??/BOOO)5,;  = C
 ]]2??-@OOL)5,;  = A@a CB A@ @? CB
 A@
 @? CB @? A@ CB
 A@s   O7PPPP+P8Q$QQQ+Q77PPPP(+P58QQQQ(+Q47R c                 x    d}t               }t        j                  t        d      5   j	                  ||       d d d        t        d      |_         j	                  ||      }|j                         ddgdd	gd
k(  sJ  fd}t        dd |d      d      t        dd |d      d      g}|j                  j                  |k(  sJ t        d      |_        t        j                  t        d      5   j	                  ||       d d d        t        dd |d      d      g}|j                  j                  |k(  sJ t        d      |_        |j                  |j                  |            } j	                  ||      }|j                         ddgdd	gd
k(  sJ y # 1 sw Y   hxY w# 1 sw Y   xY w)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                 $    j                   rd S | S r   )r   )r   rm   s    r   row_numz5BaseTestCSV.test_invalid_row_handler.<locals>.row_num  s    ++422rL   r   rN   r   r   r   zf,g,herror)r	   rS   rT   r   r   ri   r   r   r   rl   rb   rc   )rm   r   rl   r  r   r.  expected_rowss   `      r   test_invalid_row_handlerz$BaseTestCSV.test_invalid_row_handler  s   +!^
]]46 OOD
O;6 *;6)B
&J? ss%
 
 	
 

	3 q!WQZ-q!WQZ1
 --22mCCC *;7)C
&]]46 OOD
O;6 $Aq'!*c:;--22mCCC *;6)B
&"(()<)<Z)HI
J? ss%
 
 	
 
G6 6.6 6s   F#7F0#F-0F9c                 x   d}ddgddgddgd}t        d	d
      D ]?  }| j                  |t        d      t        |            j	                         }||k(  r?J  t        d	d      D ]C  }t        j                  t        d      5  | j                  |t        |             d d d        E y # 1 sw Y   PxY w)Ns   a,b,c
d,e,"f
"
g,h,i
r  gr+  hzf
r"   r   r   r   r      T)r   r   r  r   r   z#cell values spanning multiple linesr   r   )r   r   r	   r   r   rS   rT   r   )rm   rl   rF   r   r  s        r   test_chunker_out_of_syncz$BaseTestCSV.test_chunker_out_of_sync  s     0ss

  2,JLD$I(J?   AAJ  = = '  2,Jz%JL{j'I   KL L 'L Ls   B00B9	N)rz   r{   r|   __doc__r   abstractmethodr   propertyr   staticmethodr   r   r  rS   marknumpyr(  r1  r8  rO   rL   r   r   r   ~  s    N" " "  " + ++
Zg&R [[f= f=P)
VKrL   r   c                   B   e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Z d! Z!d" Z"e#jH                  jJ                  d#        Z&e#jH                  jJ                  d$        Z'y%)&BaseCSVTableReadT)validate_fullc                    t        | j                  t              sJ |j                  dt	                     }| j                  |_        t        |g|i |}|j                  |       |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)rt   r   bool
setdefaultr   r   r   )rm   rB   rA  r  r   r   r   s          r   r   zBaseCSVTableRead.read_csv  sc     $**D111((G#'#3#3 .t.v.M*rL   c                 N     | j                   t        j                  |      fi |S r   )r   r9   	py_bufferr   s      r   r   zBaseCSVTableRead.read_bytes       t}}R\\!_777rL   c                 P   d}dgdgd}t        j                  |      }| j                  |      }|j                         |k(  sJ t        j                  |j                               }t        j                  t              5  | j                  |       d d d        y # 1 sw Y   y xY w)Ns   a,b
1,2
rN   r   r   )	r.   BytesIOr   r   r/   r   rS   rT   r   )rm   dataexpected_databior   sios         r   test_file_objectz!BaseCSVTableRead.test_file_object  s~     c,jjc" M111kk$++-(]]9%MM# &%%s   BB%c                     d}| j                  |      }t        |t        j                        sJ | j	                  |g d       |j
                  dk(  sJ y )N   abc,def,gh
)r   r   r   r   )r   rt   r9   r<   r   r!   rm   rl   r   s      r   test_headerzBaseCSVTableRead.test_header  sL    %%*** 45~~"""rL   c                 b    d}dgdgd}| j                  |      }|j                         |k(  sJ y )Ns   ﻿a,b
1,2
rN   r   r   r   r   )rm   rl   rM  r   s       r   test_bomzBaseCSVTableRead.test_bom  s8    ( c,% M111rL   c                     g d}dD ]j  }d|fD ]a  }|j                  |      |z   }| j                  |      }t        |j                               dk(  sJ |j	                         g dg ddk(  raJ  l y )N)s   a,bs   1,2s   3,4s   56,78)   
      
rL   rN   )rN   r   8   )r   r   N   r   )r4   r   r   
to_batchesr   )rm   rl   line_endingfile_endingrL  r   s         r   test_one_chunkzBaseCSVTableRead.test_one_chunk  s     22K #[1"''-;-5++-.!333(##-   	  2 3rL   c                    d}t               }ddg|_        | j                  ||      }| j                  |ddg       |j	                         g dg ddk(  sJ d|_        | j                  ||      }| j                  |ddg       |j	                         d	gd
gdk(  sJ d|_        | j                  ||      }| j                  |ddg       |j	                         g g dk(  sJ d|_        t        j                  t        j                        5  | j                  ||      }d d d        d|_        g d|_        t        j                  t        j                  d      5  | j                  ||      }d d d        d}d|_        ddg|_        | j                  ||      }| j                  |ddg       |j	                         dd	gdd
gdk(  sJ y # 1 sw Y   xY w# 1 sw Y   kxY w)Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r~   r   )r   r   r   Expected 3 columns, got 2r   r   r   r   r   )
r   rJ   r   r   r   r   rS   rT   r9   r   r   s       r   test_header_column_namesz)BaseCSVTableRead.test_header_column_names  s   .} #J48c
+ ))%
 
 	
 

 48c
+ %
 
 	
 

 48c
+ %
 
 	
 

 ]]2??+OODtO<E ,
 +]]2??!<>OODtO<E>
 . #J48c
+ %
 
 	
 
# ,+> >s   G"G G G)c                    d}t               }d|_        | j                  ||      }| j                  |ddg       |j	                         g dg ddk(  sJ d	|_        | j                  ||      }| j                  |ddg       |j	                         d
gdgdk(  sJ d|_        t        j                  t        j                        5  | j                  ||      }d d d        y # 1 sw Y   y xY w)Nr   Tr   r  r  rc  rd  r  r   r   r   r   )
r   r   r   r   r   r   rS   rT   r9   r   r   s       r   %test_header_autogenerate_column_namesz6BaseCSVTableRead.test_header_autogenerate_column_namesF  s    .})-&48t- **%
 
 	
 

 48t- &&%
 
 	
 
 ]]2??+OODtO<E ,++s   	C&&C/c                 R   d}t               }dg|_        | j                  ||      }| j                  |dg       |j	                         dg dik(  sJ ddg|_        | j                  ||      }t        j                  dt        j                         fdt        j                         fg      }|j                  |k(  sJ |j	                         g dg ddk(  sJ g d|_        t        j                  t        d	
      5  | j                  ||       d d d        y # 1 sw Y   y xY w)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   r9   r   r   rS   rT   KeyError)rm   rl   r  r   r   s        r   test_include_columnsz%BaseCSVTableRead.test_include_columns_  s$   .(*+/&'oF' $%
 
 	
 

 ,0,'oFT299;/!299;/1 2||v%%% $$%
 
 	
 
 +=']]8">? OOD/OB? ? ?s    DD&c                     d}t               }t               }g d|_        d|_        | j	                  |||      }t        j                  dt        j                         fdt        j                         fdt        j                         fg      }|j                  |k(  sJ |j                         g dg d	g ddk(  sJ ddg|_
        dd
g|_        | j	                  |||      }t        j                  dt        j                         fd
t        j                         fg      }|j                  |k(  sJ |j                         g dg ddk(  sJ t        j                         t        j                         d|_        | j	                  |||      }t        j                  dt        j                         fd
t        j                         fg      }|j                  |k(  sJ |j                         g dg ddk(  sJ y )Nr   rn  Tr  ro  r   rp  NNNrl  r   rd  )NNNN)rp  r   )s   cds   ghs   kls   op)r   r
   r   r   r   r9   r   r   r   r   rJ   r   r   r   rm   rl   r   r  r   r   s         r   test_include_missing_columnsz-BaseCSVTableRead.test_include_missing_columns|  s   ."}(**<'26/<0?   AT2779-!299;/!2779-/ 0 ||v%%% $$$%
 
 	
 
 &*4L!+/,'<0?   AT299;/!2779-/ 0||v%%% **%
 
 	
 
 /1iik.0hhj(:$<0?   AT299;/!288:.0 1||v%%% .*%
 
 	
 
rL   c                 2   d}| j                  |      }t        j                  dt        j                         fdt        j                         fdt        j                         fg      }|j                  |k(  sJ |j	                         ddgddgd	d
gdk(  sJ y )Ns   a,b,c
1,2,3
4,5,6
r   r   r   rN   r   r   r~   r   r   r5  )r   r9   r   r;   r   rm   rl   r   r   s       r   test_simple_intsz!BaseCSVTableRead.test_simple_ints  s    '%S"((*- "((*- "((*-/ 0 ||v%%% QQQ%
 
 	
 
rL   c                 b   d}| j                  |      }t        j                  dt        j                         fdt        j                         fdt        j
                         fdt        j                         fg      }|j                  |k(  sJ |j                         ddgdd	gd
dgddgdk(  sJ y )Ns    a,b,c,d
1,2,3,0
4.0,-5,foo,True
r   r   r   r        ?g      @r   3fooFTr  )r   r9   r   float64r;   r   bool_r   rx  s       r   test_simple_variedz#BaseCSVTableRead.test_simple_varied  s    5%S"**,/ "((*- "))+. "((*-/ 0 ||v%%% sRu	%
 
 	
 
rL   c           
         d}| j                  |      }t        j                  dt        j                         fdt        j                         fdt        j
                         fdt        j                         fdt        j                         fdt        j                         fg      }|j                  |k(  sJ |j                         g dg d	g d
g dg dg ddk(  sJ y )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)r{  Ng      @)r   r|  N)r   r~  nanrt  )   3s   nan   )NTF)r   r   r   r  r+  r  )
r   r9   r   r  r;   r   r   r   r  r   rx  s       r   test_simple_nullsz"BaseCSVTableRead.test_simple_nulls  s    . %S"**,/ "((*- "))+. "''), "))+. "((*-/ 0 ||v%%% !##($%
 
 	
 
rL   c                 6   t        d      }d}| j                  ||      }t        j                  dt        j                         fdt        j
                         fg      }|j                  |k(  sJ |j                         g dg dd	k(  sJ t        d
      }| j                  |||      }t        j                  dt        j
                         fdt        j                         fg      }|j                  |k(  sJ |j                         g dg dd	k(  sJ y )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.25r  z-4)g      @g      N)r	   r   r9   r   r  r   r   r
   )rm   r  rl   r   r   r  s         r   test_decimal_pointz#BaseCSVTableRead.test_decimal_point  s   $s3-MBS"**,/ "))+.0 1||v%%% #$%
 
 	
 

 )s;M0?   AS"))+. "**,/1 2||v%%% %"%
 
 	
 
rL   c                    d}| j                  |      }t        j                  dt        j                         fdt        j                  d      fdt        j                  d      fg      }|j                  |k(  sJ |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(  sJ y )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  rN   r      r   ix @ r5  )r   r9   r   r;   	timestampr   r   rx  s       r   test_simple_timestampsz'BaseCSVTableRead.test_simple_timestamps  s    I %S"((*- ",,s"34 ",,t"457 8 ||v%%% 4A&q"a(@A4Aq!Q74B1a8:%
 
 	
 
rL   c                    d}t               }| j                  ||      }t        j                  dt        j                         fdt        j
                  d      fg      }|j                  |k(  sJ |j                         ddgt        dd	d	      t        dd	d
      gdk(  sJ dg|_        | j                  ||      }t        j                  dt        j
                  d      fdt        j                         fg      }|j                  |k(  sJ |j                         t        dd	d	      t        dd	d
      gddgdk(  sJ dt        g|_        | j                  ||      }t        j                  dt        j
                  d      fdt        j
                  d      fg      }|j                  |k(  sJ |j                         t        dd	d	      t        dd	d
      gt        dd	d	      t        dd	d
      gdk(  sJ y )Ns6   a,b
1970/01/01,1980-01-01 00
1970/01/02,1980-01-02 00
rk  r   r   r  z
1970/01/01z
1970/01/02i  rN   r   r   z%Y/%m/%dr  z1980-01-01 00z1980-01-02 00)
r
   r   r9   r   r   r  r   r   r   r   )rm   rl   rY   r   r   s        r   test_timestamp_parsersz'BaseCSVTableRead.test_timestamp_parsers  s   Kd;S"))+. ",,s"346 7||v%%% -4A&q!(<=%
 
 	
 

 #-d;S",,s"34 "))+.0 1||v%%% 4A&q!(<=!?3%
 
 	
 

 #-g!6d;S",,s"34 ",,s"346 7||v%%% 4A&q!(<=4A&q!(<=%
 
 	
 
rL   c                    d}| j                  |      }t        j                  dt        j                         fdt        j                         fg      }|j                  |k(  sJ |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        j                         t        j                         d|_        | j                  ||	      }t        j                  dt        j                         fdt        j                         fg      }|j                  |k(  sJ |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        j                  d
      t        j                  d      d|_        | j                  ||	      }t        j                  dt        j                  d
      fdt        j                  d      fg      }|j                  |k(  sJ |j	                         t        ddd      t        ddd      gt        ddd      t        ddd      gdk(  sJ y )Ns0   a,b
1970-01-01,1970-01-02
1971-01-01,1971-01-02
r   r   r  rN   i  r   r   rk  r  ms)r   r9   r   date32r   r   r
   date64r   r  r   )rm   rl   r   r   rY   s        r   
test_dateszBaseCSVTableRead.test_dates*  sA   E%S"))+. "))+.0 1||v%%% tQ"Dq!$45tQ"Dq!$45%
 
 	
 
 "$))+BIIK@d;S"))+. "))+.0 1||v%%% tQ"Dq!$45tQ"Dq!$45%
 
 	
 
 "$,,s"3",,t:LMd;S",,s"34 ",,t"457 8||v%%% 4A&q!(<=4A&q!(<=%
 
 	
 
rL   c           	         ddl m} d}| j                  |      }t        j                  dt        j
                  d      fdt        j                         fg      }|j                  |k(  sJ |j                          |ddd	       |d
dd      gddgdk(  sJ t               }t        j                  d      t        j
                  d      d|_
        | j                  ||      }t        j                  dt        j                  d      fdt        j
                  d      fg      }|j                  |k(  sJ |j                          |ddd	       |d
dd      g |ddd	d       |d
ddd      gdk(  sJ y )Nr   )times0   a,b
12:34:56,12:34:56.789
23:59:59,23:59:59.999
r   r  r      "   r\  r  ;   z12:34:56.789z23:59:59.999r   usr  rk  i
 iX> )r   r  r   r9   r   time32r   r   r
   time64r   )rm   r  rl   r   r   rY   s         r   
test_timeszBaseCSVTableRead.test_timesN  sm   !E%S"))C.1 "))+.0 1||v%%% r2r"DR$45 .1%
 
 	
 
 "$))D/		$Hd;S"))D/2 "))D/24 5||v%%% r2r"DR$45r2r6*DRV,DE%
 
 	
 
rL   c                    t        d      }dj                         }| j                  ||      }t        j                  dt        j
                  t        j                         t        j                               fdt        j                         fg      }g dg dd	}|j                  |k(  sJ |j                         |k(  sJ d
|_
        | j                  ||      }|j                  |k(  sJ |j                         |k(  sJ d|_
        | j                  ||      }|j                  t        j                  dt        j                         fdt        j                         fg      k(  sJ |j                         |k(  sJ d|_
        d|_        d}| j                  ||d      }|j                  |k(  sJ |d   j                  d      j
                  }t        |      d
k(  sJ |d   j                         dk(  sJ |d   j                         dk(  sJ d|_        | j                  ||      }t        j                  dt        j
                  t        j                         t        j                                fdt        j                         fg      }g dg dd	}|j                  |k(  sJ |j                         |k(  sJ y )NT)r   u   a,b
ab,1
cdé,2
cdé,3
ab,4rk  r   r   )r      cdér  r   )rN   r   r   r   r   r   rN   2   Fs   a,b
ab,1
cd,2
ab,3)r  rA  r   r      cd)   abr  r  rN   r   r   )r
   r8   r   r9   r   
dictionaryr   r   r;   r   r   r   chunkr   as_py	as_bufferr   )rm   rY   rl   r   r   rF   dict_valuess          r   test_auto_dict_encodez&BaseCSVTableRead.test_auto_dict_encodei  s   t40779d;S"--
BIIK"HI "((*-/ 0 .
 ||v%%% H,,,)*&d;||v%%% H,,, *+&d;||ryy3		*<+.
*;*=  > > 	> > H,,, *,&+d.3   5||v%%%Cj&&q)44;1$$$1~##%---1~'')Y666 d;S"--
BIIK"HI "((*-/ 0 +
 ||v%%% H,,,rL   c                    t        ddg      }d}| j                  ||      }t        j                  dt        j                         fdt        j
                         fdt        j
                         fd	t        j                         fg      }|j                  |k(  sJ |j                         d d gdd
gddgdd gdk(  sJ t        ddgd      }| j                  ||      }|j                         d d gd d
gddgdd gdk(  sJ d|_        | j                  ||      }|j                         d d gdd
gddgdd gdk(  sJ t        g       }d}| j                  ||      }t        j                  dt        j
                         fdt        j
                         fg      }|j                  |k(  sJ |j                         d
gdgdk(  sJ y )NXxxZzz)r   s$   a,b,c,d
Zzz,"Xxx",1,2
Xxx,#N/A,,Zzz
rk  r   r   r   r  z#N/A1r   r   r  T)r   r   Fs
   a,b
#N/A,
r   )	r
   r   r9   r   r   r   r;   r   r   rm   rY   rl   r   r   s        r   test_custom_nullsz"BaseCSVTableRead.test_custom_nulls  s   5%.9=d;S"''), "))+. "))+. "((*-/ 0 ||v%%% rT	%
 
 	
 
 5%.268d; rT	%
 
 	
 
 +0'd; rT	%
 
 	
 
 "-d;S"))+. "))+.0 1||v%%% %
 
 	
 
rL   c                 X   t        ddgddg      }d}| j                  ||      }t        j                  dt        j                         fd	t        j
                         fd
t        j                         fg      }|j                  |k(  sJ |j                         g dg dg ddk(  sJ y )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
rk  r   r   r   )TrueFalser  r  r   )TFTFN)tr  r  r  r   r5  )r
   r   r9   r   r   r  r   r  s        r   test_custom_boolsz"BaseCSVTableRead.test_custom_bools  s    3,,/;8! d;S"))+. "((*- "))+.0 1 ||v%%% :1/%
 
 	
 
rL   c                 p   t        dddt        j                  dd      dd      }d	}| j                  ||
      }t        j                  dt        j
                         fdt        j                         fdt        j                         fdt        j                         fdt        j                  dd      fg      }ddgddgddgddgt        d      t        d      gd}|j                  |k(  sJ |j                         |k(  sJ t        t        j                  dt        j                         fdt        j                         fdt        j                         fdt        j                  dd      fdt        j                         fg            }| j                  ||
      }|j                  |k(  sJ |j                         |k(  sJ d}t        j                  t        j                        5 }| j                  ||
       d d d        t        j                        }d|v sJ d|v sJ y # 1 sw Y   +xY w)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
rk  r   r   r   r  r+  rN   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
   r9   
decimal128r   r   r;   r   r   r  r   r   rS   rT   r   r6   r^   )rm   rY   rl   r   r   rF   excerrs           r   test_column_typesz"BaseCSVTableRead.test_column_types  s   191:13r11E28	,: ;
 >d;S"((*- "**,/ "))+. "((*- "--A"67	9 : Qts&/76?3
 ||v%%% H,,,S"**,$7%("))+$6%("((*$5%("--A*>$?%)288:$6	$8 9: d;||v%%% H,,,=]]2??+sOOD$O7 ,#))n#s***CsJJJ	 ,+s   .H,,H5c           
      .   dt        j                  t        j                         t        j                               fdt        j                  t        j                         t        j                               fdt        j                  t        j                         t        j
                  dd            fdt        j                  t        j                         t        j                               fg}t        t        |            }d}| j                  ||	      }t        j                  |      }g d
g dt        d      t        d      t        d      gg dd}|j                  |k(  sJ |j                         |k(  sJ dt        j                  t        j                         t        j                               f|d<   t        t        |            }t        j                  t               5  | j                  ||	      }d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r  r  s<   a,b,c,d
abc,123456,1.0,zz
defg,123456,0.5,xx
abc,N/A,1.0,xx
rk  )r   defgr   )r  r  Nr  z0.50)r  ro  ro  r  r   )r9   r  r   r   r;   r  
large_utf8r
   dictr   r   r   r   int8rS   rT   r   )rm   r   rY   rl   r   r   rF   s          r   test_column_types_dictz'BaseCSVTableRead.test_column_types_dict  sv    "--
BGGI67"--
BHHJ78"--
BMM"a,@AB"--
BMMO<=	? 4+=>$ d;<(''&/76?GFOD#	
 ||v%%% H,,, bggi CDQ4+=>]]./OOD$O?E 0//s   .HHc                 d   d}t        ddg      }t        dt        j                         i      }| j	                  |||      }t        j
                  dt        j                         fdt        j                         fg      }|j
                  |k(  sJ |j                         g dg dd	k(  sJ y )
Ns   a,b
c,d
e,f
r   r   rJ   r  r  )   a   c   e)r   r  r  re  )r   r
   r9   r   r   r   r   r   ru  s         r   #test_column_types_with_column_namesz4BaseCSVTableRead.test_column_types_with_column_names&  s     ""c
;(sBIIK6HI<0?   AS"))+. "))+.0 1||v%%% # %
 
 	
 
rL   c                 h    d}| j                  |      }|j                         ddgddgddgdk(  sJ y )	N   a,b,c
1,2,3
4,5,6rN   r   r   r~   r   r   r5  rV  rS  s      r   test_no_ending_newlinez'BaseCSVTableRead.test_no_ending_newline6  sH    %% QQQ%
 
 	
 
rL   c                 X    d}| j                  |      }|j                         dg ik(  sJ y )Ns   ,

r   rV  rS  s      r   test_trivialzBaseCSVTableRead.test_trivial@  s.    % RH,,,rL   c                 P   d}| j                  |      }|j                         ddgddgdk(  sJ t        d      }| j                  ||	      }|j                         g d
g ddk(  sJ t        d      }| j                  |||      }|j                         d dgd dgdk(  sJ y )Ns   a,b
1,2

3,4
rN   r   r   r   r   F)r   r*  )NrN   Nr   )Nr   Nr   )r   r7  )r  2)r   r   r	   r   )rm   rl   r   r  r   s        r   test_empty_linesz!BaseCSVTableRead.test_empty_linesF  s    +% QQ%
 
 	
 
 %>MB ##%
 
 	
 
 #Q/M-9   ; %
 
 	
 
rL   c                    d}t        j                  t        j                  d      5  | j	                  |       d d d        d}t        j                  t        j                  d      5  | j	                  |       d d d        dD ]A  }t        j                  t        j                  d      5  | j	                  |       d d d        C y # 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   fxY w)Ns   a,b,c
1,2
4,5,6
rf  r   s   a,b,c
1,2,3
4zExpected 3 columns, got 1)rL   rY  r[  rZ  s   

Empty CSV file)rS   rT   r9   r   r   )rm   rl   s     r   test_invalid_csvz!BaseCSVTableRead.test_invalid_csv[  s    %]]2??2MNOOD! O!]]2??2MNOOD! O9Dr6FG% HG : ON ON HGs#   C
)C-C"
CC"C+	c                     d}| j                  |      }|j                         dgdgdk(  sJ t        d      }| j                  ||      }|j                         dgd	gd
k(  sJ y )N   a;b,c
de,fg;eh
defg;eha;br   r  r  r*  de,fgehr   b,c)r   r   r	   )rm   rl   r   rY   s       r   test_options_delimiterz'BaseCSVTableRead.test_options_delimiterg  s    #% 6%
 
 	
 
 c*D9 6%
 
 	
 
rL   c                     t        dd      \  }}| j                  |      }|j                  |j                  k(  sJ |j                  |      sJ |j	                         |j	                         k(  sJ y Nr   r   r  )rG   r   r   equalsr   )rm   rB   rF   r   s       r   test_small_random_csvz&BaseCSVTableRead.test_small_random_csvu  sf    'R@X$||x...||H%%% H$6$6$8888rL   c                 L   t        dd      \  }}g d}||j                  d      g}|D ]x  }|D ]q  }t        |      }| j                  ||      }|j                  |j                  k(  sJ |j                  |      rO|j                         |j                         k(  rqJ  z y )Nr     r  )r   r        r  o   r[  r   r   )rG   rstripr   r   r   r  r   )	rm   csv_baserF   block_sizescsvsrB   r   r   r   s	            r   test_stress_block_sizesz(BaseCSVTableRead.test_stress_block_sizes|  s    ,a#F(/(//'23C)
*jA,G||x666||H- ??,0B0B0DDDD * rL   c                    	 t         j                  }d}t        |      D cg c]  }dj	                  |       }}t        |      } |       }t        |d d d   D ci c]  }|t        j                          c}      }| j                  ||      }	 |       |z
  }
|
dk  sJ |	j                  |k(  sJ |	j                  dk(  sJ |	j                  |k(  sJ y # t        $ r t         j                   }Y w xY wc c}w c c}w )Ni'  zK{}r   r  rk        $@r   )r  thread_timerU   r   r  rK   r
   r9   r   r   r   r!   rJ   )rm   clockr   r"   rC   rB   t1kr  r   dts              r   "test_stress_convert_options_blowupz3BaseCSVTableRead.test_stress_convert_options_blowup  s   	$$E .3K.@A.@U\\!_.@	AY'W(2;CaC.A.Q!RYY[..AC_EWr\ Tzz  K///~~"""!!Y...#  	IIE	 B Bs   C C7C<C43C4c           	         t        j                         j                  t        j                         j                  k7  rt	        j
                  d       d }d}d}d}|dk  r|dk  rt        d|       d	d
|z  z   }d }	 t        j                         5 }	 t        j                  |      }|j                          t        j                         }		 | j                  |       t        j                  |gg |gd       	 d d d        ||j                  n|dz  }|dk  r|dk  rt	        j                   d       |dk  sJ |j                  }
t#        |
t$        j&                        sJ |
j(                  t*        j,                  k(  sJ y # t        $ r#}
|
}t        j                         |	z
  }Y d }
~
d }
~
ww xY w# t        j                  |gg |gd       w xY w# 1 sw Y   xY w# t        $ r Y w xY w)Nz'test only works from main Python threadc                  t    t        j                  d       t        j                  t        j                         y )Ng?)r  sleepsignalraise_signalSIGINTrO   rL   r   signal_from_threadz>BaseCSVTableRead.test_cancellation.<locals>.signal_from_thread  s    JJsO.rL   g        i r   g      @r   zworkload size:s   a,b,c
s   1,2,3
targetr  r   z0Failed to get an interruption during CSV readingr  )	threadingcurrent_threadidentmain_threadrS   r   printr   signal_wakeup_fdThreadstartr  r   KeyboardInterruptselect__context__failrt   r9   ArrowCancelledsignumr  r  )rm   r  last_durationworkload_sizeattempts	large_csvexc_infosigfdr  r  r+  s              r   test_cancellationz"BaseCSVTableRead.test_cancellation  s   $$&,,%%'--.KKAB	/ c!hm"M2"Z-%??IH **,B%,,4FG	!YY[= OOI6 ugrE7DA -( # ''3 *A-MM c!hmP KKJK ###  !R..///xx6==(((?  1 ='(H,0IIK",<M= ugrE7DA -,  % sf   =G! G:F6FG:G! 	F3F.)F6.F33F66GGGG! !	G-,G-c                 x     t        j                   fd      }|j                          |j                          y )Nc                  &     j                  d      S )Ns   f64
0.1)r   r   s   r   <lambda>z=BaseCSVTableRead.test_cancellation_disabled.<locals>.<lambda>  s    4??;7rL   r  )r
  r  r  r4   )rm   r  s   ` r   test_cancellation_disabledz+BaseCSVTableRead.test_cancellation_disabled  s*    
 79			rL   N)(rz   r{   r|   r   r   rP  rT  rW  ra  rg  ri  rr  rv  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rS   r=  r
  r  r"  rO   rL   r   r@  r@    s    15 8	#21
f=2C:+
Z

 
.
2
" 
D"
H
6/-b,
\
*'KR@@
 
-
*
&
9E/0 [[@) @)D [[ rL   r@  c                       e Zd Zed        Zy)TestSerialCSVTableReadc                      yNFrO   r   s    r   r   z"TestSerialCSVTableRead.use_threads      rL   Nrz   r{   r|   r;  r   rO   rL   r   r$  r$         rL   r$  c                       e Zd Zed        Zy)TestThreadedCSVTableReadc                      yNTrO   r   s    r   r   z$TestThreadedCSVTableRead.use_threads      rL   Nr(  rO   rL   r   r+  r+    s     rL   r+  c                        e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z fdZej,                  j.                   fd       Z xZS )BaseStreamingCSVReadc                 v    |j                  dt                     }| j                  |_        t        |g|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   )rF  r   r   r   )rm   rB   r  r   r   s        r   r   zBaseStreamingCSVRead.open_csv  s;     ((G#'#3#3 -d-f--rL   c                 N     | j                   t        j                  |      fi |S r   )r   r9   rH  r   s      r   
open_byteszBaseStreamingCSVRead.open_bytes	  rI  rL   c                    |j                   |k(  sJ t        |      }t        |      t        |      k(  sJ t        ||      D ]=  \  }}|j	                  d       |j                   |k(  sJ |j                         |k(  r=J  y )NTrC  )r   r0   r   zipr   r   )rm   readerexpected_schemarM  batchesbatchexpected_batchs          r   check_readerz!BaseStreamingCSVRead.check_reader  s    }}///v,7|s=1111%(-%@!E>NNN%<<?222??$666 &ArL   c                 D     | j                   |fi |j                         S r   )r3  read_allr   s      r   r   zBaseStreamingCSVRead.read_bytes  s!    tq+F+4466rL   c                    d}ddgddgd}t        j                  |      }| j                  |      }t        j                  dt        j
                         fdt        j
                         fg      }| j                  |||g       y )	Ns   a,b
1,2
3,4
rN   r   r   r   r   r   r   )r.   rK  r   r9   r   r;   r;  )rm   rL  rM  rN  r6  r7  s         r   rP  z%BaseStreamingCSVRead.test_file_object  sw    ! !fAq62jjs#))c288:%6&)288:%6%8 9&/M?CrL   c                     d}| j                  |      }t        j                  dt        j                         fdt        j                         fdt        j                         fg      }| j	                  ||g        y )NrR  r   r   r   )r3  r9   r   r   r;  rm   rl   r6  r7  s       r   rT  z BaseStreamingCSVRead.test_header!  se    &))eRWWY%7&+RWWY%7&*BGGI%6%8 9 	&/26rL   c                    d}t        j                  dt        j                         fdt        j                         fg      }t	               }t        |      |_        | j                  ||      }| j                  ||g dg ddg       t        |      dz
  |_        | j                  ||      }| j                  ||d	d
gddgddgdgdg       y )N   a,b
123,456
abc,de
gh,ij
r   r   r   )123r   r   )   456   de   ijr   rN   rC  r   rD  rE  r   rF  )	r9   r   r   r   r   r   r   r3  r;  )rm   rl   r7  r   r6  s        r   test_inferencez#BaseStreamingCSVRead.test_inference)  s    3))c299;%7&)299;%7%9 : #}"%d)LA&/!5!;= >	? #&d)a-LA&/"'"()!46"&"'*+	,rL   c                 T   d}t               }t        |      dz
  |_        | j                  ||      }t	        j
                  dt	        j                         fdt	        j                         fg      }|j
                  |k(  sJ |j                         j                         dgdgdk(  sJ t        j                  t        d	
      5  |j                          d d d        t        j                  t              5  |j                          d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)NrB  r   r   r   r   {   i  r   zCSV conversion error to int64r   )r   r   r   r3  r9   r   r;   read_next_batchr   rS   rT   r   StopIterationrm   rl   r   r6  r7  s        r   test_inference_failurez+BaseStreamingCSVRead.test_inference_failure>  s    3"}"%d)a-LA))c288:%6&)288:%6%8 9}}///%%'113cU8
 
 	
 
 ]]:!@B""$B ]]=)""$ *)	B B *)s   D8DDD'c                 \   d}t               }d|_        t        j                  t        j
                  d      5  | j                  ||      }d d d        d}d|_        | j                  ||      }|j                         j                         dgd	gd
k(  sJ t        j                  t        j
                  d      5  |j                          d d d        t        j                  t              5  |j                          d d d        y # 1 sw Y   xY w# 1 sw Y   HxY w# 1 sw Y   y xY w)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   rN   r   r   )
r   r   rS   rT   r9   r   r3  rJ  r   rK  )rm   rl   r   r6  s       r   r  z%BaseStreamingCSVRead.test_invalid_csvR  s    ("}"$]]2??!<>__< % 1F> )"#LA%%'113aSs7KKKK]]2??!<>""$> ]]=)""$ *)> >> > *)s#   D
>D0D"
DD"D+c                    d}| j                  |      }t        j                  dt        j                         fdt        j                         fg      }| j	                  ||dgdgdg       t        d      }| j                  ||	      }t        j                  d
t        j                         fdt        j                         fg      }| j	                  ||dgdgdg       y )Nr  r  r   r  r  r  r  r  r*  r   r  r  r  r  )r3  r9   r   r   r;  r	   )rm   rl   r6  r7  rY   s        r   r  z+BaseStreamingCSVRead.test_options_delimiterh  s    #&))eRYY[%9&)299;%7%9 :&/$(6"), -	. c*T:))c299;%7&+RYY[%9%; <&/")$(6+ ,	-rL   c                    d}| j                  |      }t        j                  dt        j                         fdt        j                         fdt        j                         fg      }| j	                  ||ddgddgd	d
gdg       y )Nr  r   r   r   rN   r   r   r~   r   r   r5  )r3  r9   r   r;   r;  r@  s       r   r  z+BaseStreamingCSVRead.test_no_ending_newliney  s    %&))c288:%6&)288:%6&)288:%6%8 9 	&/"#Q"#Q"#Q) *	+rL   c                     t        j                  t        d      5  | j                  d       d d d        y # 1 sw Y   y xY w)Nr  r   rL   )rS   rT   r   r3  r   s    r   test_empty_filez$BaseStreamingCSVRead.test_empty_file  s)    ]]:-=>OOC  ?>>s	   7A c                 j   d}t               }g d|_        | j                  ||      }t        j                  dt        j
                         fdt        j
                         fdt        j
                         fg      }| j                  ||ddgd	d
gddgdg       t               }ddg|_        | j                  |||      }t        j                  dt        j
                         fdt        j
                         fg      }| j                  ||d	d
gddgdg       dt        j                         i|_
        | j                  |||      }t        j                  dt        j
                         fdt        j                         fg      }| j                  ||ddgddgdg       g d|_        t        j                  t        d      5  | j                  |||      }d d d        d|_        | j                  |||      }t        j                  dt        j                         fdt        j
                         fdt        j                         fg      }| j                  ||d d gddgddgdg       t        j                         t        j                          d|_
        | j                  |||      }t        j                  dt        j                          fdt        j
                         fdt        j                         fg      }| j                  ||d d gddgddgdg       y # 1 sw Y   LxY w)Ns   1,2,3
4,5,6)r  r+  r  r   r  r+  r  rN   r   r   r~   r   r   r  )r+  r  r  5)r3  r  r+  z,Column 'g' in include_columns does not existr   Tr3  )r3  r+  r  )r+  r3  )r   rJ   r3  r9   r   r;   r;  r
   r   r   r   rS   rT   rq  r   r   r  )rm   rl   r   r6  r7  r  s         r   test_column_optionsz(BaseStreamingCSVRead.test_column_options  s.   "}$3!LA))c288:%6&)288:%6&)288:%6%8 9 	&/"#Q"#Q"#Q) *	+ )*+.*'L1@ ! B))c288:%6&)288:%6%8 9&/"#Q"#Q) *	+
 ),RYY['9$L1@ ! B))c288:%6&)299;%7%9 :&/"%s"#Q) *	+
 +:']]DF __T5D % FFF 37/L1@ ! B))c2779%5&)288:%6&)299;%7%9 : 	&/"&"%s"#Q) *	+
 .0YY[rzz|'L$L1@ ! B))c2::<%8&)288:%6&)299;%7%9 : 	&/"&"%s"#Q) *	+/F Fs   	L((L2c                    d}t               }| j                  ||      }t        j                  dt        j                         fdt        j
                         fg      }| j                  ||dgdgdg       d|_        | j                  ||      }t        j                  dt        j                         fdt        j                         fg      }| j                  ||dgd	gdg       d
}d|_        | j                  ||      }t        j                  dt        j                         fdt        j                         fg      }| j                  ||dgd	gdg       y )Ns   a,b
un,lphantr   r   r   uns   lphantr   latin1u
   éléphants    a , b 
 u n ,  l  p h a n t r   )r   r3  r9   r   r   r   r;  r   rL  s        r   test_encodingz"BaseStreamingCSVRead.test_encoding  s[   ("}LA))c299;%7&)299;%7%9 :&/"&"3!46 7	8 !)LA))c299;%7&)299;%7%9 :&/"&".1 2	3
F 'LA))c299;%7&)299;%7%9 :&/"&".1 2	3rL   c                    t        dd      \  }}| j                  |      }|j                         }|j                  |j                  k(  sJ |j	                  |      sJ |j                         |j                         k(  sJ y r  )rG   r3  r=  r   r  r   )rm   rB   rF   r6  r   s        r   r  z*BaseStreamingCSVRead.test_small_random_csv  sr    'R@X%!||x...||H%%% H$6$6$8888rL   c                    t        dd      \  }}g d}||j                  d      g}|D ]  }|D ]  }|d | j                  d      dk\  sJ t        |      }| j	                  ||      }|j                         }	|	j                  |j                  k(  sJ |	j                  |      rx|	j                         |j                         k(  rJ   y )	Nr   r  r  )      r  r  r  r  r[  rY  r   r   )	rG   r  countr   r3  r=  r   r  r   )
rm   r  rF   r  r  rB   r   r   r6  r   s
             r   r  z,BaseStreamingCSVRead.test_stress_block_sizes  s    ,a#F(/(//'23C)
;J'--e4999*jAl ) 4)||x666||H- ??,0B0B0DDDD * rL   c                    t        j                          t        j                         }d }d}t	               }ddg|_        d|_        | j                  ||      } ||dgdgd	       t        j                         } ||d
gdgd	       t        j                         |k  sJ  ||dgdgd	       t        j                         |k  sJ  ||dgdgd	       t        j                         |k  sJ t        j                  t              5  |j                          d d d        t        j                         |k(  sJ d }t        j                         |k(  sJ y # 1 sw Y   >xY w)Nc                 N    | j                         }|j                         |k(  sJ y r   )rJ  r   )r6  rF   r9  s      r   check_one_batchzABaseStreamingCSVRead.test_batch_lifetime.<locals>.check_one_batch  s%    **,E??$000rL   s   10,11
12,13
14,15
16,17
r   r   r   r   r   r   r   r  r  r  r6     r  )gccollectr9   total_allocated_bytesr   rJ   r   r3  rS   rT   rK  rJ  )rm   old_allocatedra  rl   r   r6  allocated_after_first_batchs          r   test_batch_lifetimez(BaseStreamingCSVRead.test_batch_lifetime  sN   


002	1 /"}%(#J!"#LArd" 67&(&>&>&@#rd" 67'')-HHHHrd" 67'')-HHHHrd" 67'')-HHHH]]=)""$ *'')]:::'')]:::	 *)s   EE"c                    t         |           d}t               }d|_        ddg|_        | j                  ||      }t        j                  t              5  |j                         sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   )
superr   r   r   rJ   r3  rS   rT   rK  rJ  rm   rl   rY   r6  	__class__s       r   r   z*BaseStreamingCSVRead.test_header_skip_rows  sk    %'. }!4LD9]]=)))+++ *))s   A55A>c                    t         |           d}t               }d|_        | j	                  ||      }t        j                  t              5  |j                         sJ 	 d d d        d|_        | j	                  ||      }t        j                  t              5  |j                         sJ 	 d d d        y # 1 sw Y   YxY w# 1 sw Y   y xY w)Nr   r   r   r   )	rj  r  r   r   r3  rS   rT   rK  rJ  rk  s       r   r  z/BaseStreamingCSVRead.test_skip_rows_after_names+  s    *,. }%&"D9]]=)))+++ * &+"D9]]=)))+++ *) *) *)s   B;C;CC)rz   r{   r|   r   r3  r;  r   rP  rT  rG  rM  r  r  r  rR  rU  rY  r  r  rh  r   rS   r=  r>  r  __classcell__rl  s   @r   r0  r0    s~    	.877D7,*%(%,-"
+!?+B3<9E$;8, [[, ,rL   r0  c                       e Zd Zed        Zy)TestSerialStreamingCSVReadc                      yr&  rO   r   s    r   r   z&TestSerialStreamingCSVRead.use_threads@  r'  rL   Nr(  rO   rL   r   rq  rq  ?  r)  rL   rq  c                       e Zd Zed        Zy)TestThreadedStreamingCSVReadc                      yr-  rO   r   s    r   r   z(TestThreadedStreamingCSVRead.use_threadsG  r.  rL   Nr(  rO   rL   r   rt  rt  E  s     rL   rt  c                   $    e Zd Zd Zd Zd Zd Zy)BaseTestCompressedCSVReadc                 :    t        j                  d      | _        y )Nzarrow-csv-test-)prefix)tempfilemkdtemptmpdirr   s    r   setUpzBaseTestCompressedCSVRead.setUpN  s    &&.?@rL   c                 B    t        j                  | j                         y r   )shutilrmtreer|  r   s    r   tearDownz"BaseTestCompressedCSVRead.tearDownQ  s    dkk"rL   c                     	 t        |      S # t        j                  $ r(}t        j                  t        |             Y d }~y d }~ww xY wr   )r   r9   ArrowNotImplementedErrorrS   r   r6   )rm   csv_pathr+  s      r   r   z"BaseTestCompressedCSVRead.read_csvT  s;    	 H%%** 	 KKA	 s   
 AAAc                    t        dd      \  }}t        j                  j                  | j                  | j
                        }| j                  ||       | j                  |      }|j                  d       |j                  |j                  k(  sJ |j                  |      sJ |j                         |j                         k(  sJ y )Nr   r	  r  TrC  )rG   ospathr4   r|  csv_filename
write_filer   r   r   r  r   )rm   rB   rF   r  r   s        r   test_random_csvz)BaseTestCompressedCSVRead.test_random_csvZ  s    'SAX77<<T->->?#&h'D!||x...||H%%% H$6$6$8888rL   N)rz   r{   r|   r}  r  r   r  rO   rL   r   rw  rw  L  s    A# 9rL   rw  c                       e Zd ZdZd Zd Zy)TestGZipCSVReadzcompressed.csv.gzc                 ~    t        j                  |dd      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nwbr   )gzipopenr3   rm   r  contentsr  s       r   r  zTestGZipCSVRead.write_fileh  s,    YYtT1%GGH &%%s   3<c                    t         j                  j                  | j                  | j                        }t        j                  |dd      5 }|j                  d       d d d        t        j                  |dd      5 }|j                  d       d d d        | j                  |      }|j                         g dg ddk(  sJ y # 1 sw Y   hxY w# 1 sw Y   CxY w)	Nr  r   s   ab,cd
ef,gh
r   s   ij,kl
mn,op
rl  rm  r  )
r  r  r4   r|  r  r  r  r3   r   r   )rm   r  r  r   s       r   test_concatenatedz!TestGZipCSVRead.test_concatenatedl  s    77<<T->->?YYxq)QGG%& *YYxq)QGG%& *h' $$%
 
 	
 
 *)))s   C=CCCN)rz   r{   r|   r  r  r  rO   rL   r   r  r  e  s    &L
rL   r  c                       e Zd ZdZd Zy)TestBZ2CSVReadzcompressed.csv.bz2c                 |    t        j                  |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nr   )bz2BZ2Filer3   r  s       r   r  zTestBZ2CSVRead.write_file}  s*    [[s#qGGH $##s   2;N)rz   r{   r|   r  r  rO   rL   r   r  r  z  s    'LrL   r  c                  `    t        j                  d      } t        |        | j                  rJ y Nr  )r.   rK  r   closed)bufs    r   0test_read_csv_does_not_close_passed_file_handlesr    s&    
**+
,CSMzz>zrL   c            	         t         j                  j                  g dg dgddg      } | j                  d      d   }| |fD ]  }t	        j
                         }t        ||t        d	             |j                  d       | t        |      k(  sJ t	        j
                         }t        ||t        d
	             |j                  d       t        | j                        }| t        ||      k(  rJ  d d t        d	      ft        | j                        d t        d
	      fd t        d      t        dd      ft        | j                        t        d      t        d
d      ffD ]  \  }}}t	        j
                         }t        || j                  |      5 }|j                  |        d d d        |j                  d       | t        |||      k(  sJ t	        j
                         }t        || j                  |      5 }| j                  d      D ]  }|j!                  |        	 d d d        |j                  d       | t        |||      k(  rJ  y # 1 sw Y   xY w# 1 sw Y   <xY w)Nr  r5  c1c2r   )max_chunksizer   T)r   Fr  r   r   r  )r   r   r   write_optionsr  rN   )r9   r<   r=   r^  r.   rK  r   r   seekr   r   rJ   r	   r   r   write_tablewrite_batch)	r  record_batchrL  r  r   r  r  writerr9  s	            r   test_write_read_round_tripr    s*   
i9D$<HA<<a<03LL!jjl$\>?HSM!!! jjl$\?@"?HS|<<<< "" 
t\67	!..	14	U	+	-	|c*	TS	9	;	!..	1		%	Ud	;	=	72m] jjlsAHHMBfq! CHS|+8: : 	: :jjlsAHHMBfA6""5) 7 C 	HS|+8: : 	: :+	7 CB CBs   "I%)I1%I.	1I:	c                     t         j                  j                  g dg dgddg      } t        j                         }t        d      dft               dft        d	      d
ffD ]]  \  }}t        || j                  |      5 }|j                  |        d d d        |j                         |k(  sJ |j                  d       _ t         j                  j                  ddggdg      } t        j                         }t        d      dft        d      t         j                  j                  ffD ]_  \  }}t        || j                  |      5 }	 |j                  |        	 d d d        |j                         |k(  sJ |j                  d       a y # 1 sw Y   xY w# t        $ r!}t        ||      sJ Y d }~d d d         y d }~ww xY w# 1 sw Y   lxY w)N)rN   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"
","
""""
)r9   r<   r=   r.   rK  r   r   r   r  r7   r  libr   	Exceptionrt   )r  r  r  resr  r+  s         r   test_write_quoting_styler    s   
l,<=d|LA
**,C	F	+-HI	89	K	0	,	.s sAHHMBfq! C||~$$$ 	sDk]TF3A
**,C	H	-/CD	F	+RVV-@-@As sAHHMBf""1% C ||~$$$ CB   "!S))) CB CBs<   FGF F	 	G
)G7GG

GG	c                  ~    d } t        j                         5   |        } |       J 	 d d d        y # 1 sw Y   y xY w)Nc                  l    t        j                  d      } t        |       }t        j                  |      S r  )r.   rK  r   weakrefref)r  r   s     r   innerz,test_read_csv_reference_cycle.<locals>.inner  s)    jj/0{{5!!rL   )r   disabled_gc)r  wrs     r   test_read_csv_reference_cycler    s4    "
 
			Wt|| 
		s   3<type_factoryc                  .    t        j                  dd      S N   rN   r9   r  rO   rL   r   r!  r!        BMM"a rL   c                  .    t        j                  dd      S )N&   r6  r  rO   rL   r   r!  r!        BMM"b!rL   c                  .    t        j                  dd      S r  r9   
decimal256rO   rL   r   r!  r!    r  rL   c                  .    t        j                  dd      S )NL   r   r  rO   rL   r   r!  r!    r  rL   c                 *    |       }t        j                  dt        j                  ddg      j                  |      i      }t	        || dz         t        | dz        }|j                  d      j                  |      |j                  d      k(  sJ y )NcolrN   r   zout.csv)r9   r   r:   castr   r   column)r|  r  r*   r   outs        r   test_write_csv_decimalr    s     >DHHeRXXq!f-22489:EeVi'(
6I%
&C::e!!$'5<<+>>>>rL   c                      d}  G d dt         j                        }t        d      D ]?  }t        j                  t
        j                        5  t         ||              d d d        A y # 1 sw Y   LxY w)Ns   a,b,cc                   (     e Zd Z fdZ fdZ xZS )-test_read_csv_gil_deadlock.<locals>.MyBytesIOc                 F    t        j                  d       t        |   | S NgMbP?)r  r  rj  readrm   r  rl  s     r   r  z2test_read_csv_gil_deadlock.<locals>.MyBytesIO.read  s    JJu7<&&rL   c                 F    t        j                  d       t        |   | S r  )r  r  rj  readintor  s     r   r  z6test_read_csv_gil_deadlock.<locals>.MyBytesIO.readinto  s    JJu7#T**rL   )rz   r{   r|   r  r  rn  ro  s   @r   	MyBytesIOr    s    	'	+ 	+rL   r  r  )r.   rK  r   rS   rT   r9   r   r   )rL  r  r"   s      r   test_read_csv_gil_deadlockr    sT    
 D+BJJ + 2Y]]2??+Yt_% ,+ ++s   A**A3	)r   r   z
T)Fr   r  r   r   decimalr   rc  r  r.   r1   r  r+   r  r  r  r   rz  r
  r  unittestr  rS   pyarrowr9   pyarrow.csvr   r   r   r	   r
   r   r   r   r   r   pyarrow.testsr   r   r#   r%   rG   rK   r_   rg   ri   r   r   r   r   r   ABCr   r@  r$  r+  r0  rq  r=  rt  rw  TestCaser  r  r  r  r  r  parametrizer  r  rO   rL   r   <module>r     s  $  
 #  	  	  	            4 4 4 !"$#,00- -$&4n9xN;b0XK#'' XKv
T{ Tn- / @,; @,F
!5  #7  9 92
/1B1B 
*.0A0A ):XB	  ! !	* ??&rL   