B
    `                 @   sT  d dl mZ d dlm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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d dddgd d! Zejdddd"gd#d$ Zd%d& Zejd'dd"gd(d) Zejd*d+d,gd-d. Zd/d0 Z d1d2 Z!dS )3    )StringIO)PathN)	DataFrame	read_json)
JsonReaderc              C   s*   t dddgdddgd} | jdd	d
S )N                  )ABTrecords)linesorient)pdr   to_json)df r   R/home/dcms/DCMS/lib/python3.7/site-packages/pandas/tests/io/json/test_readlines.pylines_json_df   s    r   c              C   s8   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   tmassert_frame_equal)resultexpectedr   r   r   test_read_jsonl   s    r   c              C   s|   d} t | } t| dd}tddgddggddgd	}t|| d} 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"}
T)r   u   foo”barfoor   r   )r   )r   r   r   r   r   )jsonr   r   r   r   r   test_read_jsonl_unicode_chars   s    r#   c              C   s   t ddgddggddgd} | jddd}d	}||ks:tt d
dgddggddgd} | jddd}d}||kstttt|dd|  t ddgddggddgd} | jddd}d}||kst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}r    zfoo"z.{"a":"foo}","b":"bar"}
{"a":"foo\"","b":"bar"})r   zfoo\za\z3{"a\\":"foo\\","b":"bar"}
{"a\\":"foo\"","b":"bar"})r   r   AssertionErrorr   r   r   )r   r   r   r   r   r   test_to_jsonl,   s    r%   	chunksizer   g      ?c             C   s<   t t| dd}t t| d|d}t|}t|| d S )NT)r   )r   r&   )r   r   r   concatr   r   )r   r&   	unchunkedreaderchunkedr   r   r   test_readjson_chunksA   s    
r+   c          	   C   s6   d}t jt|d tjt| ddd W d Q R X d S )Nz*chunksize can only be passed if lines=True)matchFr   )r   r&   )pytestraises
ValueErrorr   r   r   )r   msgr   r   r   &test_readjson_chunksize_requires_linesN   s    r1   c              C   sl   t ddd} t| jddd}t j|ddd}t| jddd}t t j|dddd	}t|| d S )
Nr   r   )r   r   Tr   )r   r   Series)r   typ)r   r3   r&   )r   r2   r   r   r   r'   r   Zassert_series_equal)sZstrior(   r*   r   r   r   test_readjson_chunks_seriesT   s    r5   c             C   s@   t tjt| ddd}|d jdks*t|d jdks<td S )NTr   )r   r&   r   )r   r   r   )r   r   )listr   r   r   shaper$   )r   chunksr   r   r   test_readjson_each_chunka   s    r9   c           	   C   sv   t db} tdddgdddgd}|j| d	d
d ttj| d	dd}tj| d	d}t || W d Q R X d S )Nz	test.jsonr   r   r	   r
   r   r   )r   r   Tr   )r   r   )r   r&   )r   )r   ensure_cleanr   r   r   r'   r   r   )pathr   r*   r(   r   r   r   test_readjson_chunks_from_filei   s    r<   c             C   s   t dv}tdddgdddgd}|j|d	d
d t|d dd	d	d	d	ddd d d	| d d d}|  |jjs|t	d|  W d Q R X d S )Nz	test.jsonr   r   r	   r
   r   r   )r   r   Tr   )r   r   frameF)r   r3   ZdtypeZconvert_axesZconvert_datesZkeep_default_datesnumpyZprecise_floatZ	date_unitencodingr   r&   compressionnrowsz%didn't close stream with chunksize = )
r   r:   r   r   r   r   readZopen_streamclosedr$   )r&   r;   r   r)   r   r   r   test_readjson_chunks_closesr   s,    
rD   g@r!   c          	   C   s6   d}t jt|d tjt| d|d W d Q R X d S )Nz"'chunksize' must be an integer >=1)r,   T)r   r&   )r-   r.   r/   r   r   r   )r   r&   r0   r   r   r   test_readjson_invalid_chunksize   s    rF   r   c             C   s\   d}t dddgdddgd}t j|d	| d
}| d k	rBt |}tj||d|  d d S )NzF

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



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







    {"A":3,"B":6}
    r   r   r	   r
   r   r   )r   r   T)r   r&   zchunksize: )obj)r   r   r   r'   r   r   )r&   jorigtestr   r   r   )test_readjson_chunks_multiple_empty_lines   s    
rK   c          
   C   sr   t d^}| ddd  t|ddd}|d W d Q R X t|}td	d
gi}t || W d Q R X d S )Nz	test.jsonz _bootlocale.getpreferredencodingc             S   s   dS )Ncp949r   )lr   r   r   <lambda>       z'test_readjson_unicode.<locals>.<lambda>wzutf-8)r?   u6   {"£©µÀÆÖÞßéöÿ":["АБВГДабвгд가"]}u   £©µÀÆÖÞßéöÿu   АБВГДабвгд가)	r   r:   setattropenwriter   r   r   r   )Zmonkeypatchr;   fr   r   r   r   r   test_readjson_unicode   s    rU   rA   c             C   sN   d}t j|d| d}t ddddgdd	d
dgdjd |  }t|| d S )Nz[{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}T)r   rA   r   r	   r      r   r
   r      )r   r   )r   r   r   ilocr   r   )rA   jsonlr   r   r   r   r   test_readjson_nrows   s    *rZ   znrows,chunksize)r   r   )r
   r   c             C   sX   d}t |d| |d}t|}tddddgdd	d
dgdjd |  }t|| d S )Nz[{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}T)r   rA   r&   r   r	   r   rV   r   r
   r   rW   )r   r   )r   r   r'   r   rX   r   r   )rA   r&   rY   r)   r*   r   r   r   r   test_readjson_nrows_chunks   s
    
*r[   c           	   C   s6   d} d}t jt|d tj| ddd W d Q R X d S )Nz[{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}z&nrows can only be passed if lines=True)r,   Fr   )r   rA   )r-   r.   r/   r   r   )rY   r0   r   r   r   "test_readjson_nrows_requires_lines   s    r\   c             C   s   t jddggddgdgdt jddggddgdgdt jd	d
ggddgdgdg}| dddd}t| }t j|ddd}x$t|D ]\}}t|||  qW d S )Nr   r   r   r   r   )r   indexr	   r
   r   r   ior"   datazline_delimited.jsonT)r   r&   )r   r   r   as_urir   	enumerater   r   )ZdatapathZdf_list_expectedZos_pathZfile_urlZ
url_readerr]   Zchuckr   r   r   "test_readjson_lines_chunks_fileurl   s    rb   )"r^   r   pathlibr   r-   Zpandasr   r   r   Zpandas._testingZ_testingr   Zpandas.io.json._jsonr   Zfixturer   r   r#   r%   markZparametrizer+   r1   r5   r9   r<   rD   rF   rK   rU   rZ   r[   r\   rb   r   r   r   r   <module>   s.   	