U
    >vf                    @   s   d dl Z 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	Z	d dl
Zd dlZd dlmZ d dlm  mZ d dlZd dlmZmZmZmZmZmZ d dlmZ d dlmZm Z  dd	 Z!G d
d dZ"dd Z#dd Z$dS )    N)	timedelta)Decimal)StringIO)IS64)NA	DataFrameDatetimeIndexSeries	Timestamp	read_json)ArrowStringArrayStringArrayc                 C   s<   |dkr|j dd}|dkr,tt|j|_t| | d S )N)recordsvaluesTdropr   )reset_indexrangelencolumnstmassert_frame_equal)resultexpectedorient r   D/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/io/json/test_pandas.pyassert_json_roundtrip_equal    s
    r   c                   @   s  e Zd Zejdd Zejdd Zejdd Zdd Zej	
d	d
ddgdd Zej	
d	ddgdd Zej	
d	d
dgej	
dddgddggddgddggddgddggeddgeddgggd d! Zej	
d	dddgd"d# Zd$d% Zej	
d&d'egej	
d(d)d'gd*d+ Zej	
d&d'ejgej	
d(d)d'gd,d- Zej	
d&d.ejed/gej	
d(d)d'gd0d1 Zej	
d(d)d'gd2d3 Zej	
d(d)d'gd4d5 Zej	
d(d)d'gd6d7 Zej	
d(d)d'gd8d9 Zej	jd:ed;ej	
dd<d<gd=d>ggd<d?gd=d=ggd<d<gd=d=gggd@dA Zej	
dBdCdDdE dFgd
fdGdHgdIdJ Z!ej	
d&d)d'gej	
d(d)d'gdKdL Z"ej	
d&d)d'gdMdN Z#ej	
dOej$ej%gej	
d&d)d'gdPdQ Z&ej	j'e( dRdSej	
dTdUdVdWdXdYdZgd[d\ Z)d]d^ Z*d_d` Z+dadb Z,dcdd Z-dedf Z.dgdh Z/didj Z0dkdl Z1dmdn Z2dodp Z3dqdr Z4ej	
d&d'd.gdsdt Z5dudv Z6dwdx Z7ej	
d&ejegdydz Z8d{d| Z9d}d~ Z:dd Z;ej	
dd)e<dgddfd'e<dgfgdd Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCej	
dddgej	
dd)d'gej	
deDjEeDjDegdd ZFej	
ddddddddgdd ZGej	
ddddddgdd ZHdd ZIej	
ddddddgdd ZJdd ZKej	
dddddgdd ZLdd ZMdd ZNdd ZOej	jPeQjPdd)dej	
ddeRjSddōgddgdeRjSddōggddɄ ZTdd˄ ZUdd̈́ ZVddτ ZWej	
dd)d'gej	
dddgej	
deRjXeYgdd҄ ZZddԄ Z[ddք Z\dd؄ Z]ddڄ Z^dd܄ Z_ddބ Z`dd Zaej	
dededddōedgdd Zbdd Zcej	
deRjddddeRjdddddeRjddddgdd Zedd Zfdd Zgej	jheijjdd Zkdd Zldd Zmej	
denjod enjod  gdd Zpej	
dd dgdd Zqdd Zrdd Zsej	jdetd;d	d
 Zudd Zvej	
