
    gq3                        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 d ZddZd Zd Zd	 Z G d
 d      Z G d deej2                        Z G d deej2                        Zy# e$ r dZ
Y bw xY w)    )OrderedDict)DecimalN)	read_jsonReadOptionsParseOptionsc               #   n   K   t         j                  } | E d {    | D ]  }| D ]	  }||z      y 7 wN)stringascii_lowercase)lettersfirstseconds      L/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/test_json.pygenerate_col_namesr   $   s=     $$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   i  )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_jsonr7   -   s   
))


#
+
+At8X:N
+
OCY%%&8&:HEFIEuu#i:MN:MACF:M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_picklingrF   :   sf    D}}W]]44;4L4L + N OH"((*ex&%/// +    c                 2   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 t        || dd       y )Nr   i90  TFi  )
block_sizeuse_threads)r@   rI   rJ   )r   rI   rJ   rF   )pickle_moduler?   rB   s      r   test_read_optionsrL   B   s    
C5D??QDO??e###t###Du$$$$E2D??d"""u$$$ m,0-24rG   c                    t         } |       }|j                  du sJ |j                  J d|_        |j                  du 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)	NFTfooinfer)ignoreerrorrO   zinvalid-valuerP   )r@   explicit_schemanewlines_in_valuesunexpected_field_behavior)r   rS   rR   r$   schemafieldint32rT   pytestraises
ValueErrorrF   )rK   r?   rB   rU   rE   s        r   test_parse_optionsr[   W   s   
C5D""e+++'''"D""d***YY
345F!D6)))))W444-).&--666 . 
z	")8& 
# !m1749;CE 
#	"s    DD
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ej"                  j$                  d        Zej"                  j$                  d        Zej"                  j$                  d        Zy)BaseTestJSONReadc                 N     | j                   t        j                  |      fi |S r	   )r   r$   	py_buffer)selfbkwargss      r   
read_byteszBaseTestJSONRead.read_bytest   s     t~~bll1o888rG   c                     |j                   t        |      k(  sJ |j                  D cg c]  }|j                   c}|k(  sJ y c c}w r	   )num_columnslenr5   rD   )r`   tablenamescs       r   check_nameszBaseTestJSONRead.check_namesw   sB      CJ... %.1.%777.s   A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": 1, "b": 2}
      )ara   )	ioBytesIOr   	to_pydictStringIOdecoderX   rY   	TypeError)r`   r3   expected_databiorg   sios         r   test_file_objectz!BaseTestJSONRead.test_file_object{   s~    $ c,jjs# M111kk$++-(]]9%NN3 &%%s   BB%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	      rn   )rl   rm      )
r   r   rS   rI   rX   rY   rZ   rc   rangerq   )r`   rowsr   r   r3   rS   rI   rg   s           r   test_block_sizesz!BaseTestJSONRead.test_block_sizes   s    ."}$4%<(D&3"3E0*+']]:)EGOOD|2? $ AG #(2,J.8L+ OOD|:G , IE ??,i0@@@@	 #/ '4 )G G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}rl   r|   rm      r      rn   ra   ri   )rc   rq   )r`   r   rg   s      r   test_no_newline_at_endz'BaseTestJSONRead.test_no_newline_at_end   sH    B% QQQ%
 
 	
 
rG   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}
rn   ra   ri   rl   r|   rm   r   r   r   r   )rc   r$   rU   r&   rq   r`   r   rg   rU   s       r   test_simple_intsz!BaseTestJSONRead.test_simple_ints   s    D%S"((*- "((*- "((*-/ 0 ||v%%% QQQ%
 
 	
 
rG   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}
rn   ra   ri   d      ?g      @rm   3rN   FT)rn   ra   ri   r   )rc   r$   rU   float64r&   r
   bool_rq   r   s       r   test_simple_variedz#BaseTestJSONRead.test_simple_varied   s    @%S"**,/ "((*- "))+. "((*-/ 0 ||v%%% sRu	%
 
 	
 
rG   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}
rn   ra   ri   r   e)r   Ng      @)rm   r   N)NrN   nan)NNN)NTF)rn   ra   ri   r   r   )	rc   r$   rU   r   r&   r
   nullr   rq   r   s       r   test_simple_nullsz"BaseTestJSONRead.test_simple_nulls   s    M %S"**,/ "((*- "))+. "''), "((*-	/ 0
 ||v%%% !%#$%
 
 	
 
rG   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": []}rn   )rc   r$   rU   list_r   rq   r   s       r   test_empty_listsz!BaseTestJSONRead.test_empty_lists   sg    %S"((2779"5678||v%%% S2$K///rG   c                     d}| j                  |      }t        j                  g       }|j                  |k(  sJ |j                  dk(  sJ |j                  dk(  sJ y )Ns   {}
{}
r   rm   )rc   r$   rU   re   r*   r   s       r   test_empty_rowsz BaseTestJSONRead.test_empty_rows   sZ    %2||v%%%  A%%%~~"""rG   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"   {                               }
rI   s   {"a": 0}r   r   s   {"a": []}
{"a": [[1]]}rl   s	   {"a": {}}s    {"a": {}}
{"a": {"b": {"c": 1}}}ra   ri   r   rn   )r   rf   rc   rq   column
num_chunks)r`   	first_rowr   	next_rowsexpected_pylistrg   r6   s          r   test_reconcile_across_blocksz-BaseTestJSONRead.test_reconcile_across_blocks   s    :	"c)n=4)$D":&'$aSE):;D":&1S$K#Qx13+
&I OOI	$91= $ ?E_-H??$000<<$//!333+
rG   c                 `   d}dt        d      t        d      t        d      d gi}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}
{}
rn   1z1.45z-23.456r   r|   rR   r   )r   r$   
decimal128
decimal256rU   r   rc   rq   )r`   r   r6   type_factoryrU   rB   rg   s          r   test_explicit_schema_decimalz-BaseTestJSONRead.test_explicit_schema_decimal   s    
 '#,1CTJ
  ]]BMM:LYYl1a&8 9:;F7DOODO=E<<6)))??$000 ;rG   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}
rN   r   r   nums   bars   bazr   rl   )rN   r   rP   )rR   rT   rQ   z"JSON parse error: unexpected fieldr}   )
r$   rU   binaryr   rc   r&   rq   rX   rY   ArrowInvalid)r`   r   rU   rB   rg   s        r   .test_explicit_schema_with_unexpected_behaviourz?BaseTestJSONRead.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OODO5G G Gs   E77F c                     t        dd      \  }}| j                  |      }|j                  |j                  k(  sJ |j                  |      sJ |j	                         |j	                         k(  sJ y )Nrm   
   r)   r*   )r7   rc   rU   equalsrq   )r`   r3   r6   rg   s       r   test_small_random_jsonz'BaseTestJSONRead.test_small_random_json/  sf    )1rBh%||x...||H%%% H$6$6$8888rG   c                     t        dd      \  }}t        d      }| j                  ||      }|j                  dk(  sJ |j                  dk(  sJ y )Nrm   i r   i   r   r   )r7   r   rc   r*   )r`   r3   r6   r   rg   s        r   test_load_large_jsonz%BaseTestJSONRead.test_load_large_json7  sT    )1vFh"l;<@~~'''  F***rG   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 )Nrm   d   r   s   
