
    j[                        d dl Z d dl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mZmZmZmZ d ZddZd Zd Zd	 Z G d
 de j4                        Z G d de      Z G d de      Z G d dee	j<                        Z G d dee	j<                        Z  G d dee	j<                        Z!ejD                  jF                   G d dee	j<                               Z$y# e$ r dZY w xY w)    N)OrderedDict)Decimal)	read_json	open_jsonReadOptionsParseOptionsc               #   n   K   t         j                  } | E d {    | D ]  }| D ]	  }||z      y 7 wN)stringascii_lowercase)lettersfirstseconds      >/tmp/pip-target-jj7clzyk/lib/python/pyarrow/tests/test_json.pygenerate_col_namesr   %   sG     $$G ! 	!F&. 	!! s   535c                    t         j                  j                  d      j                  dd| |f      }t	        t        j                  t               |             }g }|j                  D ]Y  }t        t        ||      D cg c]  \  }}|t        |      f c}}      }	|j                  t        j                  |	             [ |j                  |      j!                         }
|D cg c]+  }t#        j$                  |t#        j&                               - }}t"        j(                  j+                  ||      }|
|fS c c}}w c c}w )N*   r     )size)type)nprandomRandomStaterandintlist	itertoolsislicer   Tr   zipintappendjsondumpsjoinencodepaarrayint64Tablefrom_arrays)num_colsnum_rowslineseparr	col_nameslinesrowkvjson_objdatacolcolumnsexpecteds                 r   make_random_jsonr9   .   s   
))


#
+
+At8X:N
+
OCY%%&8&:HEFIEuu +#i:MNACFNOTZZ)*+ <<%%'D9<=#rxx"((*-=G=xx##GY7H>  O >s    D>(0Ec                      | di |}|j                  |j                  ||j                              }|j                         D ]  \  }}t	        ||      |k(  rJ  y )N)protocol )loadsr#   HIGHEST_PROTOCOLitemsgetattr)clspicklerattr_valuesoptsnew_optsnamevalues          r   check_options_class_picklingrH   ;   sk    D}}W]]44;4L4L + N OH"((* 0ex&%///0    c                    t         } |       }|j                  dkD  sJ d|_        |j                  dk(  sJ |j                  du sJ d|_        |j                  du sJ  |dd      }|j                  dk(  sJ |j                  du sJ d}t        |      d| d	k(  sJ t	        |      d
| d	k(  sJ t        || dd       y )Nr   i90  TFi  )
block_sizeuse_threadsz+
    use_threads=False,
    block_size=1234z<pyarrow.json.ReadOptions>()zReadOptions()rB   rK   rL   )r   rK   rL   reprstrrH   )pickle_modulerA   rD   expected_repr_inners       r   test_read_optionsrR   C   s    
C5D??QDO??e###t###Du$$$$E2D??d"""u$$$ :67J6K1MMMMt9,':&;1==== m,0-24rI   c                 n   t         } |       }|j                  du sJ |j                  J d|_        |j                  du sJ d}t        |      d| dk(  sJ t	        |      d| dk(  sJ t        j                  t        j                  dt        j                               g      }||_        |j                  |k(  sJ |j                  dk(  sJ d	D ]  }||_	        |j                  |k(  rJ  t        j                  t              5  d
|_	        d d d        t        || |dd       y # 1 sw Y   xY w)NFTz]
    explicit_schema=None,
    newlines_in_values=True,
    unexpected_field_behavior='infer'z<pyarrow.json.ParseOptions>(rM   zParseOptions(fooinfer)ignoreerrorrU   zinvalid-valuerV   )rB   explicit_schemanewlines_in_valuesunexpected_field_behavior)r   rY   rX   rN   rO   r&   schemafieldint32rZ   pytestraises