dd.ddgddgddgddgddggej	
dddgddgddggdd Zwdd Zxej	
d	d
dddgdd Zyej	
d&d)eedgdd Zzdd Z{ej	
de|ddgdd ggddgd!ddgddgdd ggd"fe|ddgdd ggddgd!}d#ddgddgdd ggd"fe|ddgdd ggddgddgddggd$ddgddgdd ggd"fe<dddgd%d&d%dddgd'fe<dddgd%d&}d#d%dddgd'fe<ddgd%ddgddggd(d%ddgd'fgd)d* Z~ej	
de|ddgdd ggddgd!e|ddgdd ggddgd!}d#e|ddgdd ggddgddgddggd$e<dddgd%d&e<dddgd%d&}d#e<ddgd%ddgddggd(gd+d, Zej	
d	ddddgd-d. Zej	
d	d
d/gej	
dd)d'gd0d1 Zd2d3 Zej	
d4d5d6d7d8gd9d: Zej	
d;d<d=d>d?gd@dA Zej	
dBdCdDgdEdF Zej	
dGdHdIejd
d<ej	jdJdSdKejd/d<ej	jdJdSdKgdLdM Zej	
dNdddgdOdP Zej	
dGdQdRdSdTdUdVgdWdX ZdYdZ Zd[d\ Zd]d^ Zej	
d_e|dddgdddgd`dafgdbdc Zej	jhddde Zdfdg Zdhdi Zdjdk Zdldm Zej	
dne<dodpdqdrdsfe<dtdudvdrdwfe|dxdygdzd{ggd|fe|d}d~gddggdfgdd Zdd Zej	
d	d
ddddgdd Zej	
d	d
ddgdd Zdd Zd.S (  TestPandasContainerc                 C   sz   t  }t|}dgd dgd  dgd  dgt|d   }tj|dd|_tt||d< t	j
t|d	d
|d< |S )NZbah   barbazfoo   Enameint64dtypesort)r   ZgetSeriesDatar   r   pdZCategoricalIndexindexlistreversednpZarange)selfZ_seriesdZ
_cat_framecatr   r   r   categorical_frame)   s    0z%TestPandasContainer.categorical_framec                 C   s    t  }d|_|jd |_|S )Nts)r   ZmakeTimeSeriesr&   r,   
_with_freq)r0   serr   r   r   datetime_series5   s    z#TestPandasContainer.datetime_seriesc                 C   s   t t }|jd |_|S N)r   r   ZgetTimeSeriesDatar,   r4   r0   dfr   r   r   datetime_frame>   s    z"TestPandasContainer.datetime_framec                 C   sN   t ddgddggddgddgd	}t|j|d
|d
}| }t||| d S )Nabcdz	index " 1z	index / 2za \ bzy / zr,   r   r   r   r   to_jsoncopyr   r0   r   r9   r   r   r   r   r    test_frame_double_encoded_labelsF   s    z4TestPandasContainer.test_frame_double_encoded_labelsr   splitr   r   c                 C   sN   t ddgddggddgddgd}t|j|d	|d	}| }t||| d S )
Nr;   r<   r=   r>      xyr?   r@   rA   rD   r   r   r   test_frame_non_unique_indexR   s    "z/TestPandasContainer.test_frame_non_unique_indexr,   r   c              	   C   sX   t ddgddggddgddgd}d	| d
}tjt|d |j|d W 5 Q R X d S )Nr;   r<   r=   r>   rG   rH   rI   r?   z+DataFrame index must be unique for orient=''matchr@   r   pytestraises
ValueErrorrB   r0   r   r9   msgr   r   r   "test_frame_non_unique_index_raisesZ   s    "z6TestPandasContainer.test_frame_non_unique_index_raisesdatar;   r<   r=   r>         ?      @g      @g      @rG      20130101Z20130102c                 C   s   t |ddgddgd}t|j|d|dgd}|dkrt |}|jd d df jd	kr|jd d df tjd
 |jd d df< n|dkr|}ddg|_t	
|| d S )NrG      rH   r?   r@   )r   convert_datesr   r   datetime64[ns]@B rF   zx.1)r   r   rB   ilocr)   viewr/   r'   r   r   r   )r0   r   rU   r9   r   r   r   r   r   test_frame_non_unique_columnsa   s    
  .
z1TestPandasContainer.test_frame_non_unique_columnsc              	   C   sX   t ddgddggddgddgd}d	| d
}tjt|d |j|d W 5 Q R X d S )Nr;   r<   r=   r>   rG   rZ   rH   r?   z-DataFrame columns must be unique for orient='rK   rL   r@   rN   rR   r   r   r   $test_frame_non_unique_columns_raises   s    "z8TestPandasContainer.test_frame_non_unique_columns_raisesc                 C   s   |  |j ddkstd S )Nr   r@   rB   AssertionError)r0   float_framer   r   r   test_frame_default_orient   s    z-TestPandasContainer.test_frame_default_orientr)   Fconvert_axesTc                 C   s0   |j |d}t||||d}|}t||| d S Nr@   r   rf   r)   rB   r   r   )r0   r   rf   r)   rd   rU   r   r   r   r   r   test_roundtrip_simple   s    z)TestPandasContainer.test_roundtrip_simplec                 C   s0   |j |d}t||||d}|}t||| d S rg   ri   )r0   r   rf   r)   	int_framerU   r   r   r   r   r   test_roundtrip_intframe   s    z+TestPandasContainer.test_roundtrip_intframeNZU3c                 C   s   t tddd tdD dd tdD |d}|j|d}t||||d	}| }|sf|tj}|r|d
kr|j	tj|_	|j
tj|_
n:|dkr|r|j	tj|_	n|r|dkr|j	tj|_	t||| d S )N)      c                 S   s   g | ]}t |qS r   str.0ir   r   r   
<listcomp>   s     z?TestPandasContainer.test_roundtrip_str_axes.<locals>.<listcomp>rn   c                 S   s   g | ]}t |qS r   ro   rq   r   r   r   rt      s     rm   )r   r,   r)   r@   rh   r?   r   rF   )r   r/   zerosr   rB   r   rC   astyper'   r   r,   r   )r0   r   rf   r)   r9   rU   r   r   r   r   r   test_roundtrip_str_axes   s&    z+TestPandasContainer.test_roundtrip_str_axesc                 C   sn   |dkr&|j tjjd| dd |j|d}t|||d}| }|j	t
|_d |j_t||| d S )Nr?   z.Can't have duplicate index values for orient 'z')reasonr@   r   rf   )node
add_markerrO   markxfailrB   r   rC   r,   rv   rp   r&   r   )r0   requestr   r2   rf   rU   r   r   r   r   r   test_roundtrip_categorical   s    
z.TestPandasContainer.test_roundtrip_categoricalc                 C   st   t  }|j|d}t|||d}|dkrLtjg |r6tntd}t ||d}n|dkr\t  }n| }t	|| d S )Nr@   rz   rF   r(   r?   )
r   rB   r   r+   IndexfloatobjectrC   r   r   )r0   r   rf   Zempty_framerU   r   idxr   r   r   r   test_roundtrip_empty   s    z(TestPandasContainer.test_roundtrip_emptyc                 C   s`   |j |d}t|||d}| }|sP|jtjd }|dkrJ|t}||_t	||| d S )Nr@   rz   r]   rF   )
rB   r   rC   r,   r_   r/   r'   rv   rp   r   )r0   r   rf   r:   rU   r   r   r   r   r   r   test_roundtrip_timestamp   s    
z,TestPandasContainer.test_roundtrip_timestampc           	      C   s   t dddddg}dddd	d
gdddddgdddddgdddddgd}t||d}|j|d}t|||d}| }|jf |dt	j
}t||| d S )Nr;   r<   r=   r>   eg              ?       @      @      @Zfoo1Zfoo2Zfoo3Zfoo4Zfoo5TF)ABCD)rU   r,   r@   rz   number)r+   r   r   rB   r   rC   ZassignZselect_dtypesrv   r/   r'   r   )	r0   r   rf   r,   r   r9   rU   r   r   r   r   r   test_roundtrip_mixed   s    z(TestPandasContainer.test_roundtrip_mixedz9#50456 Column multiindex is stored and loaded differently)ry   rP   Z2022ZJANZFEBZ2023c                 C   sD   t ddgddggtj|d}t|jdddd}t|| d S )NrG   rZ   rX   rn   r   rF   r@   )r   r+   Z
MultiIndexZfrom_arraysr   rB   r   r   )r0   r   r9   r   r   r   r   test_roundtrip_multiindex  s    
z-TestPandasContainer.test_roundtrip_multiindexzdata,msg,orient)z{"key":b:a:d}zExpected object or valuer   zO{"columns":["A","B"],"index":["2","3"],"data":[[1.0,"1"],[2.0,"2"],[null,"3"]]}|z;Length of values \(3\) does not match length of index \(2\))zW{"columns":["A","B","C"],"index":["1","2","3"],"data":[[1.0,"1"],[2.0,"2"],[null,"3"]]}z+3 columns passed, passed data had 2 columnsrF   )zN{"badkey":["A","B"],"index":["2","3"],"data":[[1.0,"1"],[2.0,"2"],[null,"3"]]}zunexpected key\(s\): badkeyrF   c              	   C   s.   t jt|d tt||d W 5 Q R X d S )NrL   r@   )rO   rP   rQ   r   r   )r0   rU   rS   r   r   r   r   $test_frame_from_json_bad_data_raises  s    #z8TestPandasContainer.test_frame_from_json_bad_data_raisesc                 C   s   t ddgdddgg}t|j|d|||d}t|jd sBtt d	d
gdddgg}t|j|d|||d}t|jd std S )NrG   rZ   rn   r      r@   rh   r   rZ   12456)r   r   rB   r/   isnanr^   rc   )r0   r   rf   r)   Znum_dfr   Zobj_dfr   r   r   !test_frame_from_json_missing_dataA  s     

z5TestPandasContainer.test_frame_from_json_missing_datac                 C   s(   t d|d}ttjg}t|| d S )Nz[null]r(   )r   r   r/   nanr   r   )r0   r)   r   r   r   r   r   (test_frame_read_json_dtype_missing_valueV  s    z<TestPandasContainer.test_frame_read_json_dtype_missing_valueinfc                 C   sH   t ddgdddgg}||jd< t| |d}t|jd sDtd S )NrG   rZ   rn   r   r   r   r(   )r   locr   rB   r/   r   r^   rc   )r0   r   r)   r9   r   r   r   r   test_frame_infinity_  s    
z'TestPandasContainer.test_frame_infinityz$not compliant on 32-bit, xref #15865rx   zvalue,precision,expected_val)gffffff?rG   r   )g333333?rG   r   )g333333rG   g       )gףp=
?rZ   r   )gCl?rX   r   )g?r#   r   c                 C   s2   t d|ig}|j|d}|d| dks.td S )NZa_float)Zdouble_precisionz{"a_float":{"0":}}r   rB   rc   )r0   valueZ	precisionZexpected_valr9   encodedr   r   r   "test_frame_to_json_float_precisioni  s    z6TestPandasContainer.test_frame_to_json_float_precisionc              	   C   s<   t dddg}d}tjt|d |jdd W 5 Q R X d S NrG   rZ   rX   z+Invalid value 'garbage' for option 'orient'rL   garbager@   rN   )r0   r9   rS   r   r   r   test_frame_to_json_exceptz  s    z-TestPandasContainer.test_frame_to_json_exceptc                 C   sf   t ddgd}|jrttjt| t|jd|dd t dg ig djd	d
}d}||ksbtd S )Njimjoer   r(   Fcheck_index_typetestr,   r   r@   z{"test":{}})	r   _is_mixed_typerc   r   r   r   rB   dictdtypesr0   r9   r   r   r   r   r   test_frame_empty  s    
  z$TestPandasContainer.test_frame_emptyc                 C   sP   t ddgd}|d d|d< |js*ttjt| t|j	d|dd d S )Nr   r   r   i8r(   Fr   )
