
    OwgI                        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$                  j'                  d      Zej*                  d        Z ej*                  d	d
g      d        Zd Zd Zd Zd Zd Zd Zej$                  j=                  dddg      d        Zd Z d Z!d Z"d Z#ej$                  j=                  dddg      d        Z$ej$                  j=                  dg d      d        Z%ej$                  j=                  dg d      d        Z&d  Z'ej$                  j=                  d!dd"g      d#        Z(ej$                  j=                  d$d%d&g      d'        Z)d( Z*d) Z+d* Z,ej$                  j=                  d+g d,      d-        Z-d. Z.ej$                  j=                  d/d0d1g      d2        Z/d3 Z0d4 Z1d5 Z2d6 Z3y)7    )Iterator)StringIO)PathN)	DataFrame	read_json)
JsonReaderz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                  L    t        g dg dd      } | j                  dd      S )N                  ABTrecordslinesorient)r   to_json)dfs    Z/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/io/json/test_readlines.pylines_json_dfr      s$    	3	4B::D:33    ujsonpyarrow)paramsc                 b    | j                   dk(  rt        j                  d       | j                   S )Nr   zpyarrow.json)parampytestimportorskip)requests    r   enginer&      s&    }}	!N+==r   c                      t        t        d      d      } t        ddgddggddg      }t        j                  | |       y )	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_jsonlr1   #   sA    x EFdSF1a&1a&)C:>H&(+r   c                     t         | dddd      d|      }t        g dg dd	      }t        j                  ||       y )
Niojsondataline_delimited.jsonTr   r&   )r   r   r   )r   r   r   r)   r*   )r   r   r-   r.   )datapathr&   r/   r0   s       r   test_read_jsonl_engine_pyarrowr:   *   sB    vv'<=F
 yy9:H&(+r   c                    |dk(  r6d}| j                  t        j                  j                  |t                     t        ddgddgdfgg d	
      }|j                  dd      }|dk(  rt        t        |      |      }nt        t        |      |      }t        g dg dgg d	
      }t        j                  ||       y )Nr   zEPyarrow 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   r?   rA   )r   r@   rA   )applymarkerr#   markxfail
ValueErrorr   r   r   r   r-   r.   )r%   r&   r=   r   	json_liner/   r0   s          r   test_read_datetimerK   4   s    XFKK--VJ-OP	a&<!<=x	HI,
B 

i
8I8I.v>8I.v>	$&PQ,H &(+r   c                     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                  ||       y )
Nu5   {"a": "foo”", "b": "bar"}
{"a": "foo", "b": "bar"}
Tr(   u   foo”barfoor)   r*   r+   )r   r   r   r-   r.   )r4   r/   r0   s      r   test_read_jsonl_unicode_charsrO   L   s    
 EDD>Dt4(F;.?#sTH&(+ EDx~T2F;.?#sTH&(+r   c                     t        ddgddggddg      } | j                  dd      }d	}||k(  sJ t        d
dgddggddg      } | j                  dd      }d}||k(  sJ t        j                  t	        t        |      d      |        t        ddgddggddg      } | j                  dd      }d}||k(  sJ t        j                  t	        t        |      d      |        y )Nr   r   r)   r*   r+   r   Tr   r   z{"a":1,"b":2}
{"a":1,"b":2}
zfoo}rM   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/   r0   s      r   test_to_jsonlrR   ^   s   	QFQF#c3Z	8BZZyZ5F/HX	VUOfe_5Sz	JBZZyZ5FCHX)HV$4DA2F 
We$vuo6	MBZZyZ5FNHX)HV$4DA2Fr   c                      t        ddgddggddg      } | j                  dd      j                  d	      }d}||k(  sJ y )
Nr   r   r)   r*   r+   r   TrQ   
)r   r   count)r   actual_new_lines_countexpected_new_lines_counts      r   test_to_jsonl_count_new_linesrX   s   sR    	QFQF#c3Z	8BZZyZEKKDQ !%====r   	chunksizer   g      ?c                 V   |dk(  r6d}| j                  t        j                  j                  |t                     t        t        |      d      }t        t        |      d||      5 }t        j                  |      }d d d        t        j                  |       y # 1 sw Y    xY w)Nr   mPyarrow only supports a file path as an input and line delimited jsonand doesn't support chunksize parameter.r<   Tr(   r   rY   r&   )rF   r#   rG   rH   rI   r   r   pdconcatr-   r.   )r%   r   rY   r&   r=   	unchunkedreaderchunkeds           r   test_readjson_chunksrb   {   s     7 	 	FKK--VJ-OP(=1>I	ty
 $	))F#$
 '9-$ $s   *BB(c                     d}t        j                  t        |      5  t        t	        |       dd|      5 }	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz*chunksize can only be passed if lines=TruematchFr   r\   r#   r>   rI   r   r   )r   r&   msg_s       r   &test_readjson_chunksize_requires_linesri      s`    