ValueErrorrH   )rP   rA   rD   rQ   r[   rG   s         r   test_parse_optionsra   _   sU   
C5D""e+++'''"D""d***)
 :78K7LANNNNt9-(;'<A>>>>YY
345F!D6)))))W444- 7).&--6667 
z	" 9)8&9 !m1749;CE9 9s   
D++D4c                      e Zd Zej                  d        Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zej"                  j$                  d        Zej"                  j$                  d        Zej"                  j$                  d        Zy)BaseTestJSONc                     t         )z
        :param b: bytes to be parsed
        :param kwargs: arguments passed on to open the json file
        :return: b parsed as a single Table
        )NotImplementedErrorselfbkwargss      r   
read_byteszBaseTestJSON.read_bytes   s
     "!rI   c                     |j                   t        |      k(  sJ |j                  D cg c]  }|j                   c}|k(  sJ y c c}w r
   )num_columnslenr7   rF   )rg   tablenamescs       r   check_nameszBaseTestJSON.check_names   s>      CJ... %.1.%777.s   Ac                    d}t               }t               }||dz   fD ]  }dD ]  }||_        d|_        t	        j
                  t        d      5  | j                  |||       d d d        t        dd	      D ]6  }||_        | j                  |||      }|j                         d
g dik(  r6J    y # 1 sw Y   SxY w)Ns   {"a": 1}
{"a": 2}
{"a": 3}   
FT   ztry to increase block sizematchread_optionsparse_options	      a)         )
r   r   rY   rK   r^   r_   r`   rj   range	to_pydict)rg   rowsry   rz   r5   rY   rK   rn   s           r   test_block_sizeszBaseTestJSON.test_block_sizes   s    ."}$4%<( 	AD&3 A"3E0*+']]:)EG AOOD|2? $ AA #(2, AJ.8L+ OOD|:G , IE ??,i0@@@@	AA	AA As   B66B?c                 h    d}| j                  |      }|j                         ddgddgddgdk(  sJ y )	Ns/   {"a": 1,"b": 2, "c": 3}
{"a": 4,"b": 5, "c": 6}r~   ru   r      r      r}   rh   rp   )rj   r   )rg   r   rn   s      r   test_no_newline_at_endz#BaseTestJSON.test_no_newline_at_end   sH    B% QQQ%
 
 	
 
rI   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 )Ns0   {"a": 1,"b": 2, "c": 3}
{"a": 4,"b": 5, "c": 6}
r}   rh   rp   r~   ru   r   r   r   r   r   )rj   r&   r[   r(   r   rg   r   rn   r[   s       r   test_simple_intszBaseTestJSON.test_simple_ints   s    D%S"((*- "((*- "((*-/ 0 ||v%%% QQQ%
 
 	
 
rI   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 )NsQ   {"a": 1,"b": 2, "c": "3", "d": false}
{"a": 4.0, "b": -5, "c": "foo", "d": true}
r}   rh   rp   d      ?      @r   3rT   FTr}   rh   rp   r   )rj   r&   r[   float64r(   r   bool_r   r   s       r   test_simple_variedzBaseTestJSON.test_simple_varied   s    @%S"**,/ "((*- "))+. "((*-/ 0 ||v%%% sRu	%
 
 	
 
rI   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g      }|j                  |k(  sJ |j                         g dg dg d	g d
g ddk(  sJ y )Ns   {"a": 1, "b": 2, "c": null, "d": null, "e": null}
{"a": null, "b": -5, "c": "foo", "d": null, "e": true}
{"a": 4.5, "b": null, "c": "nan", "d": null,"e": false}
r}   rh   rp   r   e)r   Ng      @)r   r   N)NrT   nan)NNN)NTF)r}   rh   rp   r   r   )	rj   r&   r[   r   r(   r   nullr   r   r   s       r   test_simple_nullszBaseTestJSON.test_simple_nulls   s    M %S"**,/ "((*- "))+. "''), "((*-	/ 0
 ||v%%% !%#$%
 
 	
 
rI   c                     d}| j                  |      }t        j                  dt        j                  t        j                               fg      }|j                  |k(  sJ |j                         dg gik(  sJ y )N	   {"a": []}r}   )rj   r&   r[   list_r   r   r   s       r   test_empty_listszBaseTestJSON.test_empty_lists   sg    %S"((2779"5678||v%%% S2$K///rI   c                     d}| j                  |      }t        j                  g       }|j                  |k(  sJ |j                  dk(  sJ |j                  dk(  sJ y )Ns   {}
{}
r   r   )rj   r&   r[   rl   r,   r   s       r   test_empty_rowszBaseTestJSON.test_empty_rows   sZ    %2||v%%%  A%%%~~"""rI   c                    d}dt        d      t        d      t        d      d gi}t        j                  t        j                  t        j                  t        j
                  f}|D ]f  }t        j                  d |dd      fg      }t        |      }| j                  ||	      }|j                  |k(  sJ |j                         |k(  rfJ  y )
Ns'   {"a": 1}
{"a": 1.45}
{"a": -23.456}
{}
r}   1z1.45z-23.456r{   ru   rX   rz   )
r   r&   	decimal32	decimal64
decimal128
decimal256r[   r   rj   r   )rg   r   r8   decimal_typestype_factoryr[   rD   rn   s           r   test_explicit_schema_decimalz)BaseTestJSON.test_explicit_schema_decimal   s    
 '#,1CTJ
 r||R]]BMMR) 	1LYYl1a&8 9:;F7DOODO=E<<6)))??$000	1rI   c                    d}t        j                  dt        j                         fg      }t        |      }| j	                  ||      }|j                  t        j                  dt        j                         fdt        j
                         fg      k(  sJ |j                         ddgdd	gd
k(  sJ t        |d      }| j	                  ||      }|j                  t        j                  dt        j                         fg      k(  sJ |j                         dddgik(  sJ t        |d      }t        j                  t         j                  d      5  | j	                  ||       d d d        y # 1 sw Y   y xY w)Ns2   {"foo": "bar", "num": 0}
{"foo": "baz", "num": 1}
rT   r   r   nums   bars   bazr   r~   )rT   r   rV   )rX   rZ   rW   "JSON parse error: unexpected fieldrv   )
r&   r[   binaryr   rj   r(   r   r^   r_   ArrowInvalid)rg   r   r[   rD   rn   s        r   .test_explicit_schema_with_unexpected_behaviourz;BaseTestJSON.test_explicit_schema_with_unexpected_behaviour  s   .BIIK 
  F3D9||ryyBIIK BHHJ*
    	   F#q6%
 
 	
 
 F6>@D9||ryyBIIK *
    	   FF#%
 
 	
 

 F6=?]]2??!EG 	6OODO5	6 	6 	6s   E77F c                     t        dd      \  }}| j                  |      }|j                  |j                  k(  sJ |j                  |      sJ |j	                         |j	                         k(  sJ y )Nr   
   r+   r,   )r9   rj   r[   equalsr   )rg   r5   r8   rn   s       r   test_small_random_jsonz#BaseTestJSON.test_small_random_json(  sf    )1rBh%||x...||H%%% H$6$6$8888rI   c                     t        dd      \  }}t        d      }| j                  ||      }|j                  dk(  sJ |j                  dk(  sJ y )Nr   i r   i   rK   ry   )r9   r   rj   r,   )rg   r5   r8   ry   rn   s        r   test_load_large_jsonz!BaseTestJSON.test_load_large_json0  sT    )1vFh"l;<@~~'''  F***rI   c                 |   t        dd      \  }}t               }t               }||j                  d      fD ]  }dD ]{  }||_        dD ]m  }||_        | j                  |||      }|j                  |j                  k(  sJ |j                  |      rK|j                         |j                         k(  rmJ  }  y )Nr   d   r   s   
