o
    Zh3                     @   s   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d Zdd
dZdd Zdd Zdd ZG dd dZG dd deejZG dd deejZdS )    )OrderedDict)DecimalN)	read_jsonReadOptionsParseOptionsc                  c   s4    t j} | E d H  | D ]}| D ]}|| V  qqd S N)stringascii_lowercase)lettersfirstsecond r   N/var/www/html/lang_env/lib/python3.10/site-packages/pyarrow/tests/test_json.pygenerate_col_names!   s   
r      
   
c                 C   s   t jdjdd| |fd}ttt | }g }|jD ]}t	dd t
||D }|t| q|| }dd |D }	tj|	|}
||
fS )N*   r   i  )sizec                 S   s   g | ]
\}}|t |fqS r   )int).0kvr   r   r   
<listcomp>/   s    z$make_random_json.<locals>.<listcomp>c                 S   s   g | ]}t j|t  d qS ))type)paarrayint64)r   colr   r   r   r   2   s    )nprandomZRandomStaterandintlist	itertoolsislicer   Tr   zipappendjsondumpsjoinencoder   TableZfrom_arrays)num_colsnum_rowslinesepZarrZ	col_nameslinesrowZjson_objdatacolumnsexpectedr   r   r   make_random_json*   s   
r5   c                 K   sL   | di |}| |j||jd}| D ]\}}t|||ks#J qd S )N)protocolr   )loadsr)   HIGHEST_PROTOCOLitemsgetattr)clspicklerZattr_valuesoptsZnew_optsnamevaluer   r   r   check_options_class_pickling7   s   
r@   c                 C   s   t }| }|jdksJ d|_|jdksJ |jdu sJ d|_|jdu s'J |ddd}|jdks4J |jdu s;J t|| ddd d S )Nr   i90  TFi  )
block_sizeuse_threads)r<   rA   rB   )r   rA   rB   r@   )pickle_moduler;   r=   r   r   r   test_read_options?   s   
rD   c                 C   s   t }| }|jdu sJ |jd u sJ d|_|jdu sJ ttdt g}||_|j|ks3J |jdks:J dD ]}||_|j|ksHJ q<t	t
 d|_W d    n1 s\w   Y  t|| |ddd d S )	NFTfooinfer)ignoreerrorrF   zinvalid-valuerG   )r<   explicit_schemanewlines_in_valuesunexpected_field_behavior)r   rJ   rI   r   schemafieldZint32rK   pytestraises
ValueErrorr@   )rC   r;   r=   rL   r?   r   r   r   test_parse_optionsT   s*   
rQ   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"BaseTestJSONReadc                 K   s   | j t|fi |S r   )r   r   Z	py_buffer)selfbkwargsr   r   r   
read_bytesq   s   zBaseTestJSONRead.read_bytesc                 C   s.   |j t|ks	J dd |jD |ksJ d S )Nc                 S   s   g | ]}|j qS r   )r>   )r   cr   r   r   r   v   s    z0BaseTestJSONRead.check_names.<locals>.<listcomp>)num_columnslenr3   )rS   tablenamesr   r   r   check_namest   s   zBaseTestJSONRead.check_namesc                 C   s~   d}dgdgd}t |}| |}| |ksJ t | }tt | | W d    d S 1 s8w   Y  d S )Ns   {"a": 1, "b": 2}
   r   )arT   )	ioBytesIOr   	to_pydictStringIOdecoderN   rO   	TypeError)rS   r2   Zexpected_dataZbiorZ   sior   r   r   test_file_objectx   s   

"z!BaseTestJSONRead.test_file_objectc              
   C   s   d}t  }t }||d fD ]K}dD ]F}||_d|_tjtdd | j|||d W d    n1 s4w   Y  tdd	D ]}||_| j|||d}|	 d
g diksWJ q>qqd S )Ns   {"a": 1}
{"a": 2}
{"a": 3}   
FT   ztry to increase block sizematchread_optionsparse_options	      r^   )r]   r      )
r   r   rJ   rA   rN   rO   rP   rV   rangera   )rS   rowsrm   rn   r2   rJ   rA   rZ   r   r   r   test_block_sizes   s.   z!BaseTestJSONRead.test_block_sizesc                 C   s6   d}|  |}| ddgddgddgdksJ d S )	Ns/   {"a": 1,"b": 2, "c": 3}
{"a": 4,"b": 5, "c": 6}r]   ri   r      rq      r^   rT   rW   )rV   ra   )rS   rs   rZ   r   r   r   test_no_newline_at_end   s   
z'BaseTestJSONRead.test_no_newline_at_endc                 C   sl   d}|  |}tdt fdt fdt fg}|j|ks"J | ddgddgd	d
gdks4J d S )Ns0   {"a": 1,"b": 2, "c": 3}
{"a": 4,"b": 5, "c": 6}
r^   rT   rW   r]   ri   r   ru   rq   rv   rw   )rV   r   rL   r   ra   rS   rs   rZ   rL   r   r   r   test_simple_ints   s   


z!BaseTestJSONRead.test_simple_intsc                 C   s|   d}|  |}tdt fdt fdt fdt fg}|j|ks'J | ddgdd	gd
dgddgdks<J d S )NsQ   {"a": 1,"b": 2, "c": "3", "d": false}
{"a": 4.0, "b": -5, "c": "foo", "d": true}
r^   rT   rW   d      ?g      @r   3rE   FT)r^   rT   rW   r{   )rV   r   rL   float64r   r   bool_ra   ry   r   r   r   test_simple_varied   s   