6C	z	- ]#5Af
 		 	 	 !   AA
A
A	AAc                    |dk(  r1d}| j                  t        j                  j                  |             t	        j
                  ddd      }t        |j                  dd	            }t        |dd
|      }t        |j                  dd	            }t        |dd
d|      5 }t	        j                  |      }d d d        t        j                  |       y # 1 sw Y    xY w)Nr   r[   )r=   r   r   r   Tr   r   Series)r   typr&   )r   rm   rY   r&   )rF   r#   rG   rH   r]   rl   r   r   r   r^   r-   assert_series_equal)r%   r&   r=   sstrior_   r`   ra   s           r   test_readjson_chunks_seriesrq      s    7 	 	FKK--V-<= 			"#AQYYT)Y<=E%t&IIQYYT)Y<=E	Tx1V
 $	))F#$
 7I.$ $s   &CC$c                 :   |dk(  r6d}| j                  t        j                  j                  |t                     t        t        |      dd|      5 }t        |      }d d d        d   j                  dk(  sJ |d	   j                  d
k(  sJ y # 1 sw Y   2xY w)Nr   r[   r<   Tr   r\   r   r   r   r   )r   r   )	rF   r#   rG   rH   rI   r   r   listshape)r%   r   r&   r=   r`   chunkss         r   test_readjson_each_chunkrw      s    7 	 	FKK--VJ-OP 
tq
 	f !9??f$$$!9??f$$$ s   BBc                    |dk(  r6d}| j                  t        j                  j                  |t                     t        j                  d      5 }t        g dg dd      }|j                  |dd	
       t        |dd|      5 }t        j                  |      }d d d        t        |d|      }t        j                  |       d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY w)Nr   r[   r<   	test.jsonr
   r   r   Tr   r   r   r\   r7   )rF   r#   rG   rH   rI   r-   ensure_cleanr   r   r   r]   r^   r.   )r%   r&   r=   pathr   r`   ra   r_   s           r   test_readjson_chunks_from_filer|      s    7 	 	FKK--VJ-OP		% 2YY78


4tI
6t41VD 	(ii'G	(d$v>	
i12 2	( 	(2 2s$   6CC,CC	CC'c                 z   t        j                  d      5 }t        g dg dd      }|j                  |dd       t	        |d dddddd	d d d| d d 
      }|5  |j                          d d d        |j                  j                  j                  s
J d|         	 d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)Nry   r
   r   r   Tr   r   frameF)r   rm   dtypeconvert_axesconvert_dateskeep_default_datesprecise_float	date_unitencodingr   rY   compressionnrowsz%didn't close stream with chunksize = )	r-   rz   r   r   r   readhandleshandleclosed)rY   r{   r   r`   s       r   test_readjson_chunks_closesr      s    		% ?YY78


