o
    թZhI                     @   s  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ejdd	 Zejd
dgddd Zdd Zdd Zdd Zdd Zdd Zdd Zejdddgdd Zd d! Z d"d# Z!d$d% Z"d&d' Z#ejdddgd(d) Z$ejdg d*d+d, Z%ejdg d-d.d/ Z&d0d1 Z'ejd2dd3gd4d5 Z(ejd6d7d8gd9d: Z)d;d< Z*d=d> Z+d?d@ Z,ejdAg dBdCdD Z-dEdF Z.ejdGdHdIgdJdK Z/dLdM Z0dNdO Z1dPdQ Z2dRdS Z3dS )T    )Iterator)StringIO)PathN)	DataFrame	read_json)
JsonReaderz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningc                  C   s$   t g dg dd} | jdddS )N                  ABTrecordslinesorient)r   to_json)df r   Z/var/www/html/lang_env/lib/python3.10/site-packages/pandas/tests/io/json/test_readlines.pylines_json_df   s   r   Zujsonpyarrow)paramsc                 C   s   | j dkr
td | j S )Nr   zpyarrow.json)parampytestZimportorskip)requestr   r   r   engine   s   

r!   c                  C   s<   t tddd} tddgddggddgd}t| | 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expectedr   r   r   test_read_jsonl#   s   r+   c                 C   s>   t | ddddd|d}tg dg dd	}t|| d S )
Niojsondataline_delimited.jsonTr   r!   )r	   r   r   )r
   r   r   r#   r$   )r   r   r'   r(   )datapathr!   r)   r*   r   r   r   test_read_jsonl_engine_pyarrow*   s   r3   c                 C   s   |dkrd}|  tjj|td tddgddgdfgg d	d
}|jddd}|dkr5tt||d}ntt||d}tg dg dgg d	d
}t	
|| d S )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)Zaccountsdatenamer%   Tr   r   r!   )r	   r7   r9   )r
   r8   r9   )applymarkerr   markxfail
ValueErrorr   r   r   r   r'   r(   )r    r!   r5   r   Z	json_liner)   r*   r   r   r   test_read_datetime4   s    rA   c                  C   s   d} t | } t| dd}tddgddggddgd	}t|| d} tt | dd}tddgddggddgd	}t|| 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*   r   r   r   test_read_jsonl_unicode_charsL   s   rD   c                  C   s   t ddgddggddgd} | jddd}d	}||ksJ t d
dgddggddgd} | jddd}d}||ks:J ttt|dd|  t ddgddggddgd} | jddd}d}||kscJ ttt|dd|  d S )Nr	   r
   r#   r$   r%   r   Tr   r   z{"a":1,"b":2}
{"a":1,"b":2}
zfoo}rB   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*   r   r   r   test_to_jsonl^   s   rF   c                  C   sD   t ddgddggddgd} | jdddd	}d}||ks J d S )
Nr	   r
   r#   r$   r%   r   TrE   
)r   r   count)r   Zactual_new_lines_countZexpected_new_lines_countr   r   r   test_to_jsonl_count_new_liness   s   rI   	chunksizer	   g      ?c                 C   s   |dkrd}|  tjj|td tt|dd}tt|d||d}t|}W d    n1 s3w   Y  t	
|| d S )Nr   mPyarrow only supports a file path as an input and line delimited jsonand doesn't support chunksize parameter.r4   Tr"   r   rJ   r!   )r=   r   r>   r?   r@   r   r   pdconcatr'   r(   )r    r   rJ   r!   r5   	unchunkedreaderchunkedr   r   r   test_readjson_chunks{   s   rR   c              	   C   s|   d}t jt|d+ tt| dd|d}W d    n1 sw   Y  W d    d S W d    d S 1 s7w   Y  d S )Nz*chunksize can only be passed if lines=TruematchFr
   rL   r   r6   r@   r   r   )r   r!   msg_r   r   r   &test_readjson_chunksize_requires_lines   s   "rX   c                 C   s   |dkrd}|  tjj|d tddd}t|jddd	}t|dd
|d}t|jddd	}t|dd
d|d}t	|}W d    n1 sKw   Y  t
|| d S )Nr   rK   )r5   r	   r
   r   Tr   r   Series)r   typr!   )r   rZ   rJ   r!   )r=   r   r>   r?   rM   rY   r   r   r   rN   r'   Zassert_series_equal)r    r!   r5   sZstriorO   rP   rQ   r   r   r   test_readjson_chunks_series   s   