r   rv   r   rc   r   r   r   rB   r   r   r8   r   r   r   test_frame_empty_mixedtype  s    
  z.TestPandasContainer.test_frame_empty_mixedtypec                 C   s  dddddgdddd	d
gdddddgdddddgg}t |tddddddgd}|jsZt| }dD ]*}|j|d}t||dd}t|| qft	
t||_|jd d}t|d dd}t|| t	
|jd |_|jd!d}t|d!dd}t|| d S )"N
   rG   r"   皙?g{Gz?   rZ   r    g?g{Gz?   rX   r!   g333333?gQ?(   rn   quxg?g{Gz?ZabcdZ1stZ2ndZ3rdZ4thZ5thr?   )rF   r,   r   r@   Frz   r   r   )r   r-   r   rc   rC   rB   r   r   r   r+   Z
RangeIndexr   r,   shaper   )r0   valsr9   rightr   inpleftr   r   r   test_frame_mixedtype_orient  s0      
z/TestPandasContainer.test_frame_mixedtype_orientc           
   	   C   s  t dd}tt|d d}tddddgdd	d
dgddddgddddgddddggddddg|d}td|d< td|jd |j	df< |d |d!< t j
|jd"|j	d!f< |d#d$d%}tj|d&}t|}t|| |jd!gd"d'}tj|d(}t|}	t||	 d S ))Nz
2000-01-03z
2000-01-07freqgÉ?gz~Kc?gX7?gH/ƿg|RпgXgsBfg(ƿg<1=?g9?gg??gLł
gJQg[r?T?gj<DH>?g-ѿgIEx?gW!i`ygP04?g+]5?r   r   r   r   r   r,   z19920106 18:21:32.12daterY   rX   modifiedrG   iojsonrU   ztsframe_v012.json)Zaxisztsframe_iso_v012.json)r+   
date_ranger   r/   Zasarrayr   r
   r^   r   get_locNaTospathjoinr   r   r   r   )
r0   datapathdtir9   dirpathZv12_jsonZdf_unserZdf_isoZv12_iso_jsonZdf_unser_isor   r   r   test_v12_compat  s0    





z#TestPandasContainer.test_v12_compatc                 C   s   t jdddd}tt|d d}tdddd	d
dddddg
ddddddddddg
ddddddd d!d"d#g
d$d%d&d'd(d)d*d+d,d-g
d.d/d0d1d2d3d4d5d6d7g
d8d9d:d;d<d=d>d?d@dAg
dB|dC}|jdD|_t|jdEdFdEdF}t	j
||dGdGdGdGdH d S )INZ20000101r   H)periodsr   r   g}S? wgbm?gz(~J	?g1?gk*MgvTj?g7j	" Y?gp+KS(g񒬁?gZtSyiL,i_}i4ziKeiL&i%giDiY)L i;eiD Z78c608f1Z64a99743Z13d2ff52Zca7f4af2Z97236474Zbde7e214Z1a6bde47Zb1190be5Z7a669144Z8d64d068gD!gIxJ g%
@gP\<g޿gPl?gFzn?g5mH/?gpH%gI?Z14f04af9Zd085da90Z4bcfac83Z81504cafZ2ffef4a9Z08e2f5c4Z07e1af03Zaddbd4a7Z1f6a09baZ4bfc4d87i/iiYi6iI i;>i	i( i0q{iѪ)Zfloat_1Zint_1Zstr_1Zfloat_2Zstr_2Zint_2r   unicoderF   r@   T)r   Zcheck_column_typeZ	by_blocksZcheck_exact)r+   r   r   r-   r   r   rv   r   rB   r   r   )r0   r,   df_mixedZdf_roundtripr   r   r   test_blocks_compat_GH9037  s    JOz-TestPandasContainer.test_blocks_compat_GH9037c           
   	   C   s   G dd d}d}||}t d|jgi}| d| dksBtt d|gi}d}tjt|d |  W 5 Q R X t |gd	gd
ddgd}tjt|d |  W 5 Q R X |jtd}d| d}	||	kst|jtdd| dkstd S )Nc                   @   s(   e Zd ZddddZedddZdS )zFTestPandasContainer.test_frame_nonprintable_bytes.<locals>.BinaryThingNreturnc                 S   s   || _ t|| _d S r7   )hexedbytesfromhexbinary)r0   r   r   r   r   __init__4  s    zOTestPandasContainer.test_frame_nonprintable_bytes.<locals>.BinaryThing.__init__c                 S   s   | j S r7   )r   r0   r   r   r   __str__8  s    zNTestPandasContainer.test_frame_nonprintable_bytes.<locals>.BinaryThing.__str__)__name__
__module____qualname__r   rp   r   r   r   r   r   BinaryThing3  s   r   Z574b4454ba8c5eb4f98a8f45r   z{"A":{"0":""}}z6Unsupported UTF-8 sequence length when encoding stringrL   rG   r   r   r   r   default_handlerz"},"B":{"0":1}})r   r   rB   rc   rO   rP   OverflowErrorrp   )
r0   r   r   ZbinthingZdf_printableZdf_nonprintablerS   r   r   r   r   r   r   test_frame_nonprintable_bytes0  s&    

z1TestPandasContainer.test_frame_nonprintable_bytesc                 C   s<   t dd dgddgi }ddd  d}||ks8td S )Nr    i rG   r"   i9  {"z":{"0":1},"foo":{"0":1337}}r   r0   r   r   r   r   r   test_label_overflowV  s    z'TestPandasContainer.test_label_overflowc              	   C   s   t ddgddgd}d}tjt|d |jdd W 5 Q R X t|t|jd	dd	d
d t|jdddd
d}t|j	|j	 d S )Nr;   r<   rG   r   z.Series index must be unique for orient='index'rL   r,   r@   rF   series)r   typr   )
r	   rO   rP   rQ   rB   r   assert_series_equalr   Zassert_numpy_array_equalr   )r0   srS   Zunserializedr   r   r   test_series_non_unique_index\  s     
  z0TestPandasContainer.test_series_non_unique_indexc                 C   s   |  |j ddkstd S Nr,   r@   rb   )r0   string_seriesr   r   r   test_series_default_orientk  s    z.TestPandasContainer.test_series_default_orientc                 C   sP   |j |d}t|d|d}|}|dkr2|jdd}|dkr@d |_t|| d S Nr@   r   r   r   r   r   Tr   rF   rB   r   r   r&   r   r   )r0   r   r   rU   r   r   r   r   r   test_series_roundtrip_simplen  s    z0TestPandasContainer.test_series_roundtrip_simplec                 C   sR   |j |d}t|d||d}|}|dkr4|jdd}|dkrBd |_t|| d S )Nr@   r   )r   r   r)   r   Tr   rF   r   )r0   r   r)   Zobject_seriesrU   r   r   r   r   r   test_series_roundtrip_objectz  s    z0TestPandasContainer.test_series_roundtrip_objectc                 C   s^   t g g tjd}|j|d}t|d|d}|jdd}|dkrN|jtj|_t	|| d S )Nr,   r)   r@   r   r   Tr   rF   )
r	   r/   float64rB   r   r   r,   rv   r   r   )r0   r   Zempty_seriesrU   r   r   r   r   r   test_series_roundtrip_empty  s    z/TestPandasContainer.test_series_roundtrip_emptyc                 C   sP   |j |d}t|d|d}|}|dkr2|jdd}|dkr@d |_t|| d S r   r   )r0   r   r6   rU   r   r   r   r   r    test_series_roundtrip_timeseries  s    z4TestPandasContainer.test_series_roundtrip_timeseriesc                 C   sb   t tdddddddgd}|j|d	}t|d
|d}| }|dkrR|jdd}t|| d S )Nr   r;   r<   r=   r>   r   fr   r@   r   r   r   Tr   )r	   r   rB   r   rC   r   r   r   )r0   r   r)   r   rU   r   r   r   r   r   test_series_roundtrip_numeric  s    z1TestPandasContainer.test_series_roundtrip_numericc              	   C   s<   t dddg}d}tjt|d |jdd W 5 Q R X d S r   )r	   rO   rP   rQ   rB   )r0   r   rS   r   r   r   test_series_to_json_except  s    z.TestPandasContainer.test_series_to_json_exceptc                 C   s4   t dddg}t| ddd}tj||dd d S )N=
ףp=@r   T)r   precise_floatFr   )r	   r   rB   r   r   r0   r   r   r   r   r   #test_series_from_json_precise_float  s    z7TestPandasContainer.test_series_from_json_precise_floatc                 C   s@   t dddg}t| dtjd}t dgd }t|| d S )Nr  r   r   r)   rn   rX   )r	   r   rB   r/   r'   r   r   )r0   r   r   r   r   r   r   test_series_with_dtype  s    z*TestPandasContainer.test_series_with_dtypezdtype,expected
2000-01-01r\   r(   l    ,Uqc                 C   s4   t dgdd}| }t|d|d}t|| d S )Nr  r\   r(   r   r
  )r	   rB   r   r   r   )r0   r)   r   r   rU   r   r   r   r   test_series_with_dtype_datetime  s    z3TestPandasContainer.test_series_with_dtype_datetimec                 C   s8   t dddgdddgg}t| dd}t|| d S )Nr  T)r  r   r   rB   r   r   r0   r9   r   r   r   r   "test_frame_from_json_precise_float  s    z6TestPandasContainer.test_frame_from_json_precise_floatc                 C   s>   t tdddddddgdd	}t| d d
}t|| d S )Nr   r;   r<   r=   r>   r   r  r'   r   r   )r	   r   r   rB   r   r   r  r   r   r   test_typ  s    zTestPandasContainer.test_typc                 C   sp   t dddgdddgg}t| }t|| t dddgdddgddd	d
gd}t| }t|| d S )NrG   rZ   rX   rn   r   r   r;   r<   r   r   r   r   r  r  r   r   r   test_reconstruction_index  s    $z-TestPandasContainer.test_reconstruction_indexc              	   C   s<   t d(}|||fD ]}|| t| qW 5 Q R X d S )N	test.json)r   ensure_cleanrB   r   )r0   rd   rk   r:   r   r9   r   r   r   	test_path  s    
zTestPandasContainer.test_pathc                 C   sR   |  }t|}t|| |  }t|dd}tj||dd |jd ksNtd S )Nr   r  F)Zcheck_names)rB   r   r   r   r   r&   rc   )r0   r6   r:   r   r   r   r   r   test_axis_dates  s    z#TestPandasContainer.test_axis_datesc                 C   s   |}t d|d< | }t|}t|| d|d< |jdd}t|dd}| }|d jd	|d< |d d
|d< t|| t	t d|j
d}| }t|dd}t|| d S )NrY   r   r   r"   ns	date_unitFr[   r   r'   r   r   r  )r
   rB   r   r   r   rC   r   r_   rv   r	   r,   r   )r0   r6   r:   r9   r   r   r   r3   r   r   r   test_convert_dates  s     z&TestPandasContainer.test_convert_datesdate_formatepochiso	as_objectdate_typc                 C   sl   |ddddt jg}|r"|d t||d}|j|d}|dkrHd}nd	}|r\|d
d}||kshtd S )Ni  rG   )yearmonthdayr;   r   r  r  z+{"1577836800000":1577836800000,"null":null}zA{"2020-01-01T00:00:00.000":"2020-01-01T00:00:00.000","null":null}}	,"a":"a"})r+   r   appendr	   rB   replacerc   )r0   r  r!  r"  rU   r5   r   r   r   r   r   test_date_index_and_values  s    
z.TestPandasContainer.test_date_index_and_values
infer_wordZ
trade_timer   datetimeZsold_atr   	timestampZ
timestampsc                 C   sf   ddl m} dd|diddig}tdtdgdtjggd|gd}t||d|g }t|| d S )	Nr   dumpsidrG   l    $ArZ   z
2002-11-08r   )	pandas.io.jsonr0  r   r
   r+   r   r   r   r   )r0   r,  r0  rU   r   r   r   r   r   test_convert_dates_infer  s     z,TestPandasContainer.test_convert_dates_inferzdate,date_unit)20130101 20:43:42.123N)20130101 20:43:42r   )r4  ms)z20130101 20:43:42.123456us)z20130101 20:43:42.123456789r  c                 C   s   |}t ||d< tj|jd|jdf< tj|jd|jdf< |rT|jd|d}n|jdd}t|}| }t	
|| d S )Nr   rG   r   r   r  r  r&  )r
   r+   r   r^   r   r   rB   r   rC   r   r   )r0   r   r  r:   r9   r   r   r   r   r   r   test_date_format_frame5  s    z*TestPandasContainer.test_date_format_framec              	   C   s4   |}d}t jt|d |jddd W 5 Q R X d S )N*Invalid value 'foo' for option 'date_unit'rL   r   r"   r8  )rO   rP   rQ   rB   )r0   r:   r9   rS   r   r   r   test_date_format_frame_raisesM  s    z1TestPandasContainer.test_date_format_frame_raisesc                 C   sn   t t||jd}tj|jd< tj|jd< |r>|jd|d}n|jdd}t|dd}| }t	
|| d S )	Nr   rG   r   r   r8  r&  r   r  )r	   r
   r,   r+   r   r^   rB   r   rC   r   r   )r0   r   r  r6   r3   r   r   r   r   r   r   test_date_format_seriesS  s    z+TestPandasContainer.test_date_format_seriesc              	   C   sB   t td|jd}d}tjt|d |jddd W 5 Q R X d S )Nr4  r   r:  rL   r   r"   r8  )r	   r
   r,   rO   rP   rQ   rB   )r0   r6   r3   rS   r   r   r   test_date_format_series_raisesi  s    z2TestPandasContainer.test_date_format_series_raisesunitr   r6  r7  r  c                 C   s   |}t d|d< |jd}t d|jd|f< t d|jd|f< tj|jd|f< |jd|d	}t||d
}t	|| t|d d
}t	|| d S )Nr5  r   z19710101 20:43:42rG   z21460101 20:43:42rZ   rn   r  r8  r  )
r
   r   r   r^   r+   r   rB   r   r   r   )r0   r>  r:   r9   dlr   r   r   r   r   test_date_unito  s    z"TestPandasContainer.test_date_unitc                 C   s   d}t | d S )Nad  {
        "status": "success",
        "data": {
        "posts": [
            {
            "id": 1,
            "title": "A blog post",
            "body": "Some useful content"
            },
            {
            "id": 2,
            "title": "Another blog post",
            "body": "More content"
            }
           ]
          }
        })r   )r0   r   r   r   r   test_weird_nested_json  s    z*TestPandasContainer.test_weird_nested_jsonc                 C   sx   t tjddtdd}td|d< td|d< d|d	< tjddd
|_	|
 }t|tjtjdd}t|| d S )Nr   rZ   ZABr   rY   r   intsTboolsr   )rB  rC  r(   )r   r/   randomrandnr-   r
   r   r+   r   r,   rB   r   r'   Zbool_r   r   )r0   Zdfj2r   r   r   r   r   test_doc_example  s    z$TestPandasContainer.test_doc_examplec                 C   sF   |dddd}t |}| }t|}t|j|j|jd| d S )Nr   r   rU   z	teams.csvr?   )	r+   Zread_csvrB   r   r   r   Zreindexr,   r   )r0   r   r   r9   r   r   r   r   r   test_round_trip_exception_  s
    
z.TestPandasContainer.test_round_trip_exception_@https://api.github.com/repos/pandas-dev/pandas/issues?per_page=5)urlZcheck_before_testzfield,dtypeZ
created_atUTCtzZ	closed_atZ
updated_atc                 C   s&   d}t |dd}|| j|ks"td S )NrI  Tr  )r   r)   rc   )r0   fieldr)   rJ  r   r   r   r   test_url  s    zTestPandasContainer.test_urlc                 C   s   dd }t tdtddg}|jdks,tt| dd|}t|| t tdtddgt	
d	d
gd}|jdkstt| dd|}t|| ttdtddg}|d	 jdkstt|t| | d S )Nc                 S   s   t j| ddS )Nr6  r>  )r+   to_timedelta)rH   r   r   r   <lambda>      z4TestPandasContainer.test_timedelta.<locals>.<lambda>   r   secondsztimedelta64[ns]r   r  r   rG   r   )r	   r   r)   rc   r   rB   applyr   r   r+   r   r   r   )r0   	converterr5   r   framer   r   r   test_timedelta  s    $z"TestPandasContainer.test_timedeltac                 C   sr   t tddtddgddgtjdddd	}t|jd
d}tj|jd
d|d< t|j	|d< t
|| d S )NrT  daysr   rU  rG   rZ   rY   )startr   r;   r<   r=   r  r  rP  r;   r=   )r   r   r+   r   r   rB   rQ  r;   Zto_datetimer=   r   r   )r0   rY  r   r   r   r   test_timedelta2  s    z#TestPandasContainer.test_timedelta2c                 C   sv   t d}td}td||gitd}tdt|dj|djgi}t|j	ddddid}t
j||dd	 d S )
NrT  rY   r;   r(   r  r  r'   Fr   )r   r
   r   r   r+   	TimedeltaZas_unit_valuer   rB   r   r   )r0   tdr3   rY  r   r   r   r   r   test_mixed_timedelta_datetime  s     z1TestPandasContainer.test_mixed_timedelta_datetimetimedelta_typc                 C   sp   |dd|ddt jg}|r&|d t||d}|dkr@d}nd}|rT|d	d
}|j|d}||ksltd S )NrG   r[  rZ   r;   r   r   zA{"P1DT0H0M0S":"P1DT0H0M0S","P2DT0H0M0S":"P2DT0H0M0S","null":null}z7{"86400000":86400000,"172800000":172800000,"null":null}r'  r(  r&  )r+   r   r)  r	   r*  rB   rc   )r0   r!  r  rd  rU   r5   r   r   r   r   r   test_timedelta_to_json  s    
z*TestPandasContainer.test_timedelta_to_jsonc                 C   sN   t  }tdd|gi}tddt|gi}t|jtd}tj||dd d S )Nr;      r   Fr   )r   r   rp   r   rB   r   r   )r0   r   rY  r   r   r   r   r   test_default_handler  s
    z(TestPandasContainer.test_default_handlerc                 C   sb   ddl m} dd }dtddtdd	gtd
d dgdddgdg}d}|||dd|ks^td S )Nr   r/  c                 S   s(   t | tr dd| jfd| jfgS t| S )N)ZmathjsComplexreZim)
isinstancecomplexrealimagrp   objr   r   r   default	  s    
zBTestPandasContainer.test_default_handler_indirect.<locals>.default	   rG   ZSTRrn   r   zN/Ar  r;   r<   r   zR[9,[[1,null],["STR",null],[[["mathjs","Complex"],["re",4.0],["im",-5.0]],"N\/A"]]]r   r   r   )r2  r0  r   rk  r   rc   )r0   r0  rp  Zdf_listr   r   r   r   test_default_handler_indirect  s    z1TestPandasContainer.test_default_handler_indirectc                 C   sP   t ddtddgtdd tddgdd	d
gd}d}|jtdd|ksLtd S )NrG   gffffff@rn   rr  r   g333333?r   r  r;   r<   r   zE[["(1+0j)","(nan+0j)"],["(2.3+0j)","(nan+0j)"],["(4-5j)","(1.2+0j)"]]r   rs  )r   rk  r   rB   rp   rc   )r0   r9   r   r   r   r   ,test_default_handler_numpy_unsupported_dtype  s    $z@TestPandasContainer.test_default_handler_numpy_unsupported_dtypec              	      s   d  fdd}t jt d" tdddt gij|d W 5 Q R X t jt d& tdddtd	d
gij|d W 5 Q R X d S )NZraisinc                    s   t  d S r7   )	TypeErrorrn  rS   r   r   my_handler_raises+  s    zJTestPandasContainer.test_default_handler_raises.<locals>.my_handler_raisesrL   r;   rG   rZ   r   rn   rr  )rO   rP   rv  r   r   rB   rk  )r0   rx  r   rw  r   test_default_handler_raises(  s    z/TestPandasContainer.test_default_handler_raisesc              	   C   sx   t ddddddddgi}|d |d< | }|d d|d< || ksPt|d }|d }| | ksttd S )Nr   r;   r<   r=   r   category)r   rB   rv   rc   )r0   r9   r   r   Zscr   r   r   test_categorical7  s    z$TestPandasContainer.test_categoricalc                 C   s   t jdddd}|dd }t|t jdddd}| }||d< | }|| ks`tt|}t|}| | kstd S )	NrY   rX   
US/Easternr   rM  utcrD  r   r   )	r+   r   Z
tz_convertZtz_localizer   rC   rB   rc   r	   )r0   tz_rangeZtz_naiver9   Zdf_naiver   ZstzZs_naiver   r   r   test_datetime_tzD  s    z$TestPandasContainer.test_datetime_tzc                 C   s   t tjdd}tj|jd d< |d}| }|| ksDtt	tjd}tj|jd d< |d}| }|| kstd S )Nr   rn      ZSparse)
r   r/   rE  rF  r   r   rv   rB   rc   r	   )r0   r9   Zsdfr   r   ssr   r   r   test_sparseT  s    