4tI
6#
   	KKM	 NN!!((	?29+>	?(-? ?&	 	'? ?s$   AB1B%)2B1%B.	*B11B:)r   g@rN   c                     d}t        j                  t        |      5  t        t	        |       d||      5 }	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz"'chunksize' must be an integer >=1rd   Tr\   rf   )r   rY   r&   rg   rh   s        r   test_readjson_invalid_chunksizer      s`    
/C	z	- ]#49V
 		 	 	 rj   )Nr   r   c                     d}t        g dg dd      }t        t        |      d|       }|  |5  t        j                  |      }d d d        t        j                  ||d|         y # 1 sw Y   %xY w)	NzF

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



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







    {"A":3,"B":6}
    r
   r   r   Tr   rY   zchunksize: )obj)r   r   r   r]   r^   r-   r.   )rY   jorigtests       r   )test_readjson_chunks_multiple_empty_linesr      sp    	A  9956DXa[	BD 	#99T?D	#$K	{*CD	# 	#s   A**A3c                    |dk(  r6d}| j                  t        j                  j                  |t                     t        j                  d      5 }|j                  dd        t        |dd	      5 }|j                  d
       d d d        t        ||      }t        ddgi      }t        j                  ||       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)Nr   r[   r<   ry   zlocale.getpreferredencodingc                      y)Ncp949 )do_setlocales    r   <lambda>z'test_readjson_unicode.<locals>.<lambda>#  s    r   wzutf-8)r   u6   {"£©µÀÆÖÞßéöÿ":["АБВГДабвгд가"]}rE   u   £©µÀÆÖÞßéöÿu   АБВГДабвгд가)rF   r#   rG   rH   rI   r-   rz   setattropenwriter   r   r.   )r%   monkeypatchr&   r=   r{   fr/   r0   s           r   test_readjson_unicoder     s    7 	 	FKK--VJ-OP		% 09;WX$g. 	N!GGLM	N 4/69R8STU
fh/0 0	N 	N0 0s$   "C3C9CC	CCr   r   c                     d}t        t        |      d|       }t        g dg dd      j                  d |  }t	        j
                  ||       y )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      r8   )r   r   r   ilocr-   r.   )r   r&   jsonlr/   r0   s        r   test_readjson_nrowsr   ,  sI    E xd%@F|,?@EEfuMH&(+r   znrows,chunksizers   )r   r   c                    |dk(  r6d}| j                  t        j                  j                  |t                     d}|dk7  r8t        t        |      d|||      5 }t        j                  |      }d d d        n.t        |d|||      5 }t        j                  |      }d d d        t        g dg dd	      j                  d | }t        j                  |       y # 1 sw Y   ?xY w# 1 sw Y   KxY w)
Nr   r[   r<   r   T)r   r   rY   r&   r   r   r8   )rF   r#   rG   rH   rI   r   r   r]   r^   r   r   r-   r.   )	r%   r   rY   r&   r=   r   r`   ra   r0   s	            r   test_readjson_nrows_chunksr   9  s     7 	 	FKK--VJ-OPE
 UO4u	RX
 	(ii'G	( 	(
 Ui
 	(ii'G	( |,?@EEfuMH'8,	( 	(
	( 	(s   CC+C(+C4c                     d}d}t        j                  t        |      5  t        |dd|        d d d        y # 1 sw Y   y xY w)Nr   z&nrows can only be passed if lines=Truerd   Fr   )r   r   r&   )r#   r>   rI   r   )r&   r   rg   s      r   "test_readjson_nrows_requires_linesr   X  sA    E 3C	z	- >%uAf=> > >s	   9Ac                    |dk(  r6d}| j                  t        j                  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        |      j                         }t        |dd|      5 }t        |      D ]  \  }}	t        j                  |	||            	 d d d        y # 1 sw Y   y xY w)Nr   r[   r<   r   r   r)   r*   r   )r,   indexr   r   r   r   r3   r4   r5   r6   Tr\   )rF   r#   rG   rH   rI   r   r   as_urir   	enumerater-   r.   )
r%   r9   r&   r=   df_list_expectedos_pathfile_url
url_readerr   chucks
             r   "test_readjson_lines_chunks_fileurlr   d  s
    7 	 	FKK--VJ-OP 	Aq6(S#Jqc:Aq6(S#Jqc:Aq6(S#Jqc:
 tVV-BCGG}##%H	841V	D B
%j1 	BLE5!!%)9%)@A	BB B Bs   *-C!!C*c            	          ddz  }  G d d      } ||       }t        t        t        |dd                  dkD  sJ |j                  d	kD  sJ y )
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y)/test_chunksize_is_incremental.<locals>.MyReaderreturnNc                 2    d| _         t        |      | _        y )Nr   )
read_countr   stringio)selfcontentss     r   __init__z8test_chunksize_is_incremental.<locals>.MyReader.__init__  s    DO$X.DMr   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 O%4==%%t,,r   c                 V    | xj                   dz  c_         t        | j                        S r   )r   iterr   )r   s    r   __iter__z8test_chunksize_is_incremental.<locals>.MyReader.__iter__  s    OOq O&&r   )r   N)__name__
__module____qualname__r   r   r   r   r   r   r   MyReaderr     s    	/	-	'h 	'r   r   Td   r   r   
   )lenrt   r   r   )r   r   r`   s      r   test_chunksize_is_incrementalr   {  s`    	 		 
