
    o[weH                     \   d dl m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	mZmZ d dlmZ d dlmZ ej        d             Zd Zd	 Zd
 Zd Zd Zd Zej                            dddg          d             Zd Zd Zd Zd Z ej                            dddg          d             Z!ej                            dg d          d             Z"ej                            dg d          d             Z#d Z$ej                            dddg          d             Z%ej                            dd d!g          d"             Z&d# Z'd$ Z(d% Z)ej                            d&g d'          d(             Z*d) Z+ej                            d*d+d,g          d-             Z,d. Z-d/ Z.d0 Z/d1 Z0dS )2    )Iterator)StringIO)PathN)	DataFrame	read_json)
JsonReaderc                  \    t          g dg dd          } |                     dd          S )N                  ABTrecordslinesorient)r   to_json)dfs    Clib/python3.11/site-packages/pandas/tests/io/json/test_readlines.pylines_json_dfr      s5    	33	4	4B::D:333    c                      t          t          d          d          } t          ddgddggddg          }t          j        | |           d S )	Nz!{"a": 1, "b": 2}
{"b":2, "a" :1}
Tr   r   r   abcolumns)r   r   r   tmassert_frame_equal)resultexpecteds     r   test_read_jsonlr(      sY    x EFFdSSSF1a&1a&)C:>>>H&(+++++r   c                     t           | dddd          d|          }t          g dg dd	          }t          j        ||           d S )
Niojsondataline_delimited.jsonTr   engine)r   r   r   )r   r   r   r    r!   )r   r   r$   r%   )datapathr/   r&   r'   s       r   test_read_jsonl_engine_pyarrowr2      sh    vv'<==  F
 yyyyyy99::H&(+++++r   c                    |dk    r@d}| j                             t          j                            |t
                               t          ddgddgdfgg d	
          }|                    dd          }|dk    rt          t          |          |          }nt          t          |          |          }t          g dg dgg d	
          }t          j        ||           d S )NpyarrowzEPyarrow only supports a file path as an input and line delimited jsonreasonraisesr   r   
2020-03-052020-04-08T09:58:49+00:00hector)accountsdatenamer"   Tr   r   r/   )r   r8   r:   )r   r9   r:   )node
add_markerpytestmarkxfail
ValueErrorr   r   r   r   r$   r%   )requestr/   r6   r   	json_liner&   r'   s          r   test_read_datetimerG   )   s   X 1 1
 1 S STTT	a&<!<=x	HI,,,
 
 
B 

i
88I8I..v>>>8I..v>>>	$	$	$&P&P&PQ,,,  H &(+++++r   c                  B   d} t          |           } t          | d          }t          ddgddggddg	          }t          j        ||           d} t          t          |           d          }t          ddgddggddg	          }t          j        ||           d S )
Nu5   {"a": "foo”", "b": "bar"}
{"a": "foo", "b": "bar"}
Tr   u   foo”barfoor    r!   r"   )r   r   r   r$   r%   )r+   r&   r'   s      r   test_read_jsonl_unicode_charsrK   A   s    
 EDD>>Dt4(((F;.?#sTTTH&(+++ EDx~~T222F;.?#sTTTH&(+++++r   c                  &   t          ddgddggddg          } |                     dd          }d	}||k    sJ t          d
dgddggddg          } |                     dd          }d}||k    sJ t          j        t	          t          |          d          |            t          ddgddggddg          } |                     dd          }d}||k    sJ t          j        t	          t          |          d          |            d S )Nr   r   r    r!   r"   r   Tr   r   z{"a":1,"b":2}
{"a":1,"b":2}
zfoo}rI   zfoo"z/{"a":"foo}","b":"bar"}
{"a":"foo\"","b":"bar"}
r   zfoo\za\z4{"a\\":"foo\\","b":"bar"}
{"a\\":"foo\"","b":"bar"}
)r   r   r$   r%   r   r   )r   r&   r'   s      r   test_to_jsonlrN   S   sE   	QFQF#c3Z	8	8	8BZZyZ55F/HX	VUOfe_5Sz	J	J	JBZZyZ55FCHX)HV$4$4DAAA2FFF 
We$vuo6	M	M	MBZZyZ55FNHX)HV$4$4DAAA2FFFFFr   c                      t          ddgddggddg          } |                     dd                              d	          }d}||k    sJ d S )
Nr   r   r    r!   r"   r   TrM   
)r   r   count)r   actual_new_lines_countexpected_new_lines_counts      r   test_to_jsonl_count_new_linesrT   h   sg    	QFQF#c3Z	8	8	8BZZyZEEKKDQQ !%=======r   	chunksizer   g      ?c                    |dk    r@d}| j                             t          j                            |t
                               t          t          |          d          }t          t          |          d||          5 }t          j	        |          }d d d            n# 1 swxY w Y   t          j        ||           d S )Nr4   mPyarrow only supports a file path as an input and line delimited jsonand doesn't support chunksize parameter.r5   Tr   r   rU   r/   )r?   r@   rA   rB   rC   rD   r   r   pdconcatr$   r%   )rE   r   rU   r/   r6   	unchunkedreaderchunkeds           r   test_readjson_chunksr^   p   s    7 	 	 1 1
 1 S STTT(=11>>>I	ty
 
 
 $	)F##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
 '9-----s   B&&B*-B*c                     d}t          j        t          |          5  t          t	          |           dd|          5 }	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz*chunksize can only be passed if lines=TruematchFr   rX   rA   r7   rD   r   r   )r   r/   msg_s       r   &test_readjson_chunksize_requires_linesre      s    