r\   c                 C   s   |dkrd}|  tjj|td tt|dd|d}t|}W d    n1 s*w   Y  |d jdks8J |d	 jd
ksAJ d S )Nr   rK   r4   Tr
   rL   r   r
   r
   r	   )r	   r
   )	r=   r   r>   r?   r@   r   r   listshape)r    r   r!   r5   rP   chunksr   r   r   test_readjson_each_chunk   s   
ra   c              	   C   s   |dkrd}|  tjj|td tdF}tg dg dd}|j|dd	d
 t	|dd|d}t
|}W d    n1 sBw   Y  t	|d|d}t|| W d    d S 1 s_w   Y  d S )Nr   rK   r4   	test.jsonr   r   r   Tr   r   r	   rL   r0   )r=   r   r>   r?   r@   r'   ensure_cleanr   r   r   rM   rN   r(   )r    r!   r5   pathr   rP   rQ   rO   r   r   r   test_readjson_chunks_from_file   s   "re   c                 C   s   t dP}tg dg dd}|j|ddd t|d dddddd	d d d| d d d
}| |  W d    n1 s<w   Y  |jjjsMJ d|  W d    d S 1 sXw   Y  d S )Nrb   r   r   r   Tr   r   frameF)r   rZ   ZdtypeZconvert_axesZconvert_datesZkeep_default_datesZprecise_floatZ	date_unitencodingr   rJ   compressionnrowsz%didn't close stream with chunksize = )	r'   rc   r   r   r   readZhandleshandleclosed)rJ   rd   r   rP   r   r   r   test_readjson_chunks_closes   s6   
"rm   )r   g@rC   c              	   C   s|   d}t jt|d+ tt| d||d}W d    n1 sw   Y  W d    d S W d    d S 1 s7w   Y  d S )Nz"'chunksize' must be an integer >=1rS   TrL   rU   )r   rJ   r!   rV   rW   r   r   r   test_readjson_invalid_chunksize   s   "ro   )Nr	   r
   c                 C   s|   d}t g dg dd}tt|d| d}| d ur1| t|}W d    n1 s,w   Y  tj||d|  d d S )	NzF

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



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







    {"A":3,"B":6}
    r   r   r   Tr   rJ   zchunksize: )obj)r   r   r   rM   rN   r'   r(   )rJ   jorigtestr   r   r   )test_readjson_chunks_multiple_empty_lines   s   ru   c              	   C   s   |dkrd}|  tjj|td td@}|ddd  t|dd	d
}|	d W d    n1 s6w   Y  t
||d}tddgi}t|| W d    d S 1 sYw   Y  d S )Nr   rK   r4   rb   zlocale.getpreferredencodingc                 S   s   dS )Ncp949r   )do_setlocaler   r   r   <lambda>#  s    z'test_readjson_unicode.<locals>.<lambda>wzutf-8)rg   u6   {"£©µÀÆÖÞßéöÿ":["АБВГДабвгд가"]}r<   u   £©µÀÆÖÞßéöÿu   АБВГДабвгд가)r=   r   r>   r?   r@   r'   rc   setattropenwriter   r   r(   )r    Zmonkeypatchr!   r5   rd   fr)   r*   r   r   r   test_readjson_unicode  s   "r~   ri   r
   c                 C   sF   d}t t|d| d}tg dg ddjd |  }t|| d S )N[{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}T)r   ri   r	   r   r      r
   r   r      r1   )r   r   r   ilocr'   r(   )ri   r!   jsonlr)   r*   r   r   r   test_readjson_nrows,  s    r   znrows,chunksizer]   )r   r
   c           	      C   s   |dkrd}|  tjj|td d}|dkr8tt|d|||d}t|}W d    n1 s2w   Y  nt|d|||d}t|}W d    n1 sQw   Y  t	g dg dd	j
d | }t|| d S )
Nr   rK   r4   r   T)r   ri   rJ   r!   r   r   r1   )r=   r   r>   r?   r@   r   r   rM   rN   r   r   r'   r(   )	r    ri   rJ   r!   r5   r   rP   rQ   r*   r   r   r   test_readjson_nrows_chunks9  s*   
 r   c                 C   sL   d}d}t jt|d t|dd| d W d    d S 1 sw   Y  d S )Nr   z&nrows can only be passed if lines=TruerS   Fr
   )r   ri   r!   )r   r6   r@   r   )r!   r   rV   r   r   r   "test_readjson_nrows_requires_linesX  s
   "r   c           
      C   s   |dkrd}|  tjj|td tddggddgdgd	td