rt   )      %   rx   )
r9   r   r   rstriprY   rK   rj   r[   r   r   )	rg   	data_baser8   ry   rz   r5   rY   rK   rn   s	            r   test_stress_block_sizesz$BaseTestJSON.test_stress_block_sizes9  s     /CH	8"}$	 0 0 9: 
	ID&3 	I"3E0". IJ.8L+ OOD|:G , IE <<8??::: <<1$0H4F4F4HHHHI	I
	IrI   N)__name__
__module____qualname__abcabstractmethodrj   rq   r   r   r   r   r   r   r   r   r   r^   marknumpyr   r   r   r<   rI   r   rc   rc      s    " "8A,


"
(0#1"#6J [[9 9 [[+ + [[I IrI   rc   c                       e Zd Zd Zd Zd Zy)BaseTestJSONReadc                 N     | j                   t        j                  |      fi |S r
   )r   r&   	py_bufferrf   s      r   rj   zBaseTestJSONRead.read_bytesO       t~~bll1o888rI   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)N   {"a": 1, "b": 2}
r~   r   r}   rh   )	ioBytesIOr   r   StringIOdecoder^   r_   	TypeError)rg   r5   expected_databiorn   sios         r   test_file_objectz!BaseTestJSONRead.test_file_objectR  s    $ c,jjs# M111kk$++-(]]9% 	 NN3	  	  	 s   BB%c           
      *   d}t        t        |            }dd dgfdd g gfdd g dgggfdd i gfd	d d