6C	z	-	-	-  ]##5Af
 
 
 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 4   !A%AA%A	A%A	A%%A),A)c                    |dk    r:d}| j                             t          j                            |                     t          j        ddd          }t          |                    dd	                    }t          |dd
|          }t          |                    dd	                    }t          |dd
d|          5 }t          j
        |          }d d d            n# 1 swxY w Y   t          j        ||           d S )Nr4   rW   )r6   r   r   r   Tr   r   Series)r   typr/   )r   ri   rU   r/   )r?   r@   rA   rB   rC   rY   rh   r   r   r   rZ   r$   assert_series_equal)rE   r/   r6   sstrior[   r\   r]   s           r   test_readjson_chunks_seriesrm      sH   7 	 	 1 1 1 @ @AAA 		""##AQYYT)Y<<==E%t&IIIIQYYT)Y<<==E	Tx1V
 
 
 $	)F##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $
 7I.....s   C((C,/C,c                 l   |dk    r@d}| j                             t          j                            |t
                               t          t          |          dd|          5 }t          |          }d d d            n# 1 swxY w Y   |d         j	        dk    sJ |d	         j	        d
k    sJ d S )Nr4   rW   r5   Tr   rX   r   r   r   r   )r   r   )
r?   r@   rA   rB   rC   rD   r   r   listshape)rE   r   r/   r6   r\   chunkss         r   test_readjson_each_chunkrs      s    7 	 	 1 1
 1 S STTT 
tq
 
 
 	f               !9?f$$$$!9?f$$$$$$s   'BB
Bc                    |dk    r@d}| j                             t          j                            |t
                               t          j        d          5 }t          g dg dd          }|	                    |dd	
           t          |dd|          5 }t          j        |          }d d d            n# 1 swxY w Y   t          |d|          }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr4   rW   r5   	test.jsonr
   r   r   Tr   r   r   rX   r.   )r?   r@   rA   rB   rC   rD   r$   ensure_cleanr   r   r   rY   rZ   r%   )rE   r/   r6   pathr   r\   r]   r[   s           r   test_readjson_chunks_from_filerx      s   7 	 	 1 1
 1 S STTT		%	% 2YYYYYY7788


4tI
666t41VDDD 	(i''G	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(d$v>>>	
i1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s7   AC=B>2C=>C	C=C	*C==DDc                    t          j        d          5 }t          g dg dd          }|                    |dd           t	          |d dddddd	d d d| d d 
          }|5  |                                 d d d            n# 1 swxY w Y   |j        j        j        sJ d|              	 d d d            d S # 1 swxY w Y   d S )Nru   r
   r   r   Tr   r   frameF)r   ri   dtypeconvert_axesconvert_dateskeep_default_datesprecise_float	date_unitencodingr   rU   compressionnrowsz%didn't close stream with chunksize = )	r$   rv   r   r   r   readhandleshandleclosed)rU   rw   r   r\   s       r   test_readjson_chunks_closesr      s   		%	% ?YYYYYY7788