r{   )      %   r   )
r7   r   r   rstriprS   rI   rc   rU   r   rq   )	r`   	data_baser6   r   r   r3   rS   rI   rg   s	            r   test_stress_block_sizesz(BaseTestJSONRead.test_stress_block_sizes@  s     /CH	8"}$	 0 0 9:D&3"3E0".J.8L+ OOD|:G , IE <<8??::: <<1$0H4F4F4HHHH #/ '4 ;rG   N)__name__
__module____qualname__rc   rj   rx   r   r   r   r   r   r   r   r   r   r   rX   marknumpyr   r   r   r:   rG   r   r]   r]   r   s    98	 A,


"
(0#4&1#6J [[9 9 [[+ + [[I IrG   r]   c                       e Zd Zd Zy)TestSerialJSONReadc                     |j                  dt                     }d|_        t        |i |}|j	                  d       |S )Nr   FTfull
setdefaultr   rJ   r   validater`   argsrb   r   rg   s        r   r   zTestSerialJSONRead.read_jsonV  s@    ((G#( 4*6*D!rG   Nr   r   r   r   r:   rG   r   r   r   T      rG   r   c                       e Zd Zd Zy)TestParallelJSONReadc                     |j                  dt                     }d|_        t        |i |}|j	                  d       |S )Nr   Tr   r   r   s        r   r   zTestParallelJSONRead.read_json`  s@    ((G#' 4*6*D!rG   Nr   r:   rG   r   r   r   ^  r   rG   r   )rm   r   z
)collectionsr   decimalr   ro   r   r    r
   unittestr   r   ImportErrorrX   pyarrowr$   pyarrow.jsonr   r   r   r   r7   rF   rL   r[   r]   TestCaser   r   r:   rG   r   <module>r      s   $ $  	       = =!
04*E6_I _ID)8+<+< +X->-> E
  	Bs   A? ?B	B	