d id
ddiigffD ]T  \  }}| j                  ||z   |      }d|i}|j                         |k(  sJ |j	                  d      j
                  dkD  rTJ  y )Ns"   {                               }
r   s   {"a": 0}r   r   s   {"a": []}
{"a": [[1]]}r~   s	   {"a": {}}s    {"a": {}}
{"a": {"b": {"c": 1}}}rh   rp   r   r}   )r   rm   rj   r   column
num_chunks)rg   	first_rowry   	next_rowsexpected_pylistrn   r8   s          r   test_reconcile_across_blocksz-BaseTestJSONRead.test_reconcile_across_blocks]  s    :	"c)n=4)$D":&'$aSE):;D":&1S$K#Qx13+
 	4&I OOI	$91= $ ?E_-H??$000<<$//!333	4rI   N)r   r   r   rj   r   r   r<   rI   r   r   r   M  s    9	 4rI   r   c                   f    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y)BaseTestStreamingJSONReadc                 v    |j                  dt                     }| j                  |_        t        |g|i |S )z
        Reads the JSON file into memory using pyarrow's open_json
        json The JSON bytes
        args Positional arguments to be forwarded to pyarrow's open_json
        kwargs Keyword arguments to be forwarded to pyarrow's open_json
        ry   )
setdefaultr   rL   r   )rg   r"   argsri   ry   s        r   r   z#BaseTestStreamingJSONRead.open_jsonr  s;     ((G#'#3#3 ////rI   c                 N     | j                   t        j                  |      fi |S r
   )r   r&   r   rf   s      r   