' ' e_FtIfDC@ABQFFFr!!!r   orient_)splitr   tablec                     t        ddgddgd      }d}t        j                  t        |      5  |j	                  d|        d d d        y # 1 sw Y   y xY w)	Nr   r   r)   r*   col1col2Pmode='a' \(append\) is only supported when lines is True and orient is 'records'rd   )moder   r   r#   r>   rI   r   )r   r   rg   s      r   test_to_json_append_orientr     sZ     
QFS#J7	8B	0  
z	- -


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


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


U9
=> > >s   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 }| j                  |dd       |j                  |ddd       t	        |d      }t        j
                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   r)   r*   r   r   r   cd)r   r   r   r   )r)   r*   r   r   ry   Tr   r   r   r(   )r   r-   rz   r   r   r.   )df1df2r0   r{   r/   s        r   -test_to_json_append_output_consistent_columnsr     s     aVc3Z8
9C
aVc3Z8
9C,8LMNH		% 0DY7Ds$yA 4t,
fh/0 0 0s   AB""B+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 }| j                  |ddd       |j                  |ddd       t        |d      }t        j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   r)   r*   r   er   !#r   col3)r   r   NN)r)   r*   r   r   )r   r   r   ry   Tr   r   r(   )r   npnanr-   rz   r   r   r.   )r   df3r0   r{   r/   s        r   /test_to_json_append_output_inconsistent_columnsr     s     aVc3Z8
9C
c3Z#s<
=C&(VVRVVS#.	
H 
	% 0Ds$yADs$yA 4t,
fh/0 0 0s   -ACCc                     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      j                  ddi      }t	        j
                  d      5 }| j                  |ddd       |j                  |ddd       |j                  |ddd       |j                  |ddd       t        |d      }t	        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   r   r   col4TF)r   r   r   r   NNNN)NNNNNNTF)r   r   r   r   floatry   r   r   r(   	r   r   r   astyper-   rz   r   r   r.   r   r   r   df4r0   r{   r/   s          r   ,test_to_json_append_output_different_columnsr     s`    aVc3Z8
9C
aVc3Z8
9C
c3Z#s<
=C
VdE]+
,C8#sCc266266BVVRVVRVVRVVS#rvvrvvNE		
 ffg  
	% 	0Ds$yADs$yADs$yADs$yA 4t,
fh/	0 	0 	0    A8FF
c                     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      j                  ddi      }t	        j
                  d      5 }|j                  |ddd       |j                  |ddd       |j                  |ddd       | j                  |ddd       t        |d      }t	        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   r   r   r   TF)TFNNNNNN)NNNNr   r   r   r   )r   r   r   r   r   ry   r   r   r(   r   r   s          r   6test_to_json_append_output_different_columns_reorderedr     sb    aVc3Z8
9C
aVc3Z8
9C
c3Z#s<
=C
VdE]+
,C EVVRVVS#sCcBVVRVVS#rvvrvvrvvrvvN8		
 ffg  
	% 	0Ds$yADs$yADs$yADs$yA 4t,
fh/	0 	0 	0r   )4collections.abcr   r3   r   pathlibr   numpyr   r#   pandasr]   r   r   pandas._testing_testingr-   pandas.io.json._jsonr   rG   filterwarnings
pytestmarkfixturer   r&   r1   r:   rK   rO   rR   rX   parametrizerb   ri   rq   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r     s   $       +[[''C

 4 4
 +, -,,,0,$G*> q#h/. 0.,/0%&2$ tQi0? 1?6 &9: ; l3E 4E20& 1a&)	, *	, *VV,<=- >-<	>B."8 $?@	- A	-	< 3*-	> .	>0$000:0r   