dggddgdgd	tddggddgdgd	g}|dddd}t| }t|dd|d}t	|D ]\}}	t
|	||  qQW d    d S 1 siw   Y  d S )Nr   rK   r4   r	   r
   r#   r$   r   )r&   indexr   r   r   r   r,   r-   r.   r/   TrL   )r=   r   r>   r?   r@   r   r   as_urir   	enumerater'   r(   )
r    r2   r!   r5   Zdf_list_expectedZos_pathfile_urlZ
url_readerr   Zchuckr   r   r   "test_readjson_lines_chunks_fileurld  s   "r   c                  C   sN   dd } G dd d}|| }t tt|d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                   @   s,   e Zd Zd	ddZdd ZdefddZdS )
z/test_chunksize_is_incremental.<locals>.MyReaderreturnNc                 S   s   d| _ t|| _d S )Nr   )
read_countr   stringio)selfcontentsr   r   r   __init__  s   z8test_chunksize_is_incremental.<locals>.MyReader.__init__c                 W   s   |  j d7  _ | jj| S Nr	   )r   r   rj   )r   argsr   r   r   rj     s   z4test_chunksize_is_incremental.<locals>.MyReader.readc                 S   s   |  j d7  _ t| jS r   )r   iterr   )r   r   r   r   __iter__  s   
z8test_chunksize_is_incremental.<locals>.MyReader.__iter__)r   N)__name__
__module____qualname__r   rj   r   r   r   r   r   r   MyReader  s    
r   Td   rp   r	   
   )lenr^   r   r   )r   r   rP   r   r   r   test_chunksize_is_incremental{  s   r   orient_)splitr   tablec                 C   s\   t ddgddgd}d}tjt|d |jd| d W d    d S 1 s'w   Y  d S )	Nr	   r
   r#   r$   col1col2Pmode='a' \(append\) is only supported when lines is True and orient is 'records'rS   )moder   r   r   r6   r@   r   )r   r   rV   r   r   r   test_to_json_append_orient  s   "r   c                  C   s^   t ddgddgd} d}tjt|d | jddd	d
 W d    d S 1 s(w   Y  d S )Nr	   r
   r#   r$   r   r   rS   Fr   r   r   r   r   )r   rV   r   r   r   test_to_json_append_lines  s   "r   mode_rxc                 C   sf   t ddgddgd}d|  d}tjt|d |j| d	d
d W d    d S 1 s,w   Y  d S )Nr	   r
   r#   r$   r   zmode=z@ is not a valid option.Only 'w' and 'a' are currently supported.rS   Fr   r   r   )r   r   rV   r   r   r   test_to_json_append_mode  s   
"r   c                  C   s   t ddgddgd} t ddgdd	gd}t g d
g dd}td&}| j|ddd |j|dddd t|dd}t|| W d    d S 1 sOw   Y  d S )Nr	   r
   r#   r$   r   r   r   cd)r	   r
   r   r   )r#   r$   r   r   rb   Tr   r   r   r"   )r   r'   rc   r   r   r(   )df1df2r*   rd   r)   r   r   r   -test_to_json_append_output_consistent_columns  s   "r   c                  C   s   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d'}| j|dddd |j|dddd t|dd}t|| W d    d S 1 sWw   Y  d S )Nr	   r
   r#   r$   r   er}   !#r   col3)r	   r
   NN)r#   r$   r   r}   )r   r   r   rb   Tr   r   r"   )r   npnanr'   rc   r   r   r(   )r   df3r*   rd   r)   r   r   r   /test_to_json_append_output_inconsistent_columns  s   "r   c                  C   s6  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d9}| j|dddd |j|dddd |j|dddd |j|dddd t|dd}t|| W d    d S 1 sw   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   floatrb   r   r   r"   	r   r   r   Zastyper'   rc   r   r   r(   r   r   r   Zdf4r*   rd   r)   r   r   r   ,test_to_json_append_output_different_columns  s*   
"r   c                  C   s6  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d9}|j|dddd |j|dddd |j|dddd | j|dddd t|dd}t|| W d    d S 1 sw   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   rb   r   r   r"   r   r   r   r   r   6test_to_json_append_output_different_columns_reordered  s*   
"r   )4collections.abcr   r,   r   pathlibr   numpyr   r   ZpandasrM   r   r   Zpandas._testingZ_testingr'   Zpandas.io.json._jsonr   r>   filterwarningsZ
pytestmarkZfixturer   r!   r+   r3   rA   rD   rF   rI   ZparametrizerR   rX   r\   ra   re   rm   ro   ru   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sf    



	