open_bytesz$BaseTestStreamingJSONRead.open_bytes}  r   rI   c                    |j                   |k(  sJ t        |      }t        |      t        |      k(  sJ t        ||      D ]=  \  }}|j	                  d       |j                   |k(  sJ |j                         |k(  r=J  y )NTfull)r[   r   rm   r   validater   )rg   readerexpected_schemar   batchesbatchexpected_batchs          r   check_readerz&BaseTestStreamingJSONRead.check_reader  s    }}///v,7|s=1111%(-%@ 	7!E>NNN%<<?222??$666	7rI   c                 D     | j                   |fi |j                         S r
   )r   read_allrf   s      r   rj   z$BaseTestStreamingJSONRead.read_bytes  s!    tq+F+4466rI   c                    d}dgdgd}t        j                  |      }| j                  |      }t        j                  dt        j
                         fdt        j
                         fg      }| j                  |||g       y )Nr   r~   r   r   r}   rh   )r   r   r   r&   r[   r(   r   )rg   r5   r   r   r   r   s         r   r   z*BaseTestStreamingJSONRead.test_file_object  ss    $ c,jj$))c288:%6&)288:%6%8 9&/M?CrI   c                     d}t               }d|_        t        j                  t        j
                  d      5  | j                  ||       d d d        y # 1 sw Y   y xY w)Ns   {"i": 0            }
{"i": 1}r   1straddling object straddles two block boundaries*rv   r   r   rK   r^   r_   r&   r   r   )rg   bad_first_chunkry   s      r   test_bad_first_chunkz.BaseTestStreamingJSONRead.test_bad_first_chunk  sW    ;"}"#]]OOE
 	H OOO,OG		H 	H 	H   AAc                 "   d}t               }d|_        t        j                  dt        j                         fg      }| j                  ||      }|j                  |k(  sJ |j                         j                         ddgi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   y xY w)Ns   {"i": 0}
{"i":     1}
{"i": 2}r   ir   r   r   rv   r   rK   r&   r[   r(   r   read_next_batchr   r^   r_   r   StopIterationrg   bad_middle_chunkry   r   r   s        r   test_bad_middle_chunkz/BaseTestStreamingJSONRead.test_bad_middle_chunk  s    >"}"$))c288:%6$78!1M}}///%%'113!8
 
 	
 
 ]]OOE
 	% ""$		% ]]=) 	%""$	% 	%	% 	%	% 	%   -C9D9DDc                     d}t               }d|_        t        j                  t        j
                  d      5  | j                  ||       d d d        y # 1 sw Y   y xY w)Ns   {"n": }
{"n": 10000}   !JSON parse error: Invalid value.*rv   r   r   rg   bad_first_blockry   s      r   test_bad_first_parsez.BaseTestStreamingJSONRead.test_bad_first_parse  sU    2"}"$]]2??!DF 	HOOO,OG	H 	H 	Hr   c                     d}t               }d|_        t        j                  t        j
                  d      5  | j                  ||       d d d        y # 1 sw Y   y xY w)Ns"   {            }{"n": }
{"n": 10000}r  r  rv   r   r   r	  s      r   !test_bad_middle_parse_after_emptyz;BaseTestStreamingJSONRead.test_bad_middle_parse_after_empty  sU    @"}"$]]2??!DF 	HOOO,OG	H 	H 	Hr   c                 "   d}t               }d|_        t        j                  dt        j                         fg      }| j                  ||      }|j                  |k(  sJ |j                         j                         ddgi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   y xY w)Ns%   {"n": 1000}
{"n": 200 00}
{"n": 3000}r   nr   r   z@JSON parse error: Missing a comma or '}' after an object member*rv   r   r  s        r   test_bad_middle_parsez/BaseTestStreamingJSONRead.test_bad_middle_parse  s    E"}"$))c288:%6$78!1M}}///%%'113$8
 
 	
 
 ]]OO1
 	%
 ""$	% ]]=) 	%""$	% 	%	% 	%	% 	%r  c                 2   d}t        d      }t        d      }t        j                  dt        j                         fg      }| j                  |||      }|j                  |k(  sJ |j                         j                         ddgi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   y xY wNs   {"n": 0}{1}
{"n": 2}r   r   TrY   r  rx   r   JSON parse error *rv   r   r   r&   r[   r(   r   r   r   r^   r_   r   r  rg   r  ry   rz   r   r   s         r   %test_non_linewise_chunker_first_blockz?BaseTestStreamingJSONRead.test_non_linewise_chunker_first_block     3"b1$=))c288:%6$78%' ! ) }}///%%'113!8
 
 	
 
 ]]2??!57 	%""$	% ]]=) 	%""$	% 	%		% 	%	% 	%   5D'DD