zTestPandasContainer.test_sparser3   z2013-01-10 05:00:00Zz2013-01-10 00:00:00r|  z2013-01-10 00:00:00-0500c                 C   sD   ddl m} d}||dd|ks$t| }||dd|ks@td S )Nr   r/  z"2013-01-10T05:00:00.000Z"TZ	iso_dates)r2  r0  rc   to_pydatetime)r0   r3   r0  expdtr   r   r   test_tz_is_utcd  s
    	z"TestPandasContainer.test_tz_is_utcc                 C   sL   ddl m} td}d}||dd|ks,t| }||dd|ksHtd S )Nr   r/  z2013-01-10 05:00:00z"2013-01-10T05:00:00.000"Tr  )r2  r0  r
   rc   r  )r0   r0  r3   r  r  r   r   r   test_tz_is_naiveu  s    z$TestPandasContainer.test_tz_is_naiver  z2013-01-01 05:00:00ZrZ   rD  z2013-01-01 00:00:00r}  z2013-01-01 00:00:00-0500c                 C   s   ddl m} d}d}||dd|ks(tt|}||dd|ksDt||tdd|ks^ttd|i}||dd}||kst||dtiddstd S )Nr   r/  z7["2013-01-01T05:00:00.000Z","2013-01-02T05:00:00.000Z"]zF{"DT":{"0":"2013-01-01T05:00:00.000Z","1":"2013-01-02T05:00:00.000Z"}}Tr  DT)r2  r0  rc   r   rv   r   r   )r0   r  r0  r  dfexpr   r9   r   r   r   r   test_tz_range_is_utc  s    	z(TestPandasContainer.test_tz_range_is_utcc                 C   s   ddl m} tjddd}d}d}||dd	|ks6t||tdd	|ksPttd