4tI
666#
 
 
   	 	KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 N!(	? 	?>9>>	? 	? 	? 	?+? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s6   AB;#B8B;B	B;B	!B;;B?B?)r   g@rJ   c                     d}t          j        t          |          5  t          t	          |           d||          5 }	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz"'chunksize' must be an integer >=1r`   TrX   rb   )r   rU   r/   rc   rd   s        r   test_readjson_invalid_chunksizer      s    
/C	z	-	-	-  ]##49V
 
 
 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 rf   )Nr   r   c                    d}t          g dg dd          }t          t          |          d|           }| .|5  t          j        |          }d d d            n# 1 swxY w Y   t          j        ||d|             d S )	NzF

    {"A":1,"B":4}



    {"A":2,"B":5}







    {"A":3,"B":6}
    r
   r   r   Tr   rU   zchunksize: )obj)r   r   r   rY   rZ   r$   r%   )rU   jorigtests       r   )test_readjson_chunks_multiple_empty_linesr      s    	A  9999995566DXa[[	BBBD 	# 	#9T??D	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#$*C	*C*CDDDDDDs   AA!$A!c                    |dk    r@d}| j                             t          j                            |t
                               t          j        d          5 }|                    dd            t          |dd	          5 }|
                    d
           d d d            n# 1 swxY w Y   t          ||          }t          ddgi          }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr4   rW   r5   ru   zlocale.getpreferredencodingc                     dS )Ncp949 )do_setlocales    r   <lambda>z'test_readjson_unicode.<locals>.<lambda>  s    PW r   wzutf-8)r   u6   {"£©µÀÆÖÞßéöÿ":["АБВГДабвгд가"]}r>   u   £©µÀÆÖÞßéöÿu   АБВГДабвгд가)r?   r@   rA   rB   rC   rD   r$   rv   setattropenwriter   r   r%   )rE   monkeypatchr/   r6   rw   fr&   r'   s           r   test_readjson_unicoder     s   7 	 	 1 1
 1 S STTT		%	% 09;W;WXXX$g... 	N!GGLMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 4///69R8STUU
fh///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s6   *C7B'C7'B+	+C7.B+	/;C77C;>C;r   r   c                     d}t          t          |          d|           }t          g dg dd          j        d |          }t	          j        ||           d S )N[{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}T)r   r   r   r   r      r   r   r      r0   )r   r   r   ilocr$   r%   )r   r/   jsonlr&   r'   s        r   test_readjson_nrowsr   !  sg    E xd%@@@F|||,,,??@@EfufMH&(+++++r   znrows,chunksizero   )r   r   c                 .   |dk    r@d}| j                             t          j                            |t
                               d}|dk    rNt          t          |          d|||          5 }t          j	        |          }d d d            n# 1 swxY w Y   n@t          |d|||          5 }t          j	        |          }d d d            n# 1 swxY w Y   t          g dg dd	          j        d |         }t          j        ||           d S )