Dc                 2   d}t        d      }t        d      }t        j                  dt        j                         fg      }| j                  |||      }|j                  |k(  sJ |j                         j                         ddgi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   y xY wr  r  r  s         r   )test_non_linewise_chunker_bad_first_blockzCBaseTestStreamingJSONRead.test_non_linewise_chunker_bad_first_block  r  r  c                 ~   d}t        d      }t        d      }t        j                  dt        j                         fg      }| j                  |||      }|j                  |k(  sJ |j                         j                         ddgik(  sJ |j                         j                         dd	gi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   y xY w)Ns&   {"n": 0}
{"n":    1}
{}"n":2}
{"n": 3}r   r   Tr  r  rx   r   r~   r  rv   r  r  s         r   *test_non_linewise_chunker_bad_middle_blockzDBaseTestStreamingJSONRead.test_non_linewise_chunker_bad_middle_block  s6   G"b1$=))c288:%6$78%' ! ) }}///%%'113!8
 
 	
 
 %%'113!8
 
 	
 
 ]]2??!57 	%""$	% ]]=) 	%""$	% 	%		% 	%	% 	%s   D'D3'D03D<c                    d}t        j                  dt        j                         fdt        j                         fg      }t	        d      }t        |      }dgdgd	}| j                  |||
      }| j                  |||g       y )Ns       
{"b": true, "s": "foo"}rh   s   r   r   TrT   )rh   r  rx   )r&   r[   r   utf8r   r   r   r   )rg   leading_empty_chunkrX   ry   rz   r   r   s          r    test_ignore_leading_empty_blocksz:BaseTestStreamingJSONRead.test_ignore_leading_empty_blocks  s    >))"((*"'')%
  #b1$_Eug
 %' ! ) 	&/M?CrI   c                 ~   d}t        j                  dt        j                         fdt        j                         fg      }dgdgd}t	        d      }t        d	
      }| j                  |||      }|j                  |k(  sJ |j                         j                         |k(  sJ t        j                  t         j                  d      5  |j                          d d d        t        j                  dt        j                         fdt        j                         fdt        j                         fg      }ddgdd gd dgd}t	        d      }| j                  |||      }|j                  |k(  sJ |j                         j                         |k(  sJ t        j                  t         j                  d      5  |j                          d d d        t        j                  dt        j                         fdt        j                         fdt        j                         fdt        j                         fg      }g dg dg dg dd}t	        d      }| j                  |||      }|j                  |k(  sJ |j                         j                         |k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w)NsI   {"a": 0, "b": "foo"    }
        {"a": 1, "c": true  }
{"a": 2, "d": 4.0}r}   rh   r   rT   r       r   rU   )rZ   rx   r   rv   rp   r~   Tr   @   r   )r   r~   r   )rT   NN)NTN)NNr   r   `   )r&   r[   r(   r!  r   r   r   r   r   r^   r_   r   r   r   )rg   r   r   r   ry   rz   r   s          r   test_inferencez(BaseTestStreamingJSONRead.test_inference-  s   3))"((*"'')%
   !c0"b1$wG%' ! ) }}///%%'113}DDD]]2??!EG 	%""$	% ))"((*"'')"((*%
 
  !!fE4=d|L"b1L/< ! >}}///%%'113}DDD]]2??!EG 	%""$	% ))"((*"'')"((*"**,	%
  (.A07HJ"b1L/< ! >}}///%%'113}DDD?	% 	%	% 	%s   J& J3&J03J<N)r   r   r   r   r   r   rj   r   r   r  r  r  r  r  r  r  r#  r(  r<   rI   r   r   r   q  sS    	0977DH%(HH%*%*%*%2D$0ErI   r   c                       e Zd Zd Zy)TestSerialJSONReadc                     |j                  dt                     }d|_        t        |i |}|j	                  d       |S )Nry   FTr   r   r   rL   r   r   rg   r   ri   ry   rn   s        r   r   zTestSerialJSONRead.read_jsonb  s@    ((G#( 4*6*D!rI   Nr   r   r   r   r<   rI   r   r*  r*  `      rI   r*  c                       e Zd Zd Zy)TestParallelJSONReadc                     |j                  dt                     }d|_        t        |i |}|j	                  d       |S )Nry   Tr   r,  r-  s        r   r   zTestParallelJSONRead.read_jsonl  s@    ((G#' 4*6*D!rI   Nr.  r<   rI   r   r1  r1  j  r/  rI   r1  c                       e Zd ZdZy)TestSerialStreamingJSONReadFNr   r   r   rL   r<   rI   r   r4  r4  t  s    KrI   r4  c                       e Zd ZdZy)TestThreadedStreamingJSONReadTNr5  r<   rI   r   r7  r7  y  s	     KrI   r7  )r   r   z
)%r   collectionsr   decimalr   r   r   r"   r   unittestr   r   ImportErrorr^   pyarrowr&   pyarrow.jsonr   r   r   r   r   r9   rH   rR   ra   ABCrc   r   r   TestCaser*  r1  r4  r   	threadingr7  r<   rI   r   <module>rA     s  $  #  	       H H!
048 EFHI377 HIV!4| !4HlE lE^)8+<+< +X->-> ";X=N=N 
 $=x?P?P  {  	Bs   C+ +C54C5