|i}||dd	}||kstt||d
tidd	std S )Nr   r/  z2013-01-01 05:00:00rZ   rD  z5["2013-01-01T05:00:00.000","2013-01-02T05:00:00.000"]zD{"DT":{"0":"2013-01-01T05:00:00.000","1":"2013-01-02T05:00:00.000"}}Tr  r  )r2  r0  r+   r   rc   rv   r   r   )r0   r0  r   r  r  r9   r   r   r   r   test_tz_range_is_naive  s    z*TestPandasContainer.test_tz_range_is_naivec                 C   s8   t ddd}tddgddggddgd}t|| d S )	N!{"a": 1, "b": 2}
{"b":2, "a" :1}
TlinesrG   rZ   r;   r<   r   r   r   r   r   r   r   r   r   test_read_inline_jsonl  s    z*TestPandasContainer.test_read_inline_jsonlc                 C   s:   t dd|d}tddgddggddgd}t|| d S )	Nzs3n://pandas-test/items.jsonlT)r  storage_optionsrG   rZ   r;   r<   r   r  )r0   s3_resources3sor   r   r   r   r   test_read_s3_jsonl  s      z&TestPandasContainer.test_read_s3_jsonlc              
   C   sn   t dZ}t|d}|d W 5 Q R X t|dd}tddgddggdd	gd
}t || W 5 Q R X d S )Nztmp_items.jsonwr  Tr  rG   rZ   r;   r<   r   )r   r  openwriter   r   r   )r0   r   infiler   r   r   r   r   test_read_local_jsonl  s    z)TestPandasContainer.test_read_local_jsonlc                 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"}
Tr  u   foo”r    r"   r;   r<   r   )r   r   r   r   r   r0   r   r   r   r   r   r   test_read_jsonl_unicode_chars  s    z1TestPandasContainer.test_read_jsonl_unicode_charsbigNumc                 C   sp   t |tdgd}| }dt| d }||ks4tt|tdgdgd}| }dt| d }||ksltd S )	N	articleId)r)   r,   {"articleId":r'  r   )r)   r,   r   {"0":{"articleId":r   )r	   r   rB   rp   rc   r   )r0   r  r   r   r   r9   r   r   r   test_to_json_large_numbers  s    z.TestPandasContainer.test_to_json_large_numbersl        l            c              	   C   st   t dt| d }d}tjt|d t| W 5 Q R X t dt| d }tjt|d t| W 5 Q R X d S )Nr  r'  z#Value is too small|Value is too bigrL   r  r   )r   rp   rO   rP   rQ   r   )r0   r  r   rS   r   r   r   test_read_json_large_numbers  s    z0TestPandasContainer.test_read_json_large_numbersc                 C   sh   d}t |}t|dd}tddgd}t|| d}t |}t|}tddgdgd	}t|| d S )
Nz'{"articleId": "1404366058080022500245"}r   r  gg_SDr  r   z.{"0": {"articleId": "1404366058080022500245"}}r   r?   )r   r   r	   r   r   r   r   r  r   r   r   test_read_json_large_numbers2  s    z1TestPandasContainer.test_read_json_large_numbers2c                 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 )NrG   rZ   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\z4{"a\\":"foo\\","b":"bar"}
{"a\\":"foo\"","b":"bar"}
)r   rB   rc   r   r   r   r   r   r   r   test_to_jsonl  s    z!TestPandasContainer.test_to_jsonlz%GH#13774 encoding kwarg not supportedc                 C   s   dddddgddddgdddddgdddddgddddgddddgdddddgt jdddgdt jdddgg	}d	d
 |D }g }dtfD ] }|D ]}|t||d qqddd}|D ]}|| qd S )Ns   E, 17rS     a   b   cs   EE, 17s   s   Ac                 S   s   g | ]}d d |D qS )c                 S   s$   g | ]}t |tr|d n|qS )latin-1)rj  r   decode)rr   rH   r   r   r   rt   $  s     zFTestPandasContainer.test_latin_encoding.<locals>.<listcomp>.<listcomp>r   )rr   rI   r   r   r   rt   #  s   z;TestPandasContainer.test_latin_encoding.<locals>.<listcomp>rz  r(   r  c              	   S   sD   t d0}| j||d t||d}t j| |dd W 5 Q R X d S )Nr  )encodingF)Zcheck_categorical)r   r  rB   r   r   )r   r  r   Zretrr   r   r   	roundtrip-  s    z:TestPandasContainer.test_latin_encoding.<locals>.roundtrip)r  )r/   r   r   r)  r	   )r0   r   Zexamplesr)   valr  r   r   r   r   test_latin_encoding  s(    