Nr4   rW   r5   r   T)r   r   rU   r/   r   r   r0   )r?   r@   rA   rB   rC   rD   r   r   rY   rZ   r   r   r$   r%   )	rE   r   rU   r/   r6   r   r\   r]   r'   s	            r   test_readjson_nrows_chunksr   .  s    7 	 	 1 1
 1 S STTTE
 UOO4u	RX
 
 
 	(i''G	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 Ui
 
 
 	(i''G	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( |||,,,??@@EfufMH'8,,,,,s$   0BBB1CCCc                     d}d}t          j        t          |          5  t          |dd|            d d d            d S # 1 swxY w Y   d S )Nr   z&nrows can only be passed if lines=Truer`   Fr   )r   r   r/   )rA   r7   rD   r   )r/   r   rc   s      r   "test_readjson_nrows_requires_linesr   M  s    E 3C	z	-	-	- > >%uAf====> > > > > > > > > > > > > > > > > >s   AAAc                 8   |dk    r@d}| j                             t          j                            |t
                               t          ddggddgdg	          t          d
dggddgdg	          t          ddggddgdg	          g} |dddd          }t          |                                          }t          |dd|          5 }t          |          D ] \  }}	t          j        |	||                    !	 d d d            d S # 1 swxY w Y   d S )Nr4   rW   r5   r   r   r    r!   r   )r#   indexr   r   r   r   r*   r+   r,   r-   TrX   )r?   r@   rA   rB   rC   rD   r   r   as_urir   	enumerater$   r%   )
rE   r1   r/   r6   df_list_expectedos_pathfile_url
url_readerr   chucks
             r   "test_readjson_lines_chunks_fileurlr   Y  s    7 	 	 1 1
 1 S STTT 	Aq6(S#Jqc:::Aq6(S#Jqc:::Aq6(S#Jqc:::
 htVV-BCCGG}}##%%H	841V	D	D	D B
%j11 	B 	BLE5!%)9%)@AAAA	BB B B B B B B B B B B B B B B B B Bs   1DDDc            	          ddz  }  G d d          } ||           }t          t          t          |dd                              dk    sJ |j        d	k    sJ d S )
Nz\{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}
i  c                   (    e Zd ZddZd ZdefdZdS )/test_chunksize_is_incremental.<locals>.MyReaderreturnNc                 <    d| _         t          |          | _        d S )Nr   )
read_countr   stringio)selfcontentss     r   __init__z8test_chunksize_is_incremental.<locals>.MyReader.__init__{  s    DO$X..DMMMr   c                 @    | xj         dz  c_          | j        j        | S Nr   )r   r   r   )r   argss     r   r   z4test_chunksize_is_incremental.<locals>.MyReader.read  s$    OOq OO%4=%t,,r   c                 J    | xj         dz  c_         t          | j                  S r   )r   iterr   )r   s    r   __iter__z8test_chunksize_is_incremental.<locals>.MyReader.__iter__  s"    OOq OO&&&r   )r   N)__name__
__module____qualname__r   r   r   r   r   r   r   MyReaderr   z  sR        	/ 	/ 	/ 	/	- 	- 	-	'h 	' 	' 	' 	' 	' 	'r   r   Td   r   r   
   )lenrp   r   r   )r   r   r\   s      r   test_chunksize_is_incrementalr   p  s    	 		 
' ' ' ' ' ' ' ' Xe__FtIfDC@@@AABBQFFFFr!!!!!!r   orient_)splitr   tablec                     t          ddgddgd          }d}t          j        t          |          5  |                    d|            d d d            d S # 1 swxY w Y   d S )	Nr   r   r    r!   col1col2Omode='a' \(append\) is only supported whenlines is True and orient is 'records'r`   )moder   r   rA   r7   rD   r   )r   r   rc   s      r   test_to_json_append_orientr     s     
QFS#J77	8	8B	0  
z	-	-	- - -


G
,,,- - - - - - - - - - - - - - - - - -s   AA Ac                      t          ddgddgd          } d}t          j        t          |          5  |                     ddd	
           d d d            d S # 1 swxY w Y   d S )Nr   r   r    r!   r   r   r`   Fr   r   r   r   r   )r   rc   s     r   test_to_json_append_linesr     s     
QFS#J77	8	8B	0  
z	-	-	- < <


5
;;;< < < < < < < < < < < < < < < < < <s   AA!Amode_rxc                     t          ddgddgd          }d|  d}t          j        t          |          5  |                    | d	d
           d d d            d S # 1 swxY w Y   d S )Nr   r   r    r!   r   zmode=z@ is not a valid option.Only 'w' and 'a' are currently supported.r`   Fr   r   r   )r   r   rc   s      r   test_to_json_append_moder     s     
QFS#J77	8	8B	4 	4 	4 	4  
z	-	-	- > >