z#BaseTestJSONRead.test_simple_variedc              	   C   s   d}|  |}tdt fdt fdt fdt fdt fg}|j|ks,J | g dg dg d	g d
g ddksDJ d S )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^   rT   rW   r{   e)r|   Ng      @)r   r}   N)NrE   nan)NNN)NTF)r^   rT   rW   r{   r   )	rV   r   rL   r   r   r   nullr   ra   ry   r   r   r   test_simple_nulls   s    




z"BaseTestJSONRead.test_simple_nullsc                 C   sP   d}|  |}tdtt fg}|j|ksJ | dg giks&J d S )N	   {"a": []}r^   )rV   r   rL   list_r   ra   ry   r   r   r   test_empty_lists   s
   
z!BaseTestJSONRead.test_empty_listsc                 C   sF   d}|  |}tg }|j|ksJ |jdksJ |jdks!J d S )Ns   {}
{}
r   r   )rV   r   rL   rX   r.   ry   r   r   r   test_empty_rows   s   

z BaseTestJSONRead.test_empty_rowsc              
   C   s   d}t t|d}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 ]#\}}| j|| |d}d|i}| |ksGJ |djdksQJ q.d S )Ns"   {                               }
rA   s   {"a": 0}r   r   s   {"a": []}
{"a": [[1]]}r]   s	   {"a": {}}s    {"a": {}}
{"a": {"b": {"c": 1}}}rT   rW   rm   r^   )r   rY   rV   ra   columnZ
num_chunks)rS   	first_rowrm   Z	next_rowsZexpected_pylistrZ   r4   r   r   r   test_reconcile_across_blocks   s"   



z-BaseTestJSONRead.test_reconcile_across_blocksc                 C   s   d}dt dt dt dd gi}tjtjfD ](}td|ddfg}t|d}| j||d	}|j|ks6J | |ks>J qd S )
Ns'   {"a": 1}
{"a": 1.45}
{"a": -23.456}
{}
r^   1z1.45z-23.456ro   ri   rI   rn   )r   r   Z
decimal128Z
decimal256rL   r   rV   ra   )rS   rs   r4   Ztype_factoryrL   r=   rZ   r   r   r   test_explicit_schema_decimal   s   
z-BaseTestJSONRead.test_explicit_schema_decimalc                 C   s  d}t dt  fg}t|d}| j||d}|jt dt  fdt  fgks,J | ddgdd	gd
ks;J t|dd}| j||d}|jt dt  fgksWJ | dddgikscJ t|dd}tjt j	dd | j||d W d    d S 1 sw   Y  d S )Ns2   {"foo": "bar", "num": 0}
{"foo": "baz", "num": 1}
rE   r   r   nums   bars   bazr   r]   )rE   r   rG   )rI   rK   rH   z"JSON parse error: unexpected fieldrj   )
r   rL   binaryr   rV   r   ra   rN   rO   ZArrowInvalid)rS   rs   rL   r=   rZ   r   r   r   .test_explicit_schema_with_unexpected_behaviour  s@   





"z?BaseTestJSONRead.test_explicit_schema_with_unexpected_behaviourc                 C   sP   t ddd\}}| |}|j|jksJ ||sJ | | ks&J d S )Nr   r   r-   r.   )r5   rV   rL   equalsra   )rS   r2   r4   rZ   r   r   r   test_small_random_json,  s
   
z'BaseTestJSONRead.test_small_random_jsonc                 C   sH   t ddd\}}tdd}| j||d}|jdksJ |jdks"J d S )Nr   i r   i   r   r   )r5   r   rV   r.   )rS   r2   r4   rm   rZ   r   r   r   test_load_large_json3  s
   
z%BaseTestJSONRead.test_load_large_jsonc           	      C   s   t ddd\}}t }t }||dfD ]1}dD ],}||_dD ]$}||_| j|||d}|j|jks5J ||sD|	 |	 ksDJ q qqd S )Nr   d   r   s   
rh   )      %   rl   )
r5   r   r   rstriprJ   rA   rV   rL   r   ra   )	rS   Z	data_baser4   rm   rn   r2   rJ   rA   rZ   r   r   r   test_stress_block_sizes;  s$   
z(BaseTestJSONRead.test_stress_block_sizesN)__name__
__module____qualname__rV   r\   rf   rt   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rR   o   s"    	%rR   c                   @      e Zd Zdd ZdS )TestSerialJSONReadc                 O   s2   | dt }d|_t|i |}|jdd |S )Nrm   FTfull
setdefaultr   rB   r   validaterS   argsrU   rm   rZ   r   r   r   r   P  
   zTestSerialJSONRead.read_jsonNr   r   r   r   r   r   r   r   r   N      r   c                   @   r   )TestParallelJSONReadc                 O   s2   | dt }d|_t|i |}|jdd |S )Nrm   Tr   r   r   r   r   r   r   Z  r   zTestParallelJSONRead.read_jsonNr   r   r   r   r   r   X  r   r   )r   r   r   )collectionsr   decimalr   r_   r#   r(   r   Zunittestnumpyr   rN   Zpyarrowr   Zpyarrow.jsonr   r   r   r   r5   r@   rD   rQ   rR   ZTestCaser   r   r   r   r   r   <module>   s(   
	 `