z'TestPandasContainer.test_latin_encodingc                 C   sN   t dtdgi}|jddd }|  |jddd }||ksJtd S )Nr;   rG   T)r,   deep)r   rp   Zmemory_usagesumrB   rc   )r0   r9   Zsize_beforeZ
size_afterr   r   r   "test_data_frame_size_after_to_json6  s
    z6TestPandasContainer.test_data_frame_size_after_to_jsonr   r   r   r   1.2.c                 C   sB   t ddgddgg||d}|jdd}t|dd}t|| d S )NrG   rZ   rX   rn   r?   tabler@   r   rB   r   r   r   )r0   r,   r   r   dfjsonr   r   r   r   .test_from_json_to_json_table_index_and_columns@  s    zBTestPandasContainer.test_from_json_to_json_table_index_and_columnsc                 C   sD   t ddgddgddgd}|jdd	}t|dd	}t|| d S )
NrG   rZ   r   r   r   r   r^  r  r@   r  )r0   r   r  r   r   r   r   #test_from_json_to_json_table_dtypesK  s    z7TestPandasContainer.test_from_json_to_json_table_dtypesc                 C   s   t tdddgddtd ddgddtd d	d
gddtdddgddtddd gddtdd dgddd}|j|d}t||dddddddd}t|| d S )NrG   rZ   rX   r'   r(   r   r   r    r=   r   TFboolr;   r<   rz  z
2020-01-01z
2020-01-03r\   )ZIntegerZFloatZObjectZBoolZCategoryZDatetimer@   r   r)   )r   	from_dictr	   rB   r   r   r   )r0   r   r   r  r   r   r   r   %test_to_json_from_json_columns_dtypesR  s2     z9TestPandasContainer.test_to_json_from_json_columns_dtypes)r<   r=   c              	   C   sX   t ddgddgddgd}|jdd	}d
}tjt|d t|d|d W 5 Q R X d S )NrG   rZ   r   r   r   r   r^  r  r@   z)cannot pass both dtype and orient='table'rL   r  r   rB   rO   rP   rQ   r   )r0   r)   r9   r  rS   r   r   r   !test_read_json_table_dtype_raisesp  s
    z5TestPandasContainer.test_read_json_table_dtype_raisesc              	   C   s^   t ddgddggddgddgd	}|jd
d}d}tjt|d t|d
dd W 5 Q R X d S )NrG   rZ   rX   rn   r   r   r  r  r?   r  r@   z0cannot pass both convert_axes and orient='table'rL   Trz   r  )r0   r9   r  rS   r   r   r   (test_read_json_table_convert_axes_raisesy  s
    "z<TestPandasContainer.test_read_json_table_convert_axes_raiseszdata, expectedrn   r   r   )r   rU   r"   r   r   r%   )r&   rU   )r&   r,   c                 C   s(   |j ddd}t|}||ks$td S )NrF   Fr   r,   )rB   r   loadsrc   r0   rU   r   r   r   r   r   test_index_false_to_json_split  s     