U9
===> > > > > > > > > > > > > > > > > >s   AA"%A"c                     t          ddgddgd          } t          ddgdd	gd          }t          g d
g dd          }t          j        d          5 }|                     |dd           |                    |ddd           t	          |d          }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r    r!   r   r   r   cd)r   r   r   r   )r    r!   r   r   ru   Tr   r   r   r   )r   r$   rv   r   r   r%   )df1df2r'   rw   r&   s        r   -test_to_json_append_output_consistent_columnsr     s(    aVc3Z88
9
9C
aVc3Z88
9
9C,,,8L8L8LMMNNH		%	% 0DY777Ds$yAAA 4t,,,
fh///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   AB<<C C c                     t          ddgddgd          } t          ddgdd	gd
          }t          g dg dt          j        t          j        dd	gd          }t          j        d          5 }|                     |ddd           |                    |ddd           t          |d          }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r    r!   r   er   !#r   col3)r   r   NN)r    r!   r   r   )r   r   r   ru   Tr   r   r   )r   npnanr$   rv   r   r   r%   )r   df3r'   rw   r&   s        r   /test_to_json_append_output_inconsistent_columnsr     sG    aVc3Z88
9
9C
c3Z#s<<
=
=C&&&(((VRVS#.	
 	
 H 
	%	% 0Ds$yAAADs$yAAA 4t,,,
fh///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   0ACCCc                  8   t          ddgddgd          } t          ddgdd	gd          }t          d
dgddgd          }t          dddgi          }t          g ddddd	d
dt          j        t          j        gt          j        t          j        t          j        t          j        ddt          j        t          j        gg dd                              ddi          }t	          j        d          5 }|                     |ddd           |                    |ddd           |                    |ddd           |                    |ddd           t          |d          }t	          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r    r!   r   r   r   r   r   r   r   r   r   r   col4TF)r   r   r   r   NNNN)NNNNNNTF)r   r   r   r   floatru   r   r   r   	r   r   r   astyper$   rv   r   r   r%   r   r   r   df4r'   rw   r&   s          r   ,test_to_json_append_output_different_columnsr     s    aVc3Z88
9
9C
aVc3Z88
9
9C
c3Z#s<<
=
=C
VdE]+
,
,C888#sCc2626BVRVRVRVS#rvrvNEEE		
 	
  ffg  
	%	% 	0Ds$yAAADs$yAAADs$yAAADs$yAAA 4t,,,
fh///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0   7BFFFc                  8   t          ddgddgd          } t          ddgdd	gd          }t          d
dgddgd          }t          dddgi          }t          g dt          j        t          j        d
ddd	ddgt          j        t          j        ddt          j        t          j        t          j        t          j        gg dd                              ddi          }t	          j        d          5 }|                    |ddd           |                    |ddd           |                    |ddd           |                     |ddd           t          |d          }t	          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r    r!   r   r   r   r   r   r   r   r   r   r   r   TF)TFNNNNNN)NNNNr   r   r   r   )r   r   r   r   r   ru   r   r   r   r   r   s          r   6test_to_json_append_output_different_columns_reorderedr     s    aVc3Z88
9
9C
aVc3Z88
9
9C
c3Z#s<<
=
=C
VdE]+
,
,C EEEVRVS#sCcBVRVS#rvrvrvrvN888		
 	
  ffg  
	%	% 	0Ds$yAAADs$yAAADs$yAAADs$yAAA 4t,,,
fh///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0r   )1collections.abcr   r*   r   pathlibr   numpyr   rA   pandasrY   r   r   pandas._testing_testingr$   pandas.io.json._jsonr   fixturer   r(   r2   rG   rK   rN   rT   rB   parametrizer^   re   rm   rs   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r     s   $ $ $ $ $ $                                   + + + + + + 4 4 4
, , ,, , ,, , ,0, , ,$G G G*> > > q#h//. . 0/.,  / / /0% % %&2 2 2$ tQi00? ? 10?6 &9&9&9::  ;: lll33E E 43E20 0 0& 1a&))	, 	, *)	, *VV,<==- - >=-<	> 	> 	>B B B." " "8 $?$?$?@@	- 	- A@	-	< 	< 	< 3*--	> 	> .-	>0 0 0$0 0 000 0 0:0 0 0 0 0r   