z2TestPandasContainer.test_index_false_to_json_splitc                 C   sL   |j ddd}t|}tjjj|ddt|jddd}||ksHtd S )Nr  Fr  r   r   r@   )ZschemarU   )	rB   r   r  r+   r   Zbuild_table_schemar   Zto_dictrc   r0   rU   r   r   r   r   r   test_index_false_to_json_table  s    
z2TestPandasContainer.test_index_false_to_json_tablec              	   C   sL   t ddgddggddgd}d}tjt|d	 |j|d
d W 5 Q R X d S )NrG   rZ   rn   r   r;   r<   r   z?'index=False' is only valid when 'orient' is 'split' or 'table'rL   Fr  rN   rR   r   r   r   test_index_false_error_to_json  s    z2TestPandasContainer.test_index_false_error_to_jsonr  c                 C   s@   t ddgddgd}|j||d}t||d}t|| d S )NrG   rZ   rX   rn   r  r  r@   r  )r0   r   r,   r   r  r   r   r   r   "test_index_false_from_json_to_json  s    z6TestPandasContainer.test_index_false_from_json_to_jsonc                 C   s6   t dddd}tdgtdgddd	}t|| d S )
Nz{"2019-01-01T11:00:00.000Z":88}r   r,   r   X   z2019-01-01 11:00:00rK  rL  r   )r   r	   r   r   r   r   r   r   r   test_read_timezone_information  s      z2TestPandasContainer.test_read_timezone_informationrJ  zs3://example-fsspec/zgcs://another-fsspec/file.jsonzhttps://example-site.com/datazsome-protocol://data.txtc                 C   s.   t d| d}td|gi}t|| d S )Nz{"url":{"0":"r   rJ  r  )r0   rJ  r   r   r   r   r   test_read_json_with_url_value  s    z1TestPandasContainer.test_read_json_with_url_valuecompressionr  z.gzz.bz2z.tarc              	   C   s<   d d| }t jtd| dd t| W 5 Q R X d S )NA  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz.jsonzFile z does not existrL   )rO   rP   FileNotFoundErrorr   )r0   r  Zlong_json_pathr   r   r   'test_read_json_with_very_long_file_path  s     
z;TestPandasContainer.test_read_json_with_very_long_file_pathzdate_format,key)r  i \&)r   Z
P1DT0H0M0Sc                 C   s@   t dggtdgd}d| d}|j|d}||ks<td S )NrG   Z1Dr   r   z
":{"0":1}}r&  )r   r+   r`  rB   rc   )r0   r  keyr9   r   r   r   r   r   test_timedelta_as_label  s    z+TestPandasContainer.test_timedelta_as_labelzorient,expected)r,   z{"('a', 'b')":{"('c', 'd')":1}})r   z{"('c', 'd')":{"('a', 'b')":1}}z,Produces JSON but not in a consistent manner)Zmarksc                 C   s2   t dggdgdgd}|j|d}||ks.td S )NrG   r  )r=   r>   r?   r@   r   r0   r   r   r9   r   r   r   r   test_tuple_labels  s    z%TestPandasContainer.test_tuple_labelsindentc                 C   s   t ddgddggddgd}|j|d}d	| }d
| d| | d| | d| d| d| | d| | d| d}||kstd S )Nr"   r    r!   r   r;   r<   r   r   z{
z"a":{
z"0":"foo",
z
"1":"baz"
z},
z"b":{
z"0":"bar",
z
"1":"qux"
z}
}r   )r0   r  r9   r   spacesr   r   r   r   test_to_json_indent#  s:    z'TestPandasContainer.test_to_json_indent)rF   z{
    "columns":[
        "a",
        "b"
    ],
    "index":[
        0,
        1
    ],
    "data":[
        [
            "foo",
            "bar"
        ],
        [
            "baz",
            "qux"
        ]
    ]
})r   zf[
    {
        "a":"foo",
        "b":"bar"
    },
    {
        "a":"baz",
        "b":"qux"
    }
])r,   zn{
    "0":{
        "a":"foo",
        "b":"bar"
    },
    "1":{
        "a":"baz",
        "b":"qux"
    }
})r   zn{
    "a":{
        "0":"foo",
        "1":"baz"
    },
    "b":{
        "0":"bar",
        "1":"qux"
    }
})r   zV[
    [
        "foo",
        "bar"
    ],
    [
        "baz",
        "qux"
    ]
])r  aa  {
    "schema":{
        "fields":[
            {
                "name":"index",
                "type":"integer"
            },
            {
                "name":"a",
                "type":"string"
            },
            {
                "name":"b",
                "type":"string"
            }
        ],
        "primaryKey":[
            "index"
        ],
        "pandas_version":"1.4.0"
    },
    "data":[
        {
            "index":0,
            "a":"foo",
            "b":"bar"
        },
        {
            "index":1,
            "a":"baz",
            "b":"qux"
        }
    ]
}c                 C   s:   t ddgddggddgd}|j|dd	}||ks6td S )
Nr"   r    r!   r   r;   r<   r   rn   )r   r  r   r  r   r   r   test_json_indent_all_orients7  s    wz0TestPandasContainer.test_json_indent_all_orientsc              	   C   s,   t jtdd t jdd W 5 Q R X d S )Nzmust be a nonnegative integerrL   r  )rO   rP   rQ   r   rB   r   r   r   r    test_json_negative_indent_raises  s    z4TestPandasContainer.test_json_negative_indent_raisesc                 C   s:   d}t |}tdtjdtjdtj dg}t|| d S )Nz?["a", NaN, "NaN", Infinity, "Infinity", -Infinity, "-Infinity"]r;   NaNInfinityz	-Infinity)r   r   r/   r   r   r   r   r  r   r   r   test_emca_262_nan_inf_support  s    z1TestPandasContainer.test_emca_262_nan_inf_supportc                 C   s>   t ddiddig}tdddgi}t|}t|| d S )NcolZ31900441201190696999Text)r   r0  r   r   r   r   )r0   Zencoded_jsonr   r   r   r   r   test_frame_int_overflow  s    z+TestPandasContainer.test_frame_int_overflowzdataframe,expectedrH   rI   zU{"(0, 'x')":1,"(0, 'y')":"a","(1, 'x')":2,"(1, 'y')":"b","(2, 'x')":3,"(2, 'y')":"c"}c                 C   s$   |  }|jdd}||ks td S r   )stackrB   rc   )r0   Z	dataframer   r   r   r   r   r   test_json_multiindex  s    z(TestPandasContainer.test_json_multiindexc                 C   s   d\}}t dddgdddgd}|jd| d	| |d
 d}|dd |dj D kr`qtd |d8 }|dks@tdq@d S )N)pandas-testr  rG   rZ   rX   rn   r   r  zs3:///)r  r   c                 s   s   | ]}|j V  qd S r7   )r  )rr   ro  r   r   r   	<genexpr>  s    z1TestPandasContainer.test_to_s3.<locals>.<genexpr>r  r   r   z,Timed out waiting for file to appear on moto)r   rB   ZBucketZobjectsalltimesleeprc   )r0   r  r  Zmock_bucket_nameZtarget_filer9   timeoutr   r   r   
test_to_s3  s    
zTestPandasContainer.test_to_s3c                 C   sD   t |tr$tjjdd}|j| t|gg }|dks@t	d S )Nznot implementedrx   z{"0":{"0":null}})
rj  r   rO   r}   r~   r{   r|   r   rB   rc   )r0   Znulls_fixturer   r}   r   r   r   r   test_json_pandas_nulls  s
    
z*TestPandasContainer.test_json_pandas_nullsc                 C   s*   t ddd}tdddg}t|| d S )Nz[true, true, false]r   r  TF)r   r	   r   r   r   r   r   r   test_readjson_bool_series  s    z-TestPandasContainer.test_readjson_bool_seriesc                 C   s:   t dtddddgd }| }d}||ks6td S )NTz
2017-01-20z
2017-01-23r"   r    r?   a  {"(Timestamp('2017-01-20 00:00:00'), 'foo')":true,"(Timestamp('2017-01-20 00:00:00'), 'bar')":true,"(Timestamp('2017-01-21 00:00:00'), 'foo')":true,"(Timestamp('2017-01-21 00:00:00'), 'bar')":true,"(Timestamp('2017-01-22 00:00:00'), 'foo')":true,"(Timestamp('2017-01-22 00:00:00'), 'bar')":true,"(Timestamp('2017-01-23 00:00:00'), 'foo')":true,"(Timestamp('2017-01-23 00:00:00'), 'bar')":true})r   r+   r   r  rB   rc   r   r   r   r   test_to_json_multiindex_escape  s    


z2TestPandasContainer.test_to_json_multiindex_escapec                 C   sJ   G dd d}t |dddddg}t| ddddd	iksFtd S )
Nc                   @   s"   e Zd ZddddZdd ZdS )zGTestPandasContainer.test_to_json_series_of_objects.<locals>._TestObjectNr   c                 S   s   || _ || _|| _|| _d S r7   r;   r<   _cr>   )r0   r;   r<   r  r>   r   r   r   r   
  s    zPTestPandasContainer.test_to_json_series_of_objects.<locals>._TestObject.__init__c                 S   s   dS )Nr   r   r   r   r   r   r     s    zITestPandasContainer.test_to_json_series_of_objects.<locals>._TestObject.e)r   r   r   r   r   r   r   r   r   _TestObject	  s   r  rG   rZ   rX   rn   r  0)r;   r<   r>   )r	   r   r  rB   rc   )r0   r  r   r   r   r   test_to_json_series_of_objects  s    z2TestPandasContainer.test_to_json_series_of_objectszdata,expectedy             @y              ?y      "@      )r   rG   rZ   zW{"0":{"imag":8.0,"real":-6.0},"1":{"imag":1.0,"real":0.0},"2":{"imag":-5.0,"real":9.0}}yHz"Q?y@p=
ף"@yQ@(\ſz]{"0":{"imag":0.66,"real":-9.39},"1":{"imag":9.32,"real":3.95},"2":{"imag":-0.17,"real":4.03}}y             @y              y      @      y              $z{"0":{"0":{"imag":3.0,"real":-2.0},"1":{"imag":-3.0,"real":4.0}},"1":{"0":{"imag":0.0,"real":-1.0},"1":{"imag":-10.0,"real":0.0}}}yQѿ(\?yHzG(\ؿy=
ףp=?(\տy(\迚z{"0":{"0":{"imag":0.34,"real":-0.28},"1":{"imag":-0.34,"real":0.41}},"1":{"0":{"imag":-0.39,"real":-1.08},"1":{"imag":-1.35,"real":-0.78}}}c                 C   s   |  }||kstd S r7   rb   r  r   r   r   test_complex_data_tojson  s    #z,TestPandasContainer.test_complex_data_tojsonc                 C   s2   d}t dddgid}|jdd}||ks.td S )NzY{"columns":["col1"],"index":[0,1],"data":[[13342205958987758245],[12388075603347835679]]}Zcol1l   :!c&HI l   v8$Z_
 )rU   rF   r@   r   )r0   r   r9   r   r   r   r   test_json_uint64=  s
    z$TestPandasContainer.test_json_uint64c           	         s  t dttdtjdgddtdddgddtdtjdgd	dtdd
dgd	dddd gdddgdddgddd gd}|dkrttjdddgtjd}ttjddt	gtjd}n(t
dddg}t
ddd g}|j|d}td| t|||d}W 5 Q R X ttdtjdgddtdddgddtdtjdgd	dtdd
dgd	dtddt	gddtdddgdd||d|dkrddlm  t fddjD |dkrttdd_t| d S )NpyarrowrG   rX   Int64r(   rZ   rV   rW   ZFloat64r   TFr;   r<   r=   )r;   r<   r=   r>   r   r  ghpythonr@   mode.string_storage)dtype_backendr   booleanr   ArrowExtensionArrayc                    s$   i | ]}| j | d dqS )TZfrom_pandas)array)rr   r  r  r   par   r   
<dictcomp>w  s    zDTestPandasContainer.test_read_json_dtype_backend.<locals>.<dictcomp>r   r  )rO   importorskipr   r	   r/   r   r   r  Zobject_r   r   rB   r+   option_contextr   pandas.arraysr  r   r-   r   r   r   )	r0   string_storager  r   r9   Zstring_arrayZstring_array_naoutr   r   r  r   test_read_json_dtype_backendG  sR    


z0TestPandasContainer.test_read_json_dtype_backendc           
   	   C   s   t d}tdtjdgdd}|j|d}td| t|||dd	}W 5 Q R X tdtjdgdd}|dkrd
dl	m
}	 t|	|j|dd}t|| d S )Nr  rG   rX   r  r(   r@   r  r   )r  r   r   r   r  Tr   )rO   r  r	   r/   r   rB   r+   r  r   r  r  r  r   r   )
r0   r  r  r   r  r5   r	  r   r   r  r   r   r   test_read_json_nullable_series  s    
   z2TestPandasContainer.test_read_json_nullable_seriesc              	   C   s.   d}t jt|d tddd W 5 Q R X d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rL   r   numpy)r  )rO   rP   rQ   r   )r0   rS   r   r   r   test_invalid_dtype_backend  s    z.TestPandasContainer.test_invalid_dtype_backend)r   r   r   rO   Zfixturer2   r6   r:   rE   r}   ZparametrizerJ   rT   r
   r`   ra   re   r   rj   r/   r'   rl   r   intrw   r   r   r   r   r~   rc   r   r   r   r   r   r   ZNINFr   Zskipifr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r	  r  r	   r  r  r  r  r  r  r  r-  r   r+  r3  r9  r;  r<  r=  r@  rA  rG  rH  networkr   r+   ZDatetimeTZDtyperO  rZ  r_  rc  r`  r   re  rg  rt  ru  ry  r{  r  r  r  r  r   r  r  r  Z
single_cpurb  Zskip_if_not_us_localer  r  r  sysmaxsizer  r  r  r  rv  r  r  r  r  r  r  r  r   Zrename_axisr  r  r  r  r  r  r  r  paramr  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r   r   r   r   r   (   s  




	





"

	`&











	

		
!
 .& (  ( 	 (   
	
 
u	
	!
 8r   c               	   C   s>   t td} |  }tjtdd t|dd W 5 Q R X d S )NrG   zThe engine type foorL   r"   )enginer	   r   rB   rO   rP   rQ   r   r5   r	  r   r   r   test_invalid_engine  s    r  c               	   C   s@   t td} |  }tjtdd t|ddd W 5 Q R X d S )NrG   z&currently pyarrow engine only supportsrL   r  F)r  r  r  r  r   r   r   test_pyarrow_engine_lines_false  s    r  )%r-  r   decimalr   r   r   r   r   r  r  r  r/   rO   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsrb  Zpandasr+   r   r   r   r	   r
   r   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   r   r   r  r  r   r   r   r   <module>   sD                   