o
    թZh1                    @   sN  d dl Z d dl mZ d dlmZ d dlmZ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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mZmZm Z  d dl!m"Z# d dl$m%Z%m&Z& d d	l'm(Z( d d
l)m*Z* dd Z+dd Z,G dd dZ-dd Z.dd Z/dd Z0dd Z1e2ddd Z3dd Z4dS )    N)	timedelta)Decimal)BytesIOStringIO)using_pyarrow_string_dtype)IS64)	NA	DataFrameDatetimeIndexIndex
RangeIndexSeries	Timestamp
date_range	read_json)ArrowStringArrayStringArray)ArrowStringArrayNumpySemantics)ujson_dumpsc               	   C   s  t ddgddggddgd} d}d}tjt|d zt|d	d
 W n	 ty+   Y nw W d    n1 s6w   Y  tjt|d t|  d	d
 W d    n1 sUw   Y  tjt|d tddd
}t||  W d    n1 sxw   Y  tjt|d ztdd	d
}W n	 ty   Y nw W d    n1 sw   Y  tjt|d! ztdd	d
}W n	 ty   Y nw t||  W d    d S 1 sw   Y  d S )N      abcolumnsz[{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}zPassing literal json to 'read_json' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object.matchFlines!{"a": 1, "b": 2}
{"b":2, "a" :1}
T4{"a\\":"foo\\","b":"bar"}
{"a\\":"foo\"","b":"bar"}
)r	   tmassert_produces_warningFutureWarningr   
ValueErrorto_jsonassert_frame_equal)expectedZjsonlmsgresult r*   W/var/www/html/lang_env/lib/python3.10/site-packages/pandas/tests/io/json/test_pandas.pytest_literal_json_deprecation+   sL   
	"r,   c                 C   s<   |dv r
|j dd}|dkrtt|j|_t| | d S )N)recordsvaluesTdropr.   )reset_indexrangelenr   r!   r&   )r)   r'   orientr*   r*   r+   assert_json_roundtrip_equalX   s
   r5   c                   @   sF  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	g d
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	g d"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d0gej	
d)d*d(gd1d2 Zej	
d)d*d(gd3d4 Zej	
d)d*d(gd5d6 Zej	
d)d*d(gd7d8 Zej	
d)d*d(gd9d: 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dAdB Zej	
dCdDdEdF dGgdfdHdIgdJdK Z!ej	
d'd*d(gej	
d)d*d(gdLdM Z"ej	
d'd*d(gdNdO Z#ej	
dPej$ej$ gej	
d'd*d(gdQdR Z%ej	j&e' dSdTej	
dUg dVdWdX Z(dYdZ Z)d[d\ Z*d]d^ Z+d_d` Z,dadb Z-dcdd Z.dedf Z/dgdh Z0didj Z1dkdl Z2dmdn Z3dodp Z4ej	
d'd(d/gdqdr Z5dsdt Z6dudv Z7ej	
d'ejegdwdx Z8dydz Z9d{d| Z:d}d~ Z;ej	
dd*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	
dg ddd ZGej	
dg ddd ZHdd ZIej	
dg ddd ZJdd ZKej	
dg ddd ZLej	
dg ddd ZMdd ZNdd ZOdd ZPej	jQej	jRej	
ddeSjTddgddgdeSjTddggdd ZUdd ZVdd ZWdd ZXej	
dd*d(gej	
dddgej	
deSjYeZgddĄ Z[ej	
dd*d(gej	
deSjYeZgddƄ Z\ddȄ Z]ddʄ Z^dd̄ Z_dd΄ Z`ddЄ Zadd҄ ZbddԄ Zcej	
dedփedddedكgddۄ Zddd݄ Zeej	
defdddefddddefdddgdd Zgdd Zhdd Ziej	jRejjkdd Zldd Zmdd Znej	
deojpd eojpd  gdd Zqej	
dddgdd Zrdd Zsdd Ztej	jdeud<ej	
dg dg dg d g dg dg dg dejvdddgdejvdddgg	ej	
d'd	ewgd
d Zxdd Zye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 Zzdd Z{ej	je| ddTej	
d	g ddd Z}ej	
d'd*eedgdd Z~ej	
d	g dd d! Zd"d# Zej	
d$eddgd%d&ggddgd'ddgddgd%d&ggd(feddgd%d&ggddgd'd)ddgddgd%d&ggd(fed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<g d+d,d-d,g d+d.fe<g d+d,d-d)d,g d+d.fe<ddgd,ddgddggd/d,ddgd.fgd0d1 Zej	
deddgd%d&ggddgd'eddgd%d&ggddgd'd)eddgd%d&ggddgddgddggd*e<g d+d,d-e<g d+d,d-d)e<ddgd,ddgddggd/gd2d3 Zej	
d	ddgd4d5 Zej	
d	d6dgd7d8 Zej	
d	dd9gej	
dd*d(gd:d; Zd<d= Zej	
d>g d?d@dA Zej	
dBg dCdDdE Zej	
dFdGdHgdIdJ Zej	
dKdLdMejddNej	jdOdTdPejd9dNej	jdOdTdPgdQdR Zej	
dSg dTdUdV Zej	j&e| dWdTej	
dKg dXdYdZ Zd[d\ Zd]d^ Zd_d` Zej	
daeg d+g dbdcddfgdedf Zej	jRdgdh Zdidj Zdkdl Zdmdn Zdodp Zej	
dqe<drdsdtdudvfe<dwdxdydudzfed{d|gd}d~ggdfeddgddggdfgdd Zdd Zej	
d	g ddd Zej	
d	g ddd Zdd Zd/S (  TestPandasContainerc                 C   sv   dd t tdD }dgd dgd  dgd  dgd	  }tt||d
< tjddd|d< t|tj|d
ddS )Nc                 S   s$   i | ]\}}|t j|d qS )   )nprandomdefault_rngstandard_normal).0icr*   r*   r+   
<dictcomp>c   s    z9TestPandasContainer.categorical_frame.<locals>.<dictcomp>ABCDZbah   barbazfoo   Er7   int64dtypesortnameindex)	enumeratelistreversedr8   aranger	   pdZCategoricalIndex)selfdatacatr*   r*   r+   categorical_framea   s   
(z%TestPandasContainer.categorical_framec                 C   s8   t dtjdtjd tddddd}|jd |_|S )Ng?
   rH   
2020-01-01periodsts)rN   rL   )r   r8   rR   float64r   rN   
_with_freq)rT   serr*   r*   r+   datetime_seriesl   s   
z#TestPandasContainer.datetime_seriesc                 C   sD   t tjddttdtdtddddd	}|j	
d |_	|S )
Nr   )r7      r@   rH   
2000-01-01r7   Br[   freqr   rN   )r	   r8   r9   r:   r;   r   rP   objectr   rN   r^   )rT   dfr*   r*   r+   datetime_framex   s   z"TestPandasContainer.datetime_framec                 C   sV   t ddgddggddgddgd	}t|j|d
}t||d
}| }t||| d S )Nr   r   r>   dz	index " 1z	index / 2za \ bzy / zrN   r   r4   r	   r   r%   r   copyr5   rT   r4   rh   rU   r)   r'   r*   r*   r+    test_frame_double_encoded_labels   s   z4TestPandasContainer.test_frame_double_encoded_labelsr4   )splitr-   r.   c                 C   sV   t ddgddggddgddgd}t|j|d	}t||d	}| }t||| d S )
Nr   r   r>   rj   r   xyrk   rl   rm   ro   r*   r*   r+   test_frame_non_unique_index   s
   "z/TestPandasContainer.test_frame_non_unique_indexrN   r   c                 C   sn   t ddgddggddgddgd}d	| d
}tjt|d |j|d W d    d S 1 s0w   Y  d S )Nr   r   r>   rj   r   rr   rs   rk   z+DataFrame index must be unique for orient=''r   rl   r	   pytestraisesr$   r%   rT   r4   rh   r(   r*   r*   r+   "test_frame_non_unique_index_raises   s
   ""z6TestPandasContainer.test_frame_non_unique_index_raisesrq   r.   rU   r   r   r>   rj         ?      @g      @g      @r      20130101Z20130102c                 C   s   t |ddgddgd}tt|j|d|dgd}|dkrAt |}|jd d df jd	kr@|d|jd d df tj	d
  n|dkrL|}ddg|_
t|| d S )Nr   r   rr   rk   rl   )r4   convert_datesr.   r   datetime64[ns]@B rq   zx.1)r	   r   r   r%   ilocrI   Zisetitemastyper8   rG   r   r!   r&   )rT   r4   rU   rh   r)   r'   r*   r*   r+   test_frame_non_unique_columns   s   &
z1TestPandasContainer.test_frame_non_unique_columns)rN   r   r-   c                 C   sn   t ddgddggddgddgd}d	| d
}tjt|d |j|d W d    d S 1 s0w   Y  d S )Nr   r   r>   rj   r   r   rr   rk   z-DataFrame columns must be unique for orient='ru   r   rl   rv   ry   r*   r*   r+   $test_frame_non_unique_columns_raises   s
   ""z8TestPandasContainer.test_frame_non_unique_columns_raisesc                 C      |  |j ddksJ d S )Nr   rl   r%   )rT   float_framer*   r*   r+   test_frame_default_orient      z-TestPandasContainer.test_frame_default_orientrI   Fconvert_axesTc                 C   4   t |j|d}t||||d}|}t||| d S Nrl   r4   r   rI   r   r%   r   r5   )rT   r4   r   rI   r   rU   r)   r'   r*   r*   r+   test_roundtrip_simple   s   z)TestPandasContainer.test_roundtrip_simplec                 C   r   r   r   )rT   r4   r   rI   	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}t|j|d}t||||d	}| }|s5|tj	}|rL|d
v rL|j
tj	|_
|jtj	|_n|dkr[|r[|j
tj	|_
n|ri|dkri|j
tj	|_
t||| d S )N)   ra   c                 S      g | ]}t |qS r*   strr<   r=   r*   r*   r+   
<listcomp>       z?TestPandasContainer.test_roundtrip_str_axes.<locals>.<listcomp>ra   c                 S   r   r*   r   r   r*   r*   r+   r      r   r   )r   rN   rI   rl   r   rk   r-   rq   )r	   r8   Zzerosr2   r   r%   r   rn   r   rG   r   rN   r5   )rT   r4   r   rI   rh   rU   r)   r'   r*   r*   r+   test_roundtrip_str_axes   s&   z+TestPandasContainer.test_roundtrip_str_axesc           	      C   sx   |dv r| tjjd| dd t|j|d}t|||d}| }|j	|s,t
nd|_d |j_t||| d S )Nrk   z.Can't have duplicate index values for orient 'z')reasonrl   r4   r   string[pyarrow_numpy])applymarkerrw   markxfailr   r%   r   rn   rN   r   r   rL   r5   )	rT   requestr4   rW   r   using_infer_stringrU   r)   r'   r*   r*   r+   test_roundtrip_categorical   s   

z.TestPandasContainer.test_roundtrip_categoricalc                 C   sv   t  }t|j|d}t|||d}|dkr'tg |rtntd}t ||d}n|dv r/t  }n| }t	|| d S )Nrl   r   rq   rH   rk   )
r	   r   r%   r   r   floatrg   rn   r!   r&   )rT   r4   r   Zempty_framerU   r)   idxr'   r*   r*   r+   test_roundtrip_empty  s   z(TestPandasContainer.test_roundtrip_emptyc                 C   sd   t |j|d}t|||d}| }|s*|jtjd }|dkr'|t	}||_t
||| d S )Nrl   r   r   rq   )r   r%   r   rn   rN   viewr8   rG   r   r   r5   )rT   r4   r   ri   rU   r)   r'   r   r*   r*   r+   test_roundtrip_timestamp   s   
z,TestPandasContainer.test_roundtrip_timestampc           	      C   s   t g d}g dg dg dg dd}t||d}t|j|d}t|||d	}| }|jdi |d
t	j
}t||| d S )N)r   r   r>   rj   e)              ?       @      @      @)r   r   r   r   r   )Zfoo1Zfoo2Zfoo3Zfoo4Zfoo5)TFTFTArc   CD)rU   rN   rl   r   numberr*   )r   r	   r   r%   r   rn   ZassignZselect_dtypesr   r8   rG   r5   )	rT   r4   r   rN   r.   rh   rU   r)   r'   r*   r*   r+   test_roundtrip_mixed1  s   z(TestPandasContainer.test_roundtrip_mixedz9#50456 Column multiindex is stored and loaded differently)r   rx   Z2022ZJANZFEBZ2023c                 C   sL   t ddgddggtj|d}t|jdd}t|dd}t|| d S )Nr   r   r}   ra   r   rq   rl   )	r	   rS   Z
MultiIndexZfrom_arraysr   r%   r   r!   r&   )rT   r   rh   rU   r)   r*   r*   r+   test_roundtrip_multiindexE  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 columnsrq   )zN{"badkey":["A","B"],"index":["2","3"],"data":[[1.0,"1"],[2.0,"2"],[null,"3"]]}zunexpected key\(s\): badkeyrq   c                 C   sD   t jt|d tt||d W d    d S 1 sw   Y  d S )Nr   rl   )rw   rx   r$   r   r   )rT   rU   r(   r4   r*   r*   r+   $test_frame_from_json_bad_data_raisesZ  s   #"z8TestPandasContainer.test_frame_from_json_bad_data_raisesc                 C   s   t ddgg dg}tt|j|d|||d}t|jd s"J t ddgg d	g}tt|j|d|||d}t|jd sDJ d S )
Nr   r   ra   rA      rl   r   r   r   12)456)r	   r   r   r%   r8   isnanr   )rT   r4   r   rI   Znum_dfr)   Zobj_dfr*   r*   r+   !test_frame_from_json_missing_data  s    z5TestPandasContainer.test_frame_from_json_missing_datac                 C   s,   t td|d}ttjg}t|| d S )Nz[null]rH   )r   r   r	   r8   nanr!   r&   )rT   rI   r)   r'   r*   r*   r+   (test_frame_read_json_dtype_missing_value  s   z<TestPandasContainer.test_frame_read_json_dtype_missing_valueinfc                 C   sN   t ddgg dg}||jd< t| }t||d}t|jd s%J d S )Nr   r   r   r   rH   )r	   locr   r%   r   r8   r   r   )rT   r   rI   rh   rU   r)   r*   r*   r+   test_frame_infinity  s
   
z'TestPandasContainer.test_frame_infinityz$not compliant on 32-bit, xref #15865r   zvalue,precision,expected_val))gffffff?r   r   )g333333?r   r   )g333333r   g       )gףp=
?r   r   )gCl?r}   r   )g?rE   r   c                 C   s2   t d|ig}|j|d}|d| dksJ d S )NZa_float)Zdouble_precisionz{"a_float":{"0":}}r	   r%   )rT   value	precisionZexpected_valrh   encodedr*   r*   r+   "test_frame_to_json_float_precision  s   z6TestPandasContainer.test_frame_to_json_float_precisionc                 C   P   t g d}d}tjt|d |jdd W d    d S 1 s!w   Y  d S Nr   r   r}   z+Invalid value 'garbage' for option 'orient'r   garbagerl   rv   )rT   rh   r(   r*   r*   r+   test_frame_to_json_except  
   "z-TestPandasContainer.test_frame_to_json_exceptc                 C   sJ   t ddgd}|jrJ t| }t|t|jd}tj||dd d S )Njimjoer   rH   Fcheck_index_type)	r	   _is_mixed_typer   r%   r   dictdtypesr!   r&   )rT   rh   rU   r)   r*   r*   r+   test_frame_empty  s
   
z$TestPandasContainer.test_frame_emptyc                 C   s0   t dg ig d}|jdd}d}||ksJ d S )NtestrM   r   rl   z{"test":{}}r   rT   rh   r)   r'   r*   r*   r+   test_frame_empty_to_json  s   z,TestPandasContainer.test_frame_empty_to_jsonc                 C   sX   t ddgd}|d d|d< |jsJ | }tjtt|t|j	d|dd d S )Nr   r   r   i8rH   Fr   )
r	   r   r   r%   r!   r&   r   r   r   r   )rT   rh   rU   r*   r*   r+   test_frame_empty_mixedtype  s   

z.TestPandasContainer.test_frame_empty_mixedtypec                 C   s   g dg dg dg dg}t |tdg dd}|jsJ | }dD ]}t|j|d	}t||d
d}t|| q$t	t
||_t|jdd	}t|dd
d}t|| t	|jd |_t|jdd	}t|dd
d}t|| d S )N)rX   r   rD   皙?g{Gz?)   r   rB   g?g{Gz?)r7   r}   rC   g333333?gQ?)(   ra   quxg?g{Gz?abcd)Z1stZ2ndZ3rdZ4thZ5thrk   rq   rN   r   rl   Fr   r-   r   r.   )r	   rP   r   rn   r   r%   r   r!   r&   r   r3   rN   shaper   )rT   valsrh   rightr4   inpleftr*   r*   r+   test_frame_mixedtype_orient  s,   
z/TestPandasContainer.test_frame_mixedtype_orientc           
      C   s  t dd}tt|d d}tg dg dg dg dg dgg d	|d
}td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j||	dd d S )Nz
2000-01-03z
2000-01-07re   )gÉ?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   rf   z19920106 18:21:32.12nsdater~   r}   modifiedr   iojsonrU   ztsframe_v012.json)Zaxisztsframe_iso_v012.jsonF)check_column_type)r   r
   r8   Zasarrayr	   r   as_unitr   r   get_locrS   NaTospathjoinr   r!   r&   r0   )
rT   datapathdtirh   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 dddd}tt|d d}tg dg dg dg d	g d
g dd|d}|j|s0tjnd|_t|j	dd}t
|dd}tj||ddddd d S )NZ20000101rX   hrd   r   )
g}S? wgbm?gz(~J	?g1?gk*MgvTj?g7j	" Y?gp+KS(g񒬁?gZtSy)
iL,i_}i4ziKeiL&i%giDiY)L i;eiD )
Z78c608f1Z64a99743Z13d2ff52Zca7f4af2Z97236474Zbde7e214Z1a6bde47Zb1190be5Z7a669144Z8d64d068)
gD!gIxJ g%
@gP\<g޿gPl?gFzn?g5mH/?gpH%gI?)
Z14f04af9Zd085da90Z4bcfac83Z81504cafZ2ffef4a9Z08e2f5c4Z07e1af03Zaddbd4a7Z1f6a09baZ4bfc4d87)
i/iiYi6iI i;>i	i( i0q{iѪ)Zfloat_1Zint_1Zstr_1Zfloat_2Zstr_2Zint_2rM   r   rq   rl   T)r   r   Z	by_blocksZcheck_exact)r   r
   rP   r	   r   r   r8   Zstr_r   r%   r   r!   r&   )rT   r   rN   df_mixedrU   Zdf_roundtripr*   r*   r+   test_blocks_compat_GH9037  s2   JO
z-TestPandasContainer.test_blocks_compat_GH9037c           
      C   s  G dd d}d}||}t d|jgi}| d| dks!J t d|gi}d}tjt|d |  W d    n1 s@w   Y  t |gd	gd
ddgd}tjt|d |  W d    n1 shw   Y  |jtd}d| d}	||	ksJ |jtdd| dksJ d S )Nc                   @   s$   e Zd ZdddZdefddZdS )zFTestPandasContainer.test_frame_nonprintable_bytes.<locals>.BinaryThingreturnNc                 S   s   || _ t|| _d S N)hexedbytesfromhexbinary)rT   r  r*   r*   r+   __init__  s   zOTestPandasContainer.test_frame_nonprintable_bytes.<locals>.BinaryThing.__init__c                 S   s   | j S r  )r  rT   r*   r*   r+   __str__  s   zNTestPandasContainer.test_frame_nonprintable_bytes.<locals>.BinaryThing.__str__r  N)__name__
__module____qualname__r  r   r	  r*   r*   r*   r+   BinaryThing~  s    
r  Z574b4454ba8c5eb4f98a8f45r   z{"A":{"0":""}}z6Unsupported UTF-8 sequence length when encoding stringr   r   r   rc   rc   r   default_handlerz"},"B":{"0":1}})r	   r  r%   rw   rx   OverflowErrorr   )
rT   r  r  ZbinthingZdf_printableZdf_nonprintabler(   r   r)   r'   r*   r*   r+   test_frame_nonprintable_bytes{  s(   



z1TestPandasContainer.test_frame_nonprintable_bytesc                 C   s<   t dd dgddgi }ddd  d}||ksJ d S )NrB   i r   rD   i9  {"z":{"0":1},"foo":{"0":1337}}r   rT   r)   r'   r*   r*   r+   test_label_overflow  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 d    n1 s$w   Y  t|tt|jd	dd	d
d tt|jdddd
d}t	|j
|j
 d S )Nr   r   r   rM   z.Series index must be unique for orient='index'r   rN   rl   rq   series)r4   typr-   )r   rw   rx   r$   r%   r!   assert_series_equalr   r   Zassert_equalr.   )rT   sr(   Zunserializedr*   r*   r+   test_series_non_unique_index  s   z0TestPandasContainer.test_series_non_unique_indexc                 C   r   )NrN   rl   r   )rT   string_seriesr*   r*   r+   test_series_default_orient  r   z.TestPandasContainer.test_series_default_orientc                 C   sn   t |j|d}t|d|d}|}|r|dv r|jd|_|dv r(|jdd}|d	kr/d |_t|| d S )
Nrl   r  r  r4   r   r   r.   r-   Tr/   rq   )	r   r%   r   rN   r   r1   rL   r!   r  )rT   r4   r  r   rU   r)   r'   r*   r*   r+   test_series_roundtrip_simple  s   z0TestPandasContainer.test_series_roundtrip_simplec                 C   sV   t |j|d}t|d||d}|}|dv r|jdd}|dkr#d |_t|| d S )Nrl   r  )r  r4   rI   r   Tr/   rq   r   r%   r   r1   rL   r!   r  )rT   r4   rI   Zobject_seriesrU   r)   r'   r*   r*   r+   test_series_roundtrip_object  s   z0TestPandasContainer.test_series_roundtrip_objectc                 C   sb   t g g tjd}t|j|d}t|d|d}|jdd}|dv r)|jtj|_t	
|| d S )NrN   rI   rl   r  r  Tr/   rq   )r   r8   r]   r   r%   r   r1   rN   r   r!   r  )rT   r4   Zempty_seriesrU   r)   r'   r*   r*   r+   test_series_roundtrip_empty  s   z/TestPandasContainer.test_series_roundtrip_emptyc                 C   sT   t |j|d}t|d|d}|}|dv r|jdd}|dkr"d |_t|| d S )Nrl   r  r  r   Tr/   rq   r"  )rT   r4   r`   rU   r)   r'   r*   r*   r+    test_series_roundtrip_timeseries  s   z4TestPandasContainer.test_series_roundtrip_timeseriesc                 C   s^   t tdg dd}t|j|d}t|d|d}| }|dv r'|jdd	}t|| d S )
Nr   r   r   r>   rj   r   frM   rl   r  r  r   Tr/   )	r   r2   r   r%   r   rn   r1   r!   r  )rT   r4   rI   r  rU   r)   r'   r*   r*   r+   test_series_roundtrip_numeric  s   z1TestPandasContainer.test_series_roundtrip_numericc                 C   r   r   )r   rw   rx   r$   r%   )rT   r  r(   r*   r*   r+   test_series_to_json_except  r   z.TestPandasContainer.test_series_to_json_exceptc                 C   s6   t g d}tt| ddd}tj||dd d S )N=
ףp=@r,  r,  r  T)r  precise_floatFr   )r   r   r   r%   r!   r  rT   r  r)   r*   r*   r+   #test_series_from_json_precise_float  s   z7TestPandasContainer.test_series_from_json_precise_floatc                 C   sB   t g d}tt| dtjd}t dgd }t|| d S )Nr+  r  r  rI   ra   r}   )r   r   r   r%   r8   rG   r!   r  )rT   r  r)   r'   r*   r*   r+   test_series_with_dtype  s   z*TestPandasContainer.test_series_with_dtypezdtype,expectedrb   r   rH   l    ,Uqc                 C   s8   t dgdd}t| }t|d|d}t|| d S )Nrb   r   rH   r  r0  )r   r   r%   r   r!   r  )rT   rI   r'   r  rU   r)   r*   r*   r+   test_series_with_dtype_datetime  s   z3TestPandasContainer.test_series_with_dtype_datetimec                 C   s8   t g dg dg}tt| dd}t|| d S )Nr+  T)r-  r	   r   r   r%   r!   r&   rT   rh   r)   r*   r*   r+   "test_frame_from_json_precise_float  s   z6TestPandasContainer.test_frame_from_json_precise_floatc                 C   s:   t tdg ddd}tt| d d}t|| d S )Nr   r'  rG   r$  r  )r   r2   r   r   r%   r!   r  r.  r*   r*   r+   test_typ  s   zTestPandasContainer.test_typc                 C   sn   t g dg dg}tt| }t|| t g dg ddg dd}tt| }t|| d S )Nr   r   r   r   )r   rc   r   rM   r3  r4  r*   r*   r+   test_reconstruction_index$  s   z-TestPandasContainer.test_reconstruction_indexc                 C   sR   t d}|||fD ]}|| t| qW d    d S 1 s"w   Y  d S )N	test.json)r!   ensure_cleanr%   r   )rT   r   r   ri   r   rh   r*   r*   r+   	test_path-  s   

"zTestPandasContainer.test_pathc                 C   sZ   t | }t|}t|| t | }t|dd}tj||dd |jd u s+J d S )Nr  r6  F)Zcheck_names)r   r%   r   r!   r&   r  rL   )rT   r`   ri   r   r)   r*   r*   r+   test_axis_dates3  s   z#TestPandasContainer.test_axis_datesc                 C   s   |}t dd|d< t| }t|}t|| d|d< t|jdd}t|dd}| }|d j	d	|d< |d 
d
|d< t|| tt dd|jd}t| }t|dd}t|| d S )Nr~   r   r   r   rD   	date_unitFr   r   rG   rM   r  r6  )r   r   r   r%   r   r!   r&   rn   r.   r   r   r   rN   r  )rT   r`   ri   rh   r   r)   r'   r\   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r$d}nd	}|r.|d
d}||ks4J d S )Ni  r   )yearmonthdayr   rM   rB  rC  z+{"1577836800000":1577836800000,"null":null}zA{"2020-01-01T00:00:00.000":"2020-01-01T00:00:00.000","null":null}}	,"a":"a"})rS   r   appendr   r%   replace)rT   rB  rE  rF  rU   r_   r)   r'   r*   r*   r+   test_date_index_and_valuesW  s   
z.TestPandasContainer.test_date_index_and_values
infer_word)Z
trade_timer   datetimeZsold_atr   	timestampZ
timestampsc                 C   s^   dd|diddig}t dtdgdtjggd|gd}ttt|d|g }t|| d S )Nidr   l    $Ar   z
2002-11-08r   )	r	   r   rS   r   r   r   r   r!   r&   )rT   rP  rU   r'   r)   r*   r*   r+   test_convert_dates_infern  s   z,TestPandasContainer.test_convert_dates_inferzdate,date_unit))20130101 20:43:42.123N)20130101 20:43:42r  )rU  ms)z20130101 20:43:42.123456us)z20130101 20:43:42.123456789r   c                 C   s   |}t |d|d< tj|jd|jdf< tj|jd|jdf< |r-|jd|d}n|jdd}tt	|}|
 }t|| d S )Nr   r   r   rA   rD  rB  r?  rJ  )r   r   rS   r   r   r   r   r%   r   r   rn   r!   r&   )rT   r   r?  ri   rh   r   r)   r'   r*   r*   r+   test_date_format_frame  s   z*TestPandasContainer.test_date_format_framec                 C   sJ   |}d}t jt|d |jddd W d    d S 1 sw   Y  d S )N*Invalid value 'foo' for option 'date_unit'r   rD  rD   rY  )rw   rx   r$   r%   )rT   ri   rh   r(   r*   r*   r+   test_date_format_frame_raises  s
   "z1TestPandasContainer.test_date_format_frame_raisesc                 C   sx   t t|d|jd}tj|jd< tj|jd< |r"|jd|d}n|jdd}tt	|dd	}|
 }t|| d S )
Nr   rM   r   rA   rD  rY  rJ  r  r6  )r   r   r   rN   rS   r   r   r%   r   r   rn   r!   r  )rT   r   r?  r`   r\   r   r)   r'   r*   r*   r+   test_date_format_series  s   z+TestPandasContainer.test_date_format_seriesc                 C   sX   t td|jd}d}tjt|d |jddd W d    d S 1 s%w   Y  d S )NrU  rM   r[  r   rD  rD   rY  )r   r   rN   rw   rx   r$   r%   )rT   r`   r\   r(   r*   r*   r+   test_date_format_series_raises  s
   "z2TestPandasContainer.test_date_format_series_raisesunit)r  rW  rX  r   c                 C   s   |}t dd|d< |jd}t d|jd|f< t d|jd|f< tj|jd|f< |jd	|d
}tt	||d}t
|| tt	|d d}t
|| d S )NrV  r   r   z19710101 20:43:42r   z21460101 20:43:42r   ra   rC  rY  r>  )r   r   r   r   r   rS   r   r%   r   r   r!   r&   )rT   r_  ri   rh   dlr   r)   r*   r*   r+   test_date_unit  s   z"TestPandasContainer.test_date_unit)r  rW  rX  c                 C   s   t td|gd| dd}tttd|gd| d|dttd|gt|dd}t }|j|d|d	 |d
 t	j
t|ddgd|ddd d S )Nz2023-01-01T11:22:33.123456zdatetime64[]rH   z2022-01-01T11:22:33.123456rI   rN   )r   date_objrD  rY  r   r   rd  r@  F)r   Zcheck_dtype)r
   r8   Z
datetime64r	   r   rg   r   r%   seekr!   r&   r   )rT   r_  rN   rh   bufr*   r*   r+   test_iso_non_nano_datetimes  s4   



z/TestPandasContainer.test_iso_non_nano_datetimesc                 C   s   d}t 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   r   )rT   r  r*   r*   r+   test_weird_nested_json  s   z*TestPandasContainer.test_weird_nested_jsonc                 C   s~   t tjddtdd}td|d< td|d< d	|d
< tddd|_	t
| }t|tjtjdd}t|| d S )Nr   )rA   r   ZABr   r~   r   rA   intsTboolsrZ   )ri  rj  rH   )r	   r8   r9   r:   r;   rP   r   r2   r   rN   r   r%   r   rG   Zbool_r!   r&   )rT   Zdfj2r   r)   r*   r*   r+   test_doc_example  s   z$TestPandasContainer.test_doc_examplec                 C   s   |dddd}t |}| }tt|}|j|j|jd}d}tj	t
|d |jtjdd	}W d    n1 s;w   Y  t|| d S )
Nr   r   rU   z	teams.csvrk   z.The 'downcast' keyword in fillna is deprecatedr   F)Zdowncast)rS   Zread_csvr%   r   r   ZreindexrN   r   r!   r"   r#   Zfillnar8   r   r&   )rT   r   r   rh   r  r)   resr(   r*   r*   r+   test_round_trip_exception  s   
z-TestPandasContainer.test_round_trip_exceptionzfield,dtypeZ
created_atUTC)tzZ	closed_atZ
updated_atc                 C   s4   d}|j |d t|jdd}|| j|ksJ d S )Nzw{"created_at": ["2023-06-23T18:21:36Z"], "closed_at": ["2023-06-23T18:21:36"], "updated_at": ["2023-06-23T18:21:36Z"]}
)contentTr@  )Zserve_contentr   urlrI   )rT   fieldrI   Z
httpserverrU   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J tt| dd|}t|| t tdtddgt	d	d
gd}|jdksAJ tt| dd|}t|| t
tdtddg}|d	 jdkshJ t|tt| | d S )Nc                 S   s   t j| ddS )NrW  r_  )rS   to_timedelta)rr   r*   r*   r+   <lambda>;  s    z4TestPandasContainer.test_timedelta.<locals>.<lambda>   rA   secondsztimedelta64[ns]r  r6  r   r   rM   )r   r   rI   r   r   r%   applyr!   r  r   r	   r&   )rT   	converterr_   r)   framer*   r*   r+   test_timedelta:  s   "z"TestPandasContainer.test_timedeltac                 C   sx   t tddtddgddgtdddd	}t|jd
d}t|}tj|jd
d|d< t	|j
|d< t|| d S )Nrw  daysrA   rx  r   r   r~   )startr[   r   r   r>   r   r>  rt  r   r>   )r	   r   r   r   r%   r   rS   ru  r   to_datetimer>   r!   r&   )rT   r|  rU   r)   r*   r*   r+   test_timedelta2N  s   
z#TestPandasContainer.test_timedelta2c                 C   s~   t d}td}td||gitd}tdt|dj|djgi}t|j	dd}t
|ddid}tj||dd	 d S )
Nrw  r~   r   rH   r   r>  rG   Fr   )r   r   r	   rg   rS   	Timedeltar   _valuer   r%   r   r!   r&   )rT   tdr\   r|  r'   rU   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}|r*|d	d
}|j|d}||ks6J d S )Nr   r~  r   r   rM   rD  zA{"P1DT0H0M0S":"P1DT0H0M0S","P2DT0H0M0S":"P2DT0H0M0S","null":null}z7{"86400000":86400000,"172800000":172800000,"null":null}rK  rL  rJ  )rS   r   rM  r   rN  r%   )rT   rE  rB  r  rU   r_   r'   r)   r*   r*   r+   test_timedelta_to_jsonh  s   
z*TestPandasContainer.test_timedelta_to_jsonc                 C   sB   |ddg}t ||d}|r|t}| }d}||ksJ d S )N*   )ZmillisecondsrM   z	{"42":42})r   r   rg   r%   )rT   rE  r  rU   r_   r)   r'   r*   r*   r+   +test_timedelta_to_json_fractional_precision  s   
z?TestPandasContainer.test_timedelta_to_json_fractional_precisionc                 C   sR   t  }tdd|gi}tddt|gi}tt|jtd}tj||dd d S )Nr      r  Fr   )rg   r	   r   r   r   r%   r!   r&   )rT   r   r|  r'   r)   r*   r*   r+   test_default_handler  s
   z(TestPandasContainer.test_default_handlerc                 C   sV   dd }dt ddtddgtdd d	gd
ddgdg}d}t||dd|ks)J d S )Nc                 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imagr   objr*   r*   r+   default  s   
zBTestPandasContainer.test_default_handler_indirect.<locals>.default	   r   ZSTRra   r   zN/Ar8  r   r   r   zR[9,[[1,null],["STR",null],[[["mathjs","Complex"],["re",4.0],["im",-5.0]],"N\/A"]]]r.   r  r4   )r	   r  r   r   )rT   r  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s&J d S )Nr   gffffff@ra   r  r   g333333?r   r8  r   r   r   zE[["(1+0j)","(nan+0j)"],["(2.3+0j)","(nan+0j)"],["(4-5j)","(1.2+0j)"]]r.   r  )r	   r  r   r%   r   )rT   rh   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 d    n1 s(w   Y  t jt d tdddtd	d
gij|d W d    d S 1 sPw   Y  d S )NZraisinc                    s   t  r  )	TypeErrorr  r(   r*   r+   my_handler_raises  s   zJTestPandasContainer.test_default_handler_raises.<locals>.my_handler_raisesr   r   r   r   r  ra   r  )rw   rx   r  r	   rg   r%   r  )rT   r  r*   r  r+   test_default_handler_raises  s   "z/TestPandasContainer.test_default_handler_raisesc                 C   sn   t dg di}|d |d< | }|d d|d< || ks#J |d }|d }| | ks5J d S )Nr   )r   r   r>   r   r   r   r   rc   category)r	   r%   r   )rT   rh   r'   r  scr*   r*   r+   test_categorical  s   z$TestPandasContainer.test_categoricalc                 C   s   t dddd}|dd }t|t dddd}| }||d< | }|| ks.J t|}t|}| | ks@J d S )	Nr~   r}   
US/Easternr[   ro  utcrZ   r  r   )r   Z
tz_convertZtz_localizer	   rn   r%   r   )rT   tz_rangeZtz_naiverh   Zdf_naiver'   ZstzZs_naiver*   r*   r+   test_datetime_tz  s   z$TestPandasContainer.test_datetime_tzc                 C   s   t tjdd}tj|jd d< |d}| }|| ks$J t	tjdd}tj|jd d< |d}| }|| ksHJ d S )Nr   )rX   ra      ZSparserX   )
r	   r8   r9   r:   r;   r   r   r   r%   r   )rT   rh   Zsdfr'   r  ssr*   r*   r+   test_sparse  s   

zTestPandasContainer.test_sparser\   z2013-01-10 05:00:00Zz2013-01-10 00:00:00r  z2013-01-10 00:00:00-0500c                 C   s8   d}t |dd|ksJ | }t |dd|ksJ d S )Nz"2013-01-10T05:00:00.000Z"TZ	iso_dates)r   to_pydatetimerT   r\   expdtr*   r*   r+   test_tz_is_utc  s   	z"TestPandasContainer.test_tz_is_utcc                 C   s@   t d}d}t|dd|ksJ | }t|dd|ksJ d S )Nz2013-01-10 05:00:00z"2013-01-10T05:00:00.000"Tr  )r   r   r  r  r*   r*   r+   test_tz_is_naive  s
   z$TestPandasContainer.test_tz_is_naiver  z2013-01-01 05:00:00Zr   rZ   z2013-01-01 00:00:00r  z2013-01-01 00:00:00-0500c                 C   s   d}d}t |dd|ksJ t|}t |dd|ksJ t |tdd|ks)J td|i}t |dd}||ks;J t |dtiddsHJ d S )Nz7["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)r   r
   r   rg   r	   )rT   r  r  dfexpr   rh   r)   r*   r*   r+   test_tz_range_is_utc  s   	z(TestPandasContainer.test_tz_range_is_utcc                 C   s   t ddd}d}d}t|dd|ksJ t|tdd|ks!J td|i}t|dd}||ks3J t|dtidds@J d S )	Nz2013-01-01 05:00:00r   rZ   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  )r   r   r   rg   r	   )rT   r   r  r  rh   r)   r*   r*   r+   test_tz_range_is_naive"  s   z*TestPandasContainer.test_tz_range_is_naivec                 C   s<   t tddd}tddgddggddgd}t|| d S )	Nr   Tr   r   r   r   r   r   r   r   r	   r!   r&   r  r*   r*   r+   test_read_inline_jsonl1  s   z*TestPandasContainer.test_read_inline_jsonlc                 C   sD   t d|j dd|d}tddgddggddgd	}t|| d S )
Nzs3n://z/items.jsonlT)r   storage_optionsr   r   r   r   r   )r   rL   r	   r!   r&   )rT   Zs3_public_bucket_with_datas3sor)   r'   r*   r*   r+   test_read_s3_jsonl8  s   z&TestPandasContainer.test_read_s3_jsonlc              	   C   s   t d?}t|ddd}|d W d    n1 sw   Y  t|dd}tdd	gdd	ggd
dgd}t || W d    d S 1 sGw   Y  d S )Nztmp_items.jsonwzutf-8encodingr   Tr   r   r   r   r   r   )r!   r;  openwriter   r	   r&   )rT   r   infiler)   r'   r*   r*   r+   test_read_local_jsonlE  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|| 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”rB   rD   r   r   r   )r   r   r	   r!   r&   rT   r   r)   r'   r*   r*   r+   test_read_jsonl_unicode_charsN  s   z1TestPandasContainer.test_read_jsonl_unicode_charsbigNumc                 C   sp   t |tdgd}| }dt| d }||ksJ t|tdgdgd}| }dt| d }||ks6J d S )	N	articleIdrc  {"articleId":rK  r   rI   rN   r   {"0":{"articleId":r   )r   rg   r%   r   r	   )rT   r  r  r   r'   rh   r*   r*   r+   test_to_json_large_numbers_  s   z.TestPandasContainer.test_to_json_large_numbersl        l            c                 C   s   t dt| d }d}tjt|d t| W d    n1 s"w   Y  t dt| d }tjt|d t| W d    d S 1 sHw   Y  d S )Nr  rK  z#Value is too small|Value is too bigr   r  r   )r   r   rw   rx   r$   r   )rT   r  r   r(   r*   r*   r+   test_read_json_large_numbersl  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  r6  gg_SDr  rM   z.{"0": {"articleId": "1404366058080022500245"}}r   rk   )r   r   r   r!   r  r	   r&   r  r*   r*   r+   test_read_json_large_numbers2x  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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r4   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\r    )r	   r%   r!   r&   r   r   r   r*   r*   r+   test_to_jsonl  s   z!TestPandasContainer.test_to_jsonlz%GH#13774 encoding kwarg not supportedval)   E, 17       a   b   c)r  r  r  r  )s   EE, 17r  r  r  r  )r     r  r  r  )r  r  r  r  )r  r  r  r  )   Ar  r  r  r  r  r  r  r  r  c                 C   sx   t dd |D |d}d}td }|j||d tt||d}tj||dd W d    d S 1 s5w   Y  d S )	Nc                 S   s$   g | ]}t |tr|d n|qS )latin-1)r  r  decode)r<   rr   r*   r*   r+   r     s   $ z;TestPandasContainer.test_latin_encoding.<locals>.<listcomp>rH   r  r:  r  F)Zcheck_categorical)r   r!   r;  r%   r   r   r  )rT   rI   r  r_   r  r   Zretrr*   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s%J d S )Nr   r   T)rN   deep)r	   r   Zmemory_usagesumr%   )rT   rh   Zsize_beforeZ
size_afterr*   r*   r+   "test_data_frame_size_after_to_json  s
   z6TestPandasContainer.test_data_frame_size_after_to_jsonr   r   r   r   1.2.c                 C   sF   t ddgddgg||d}|jdd}tt|dd}t|| d S )Nr   r   r}   ra   rk   tablerl   r	   r%   r   r   r!   r&   )rT   rN   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   sH   t ddgddgddgd}|jdd	}tt|dd	}t|| d S )
Nr   r   r   r   r   r   r  r  rl   r  )rT   r'   r  r)   r*   r*   r+   #test_from_json_to_json_table_dtypes  s   z7TestPandasContainer.test_from_json_to_json_table_dtypeszincorrect na conversion)rq   r-   rN   r   c                 C   s   t tg dddtg dddtg dddtg dd	dtg d
ddtg dddd}|j|d}tt||dddd	dddd}t|| d S )Nr   rG   rH   )Nr   r   r]   )N r>   rg   TFTboolr   r   Nr  )rY   Nz
2020-01-03r   )IntegerFloatZObjectZBoolZCategoryZDatetimerl   r4   rI   )r	   	from_dictr   r%   r   r   r!   r&   )rT   r4   r'   r  r)   r*   r*   r+   %test_to_json_from_json_columns_dtypes  s0   z9TestPandasContainer.test_to_json_from_json_columns_dtypes)r   r>   c                 C   sn   t ddgddgddgd}|jdd	}d
}tjt|d t|d|d W d    d S 1 s0w   Y  d S )Nr   r   r   r   r   r   r  r  rl   z)cannot pass both dtype and orient='table'r   r  r	   r%   rw   rx   r$   r   )rT   rI   rh   r  r(   r*   r*   r+   !test_read_json_table_dtype_raises  s   "z5TestPandasContainer.test_read_json_table_dtype_raises)rN   r   r-   r.   c                 C   s<   t  }ttd|dd}t|j|j t|j|j d S )Nz{}Tr   )r	   r   r   r!   assert_index_equalrN   r   )rT   r4   r'   r)   r*   r*   r+   %test_read_json_table_empty_axes_dtype   s   z9TestPandasContainer.test_read_json_table_empty_axes_dtypec                 C   st   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 d    d S 1 s3w   Y  d S )Nr   r   r}   ra   r   r   r  r  rk   r  rl   z0cannot pass both convert_axes and orient='table'r   Tr   r  )rT   rh   r  r(   r*   r*   r+   (test_read_json_table_convert_axes_raises	  s   ""z<TestPandasContainer.test_read_json_table_convert_axes_raiseszdata, expectedra   rA   r   )r   rU   rD   rf   r   r   rK   )rL   rU   )rL   rN   c                 C   s(   |j ddd}t|}||ksJ d S )Nrq   Fr4   rN   )r%   r   loadsrT   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s$J d S )Nr  Fr  rM   r-   rl   )ZschemarU   )r%   r   r  rS   r   Zbuild_table_schemar	   to_dictrT   rU   r)   r'   r*   r*   r+   test_index_false_to_json_table6  s   
z2TestPandasContainer.test_index_false_to_json_tablec                 C   b   t ddgddg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   ra   rA   r   r   r   zU'index=False' is only valid when 'orient' is 'split', 'table', 'records', or 'values'r   Fr  rv   ry   r*   r*   r+   test_index_false_error_to_jsonS     "z2TestPandasContainer.test_index_false_error_to_jsonr-   c                 C   r  )Nr   r   ra   rA   r   r   r   zS'index=True' is only valid when 'orient' is 'split', 'table', 'index', or 'columns'r   Tr  rv   ry   r*   r*   r+   test_index_true_error_to_jsona  r  z1TestPandasContainer.test_index_true_error_to_jsonr  c                 C   sD   t ddgddgd}|j||d}tt||d}t|| d S )Nr   r   r}   ra   r8  r  rl   r  )rT   r4   rN   r'   r  r)   r*   r*   r+   "test_index_false_from_json_to_jsono  s   z6TestPandasContainer.test_index_false_from_json_to_jsonc                 C   s>   t tdddd}tdgdd}tdg|d	}t|| d S )
Nz{"2019-01-01T11:00:00.000Z":88}r  rN   r  z2019-01-01 11:00:00zM8[ns, UTC]rH   X   rM   )r   r   r
   r   r!   r  )rT   r)   Zexp_dtir'   r*   r*   r+   test_read_timezone_informationy  s   
z2TestPandasContainer.test_read_timezone_informationrq  )zs3://example-fsspec/zgcs://another-fsspec/file.jsonzhttps://example-site.com/datazsome-protocol://data.txtc                 C   s2   t td| d}td|gi}t|| d S )Nz{"url":{"0":"r  rq  r  )rT   rq  r)   r'   r*   r*   r+   test_read_json_with_url_value  s   z1TestPandasContainer.test_read_json_with_url_valuecompression)r  z.gzz.bz2z.tarc                 C   sR   d d| }t jtd| dd t| W d    d S 1 s"w   Y  d S )NA  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz.jsonzFile z does not existr   )rw   rx   FileNotFoundErrorr   )rT   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)rC  i \&)rD  Z
P1DT0H0M0Sc                 C   s@   t dggtdgd}d| d}|j|d}||ksJ d S )Nr   Z1Dr   r  z
":{"0":1}}rJ  )r	   rS   r  r%   )rT   rB  keyrh   r'   r)   r*   r*   r+   test_timedelta_as_label  s   z+TestPandasContainer.test_timedelta_as_labelzorient,expected)rN   z{"('a', 'b')":{"('c', 'd')":1}})r   z{"('c', 'd')":{"('a', 'b')":1}}r  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J d S )Nr   r8  )r>   rj   rk   rl   r   rT   r4   r'   rh   r)   r*   r*   r+   test_tuple_labels  s   z%TestPandasContainer.test_tuple_labelsindent)r   r   ra   c                 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sAJ d S )NrD   rB   rC   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   )rT   r  rh   r)   spacesr'   r*   r*   r+   test_to_json_indent  s:   z'TestPandasContainer.test_to_json_indentz]Adjust expected when infer_string is default, no bug here, just a complicated parametrization))rq   z{
    "columns":[
        "a",
        "b"
    ],
    "index":[
        0,
        1
    ],
    "data":[
        [
            "foo",
            "bar"
        ],
        [
            "baz",
            "qux"
        ]
    ]
})r-   zf[
    {
        "a":"foo",
        "b":"bar"
    },
    {
        "a":"baz",
        "b":"qux"
    }
])rN   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sJ d S )
NrD   rB   rC   r   r   r   r   ra   )r4   r  r   r  r*   r*   r+   test_json_indent_all_orients  s   |z0TestPandasContainer.test_json_indent_all_orientsc                 C   sB   t jtdd t jdd W d    d S 1 sw   Y  d S )Nzmust be a nonnegative integerr   r  )rw   rx   r$   r	   r%   r  r*   r*   r+    test_json_negative_indent_raisesY  s   "z4TestPandasContainer.test_json_negative_indent_raisesc                 C   s<   t d}t|}tdd 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	   r8   r   r!   r&   r  r*   r*   r+   test_emca_262_nan_inf_support]  s   z1TestPandasContainer.test_emca_262_nan_inf_supportc                 C   sB   t ddiddig}tdddgi}tt|}t|| d S )NcolZ31900441201190696999Text)r   dumpsr	   r   r   r!   r&   )rT   Zencoded_jsonr'   r)   r*   r*   r+   test_frame_int_overflowh  s   z+TestPandasContainer.test_frame_int_overflowzdataframe,expectedr  rr   rs   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}|jdd}||ksJ d S )NTZfuture_stackrN   rl   )stackr%   )rT   Z	dataframer'   r  r)   r*   r*   r+   test_json_multiindexo  s   z(TestPandasContainer.test_json_multiindexc                 C   s   |j d}}tg dg dd}|jd| d| |d d}	 |d
d |j D v r/d S td |d8 }|dks@J dq!)Nr:  r   )r   ra   r   r  zs3:///)r  rA   Tc                 s   s    | ]}|j V  qd S r  )r  )r<   r  r*   r*   r+   	<genexpr>  s    z1TestPandasContainer.test_to_s3.<locals>.<genexpr>r   r   z,Timed out waiting for file to appear on moto)rL   r	   r%   objectsalltimesleep)rT   Zs3_public_bucketr  Zmock_bucket_nameZtarget_filerh   timeoutr*   r*   r+   
test_to_s3~  s   
zTestPandasContainer.test_to_s3c                 C   sB   t |trtjjdd}|| t|gg }|dksJ d S )Nznot implementedr   z{"0":{"0":null}})r  r   rw   r   r   r   r	   r%   )rT   Znulls_fixturer   r   r)   r*   r*   r+   test_json_pandas_nulls  s
   

z*TestPandasContainer.test_json_pandas_nullsc                 C   s,   t tddd}tg d}t|| d S )Nz[true, true, false]r  r6  )TTF)r   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jdd}| }d}||ksJ d S )	NTz
2017-01-20z
2017-01-23rD   rB   rk   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%   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s#J d S )
Nc                   @   s   e Zd ZdddZdd ZdS )zGTestPandasContainer.test_to_json_series_of_objects.<locals>._TestObjectr  Nc                 S   s   || _ || _|| _|| _d S r  r   r   _crj   )rT   r   r   r&  rj   r*   r*   r+   r    s   
zPTestPandasContainer.test_to_json_series_of_objects.<locals>._TestObject.__init__c                 S   s   dS )NrA   r*   r  r*   r*   r+   r     s   zITestPandasContainer.test_to_json_series_of_objects.<locals>._TestObject.er
  )r  r  r  r  r   r*   r*   r*   r+   _TestObject  s    
r'  r   r   r}   ra   r%  0)r   r   rj   )r   r   r  r%   )rT   r'  r  r*   r*   r+   test_to_json_series_of_objects  s   &z2TestPandasContainer.test_to_json_series_of_objectszdata,expectedy             @y              ?y      "@      )r   r   r   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
J d S r  r   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J d S )NzY{"columns":["col1"],"index":[0,1],"data":[[13342205958987758245],[12388075603347835679]]}Zcol1l   :!c&HI l   v8$Z_
 )rU   rq   rl   r   )rT   r'   rh   r)   r*   r*   r+   test_json_uint64  s
   z$TestPandasContainer.test_json_uint64)rq   r-   r.   rN   r   c           
   
      sJ  t dttdtjdgddtg dddtdtjdgd	dtg d
d	dg dg dg dg dd}|rKtg d}tg d}nR|dkrittjg dtj	d}ttjddt
gtj	d}n4|dkrt dddlm   g d} g d}ntg d}tg d}|j|d}td| tt|||d}	W d    n1 sw   Y  ttdtjdgddtg dddtdtjdgd	dtg d
d	dtddt
gddtg ddd||d|dkrddlm  t fddjD |dkrttd_t|	 d S )Npyarrowr   r}   Int64rH   r   r{   r|   ZFloat64)r{   r   r|   )TFNr  r  r  )r   r   r>   rj   r   r(  gr   pythonr   r   r   ArrowExtensionArrayrl   mode.string_storage)dtype_backendr4   TFbooleanc                    s$   i | ]}| j | d dqS )TZfrom_pandas)array)r<   r  r1  r'   par*   r+   r?   ,  s    zDTestPandasContainer.test_read_json_dtype_backend.<locals>.<dictcomp>r.   r  )rw   importorskipr	   r   r8   r   r   r6  r   Zobject_r   pandas.arraysr1  r   r%   rS   option_contextr   r   r   rP   r2   r!   r&   )
rT   string_storager3  r4   r   rh   Zstring_arrayZstring_array_naoutr)   r*   r7  r+   test_read_json_dtype_backend  sh   




z0TestPandasContainer.test_read_json_dtype_backend)rq   r-   rN   c           
      C   s   t d}tdtjdgdd}|j|d}td| tt	|||dd	}W d    n1 s0w   Y  tdtjdgdd}|dkrTd
dl
m}	 t|	|j|dd}t|| d S )Nr,  r   r}   r-  rH   rl   r2  r  )r3  r4   r  r   r0  Tr5  )rw   r9  r   r8   r   r%   rS   r;  r   r   r:  r1  r6  r!   r  )
rT   r<  r3  r4   r8  r_   r=  r)   r'   r1  r*   r*   r+   test_read_json_nullable_series7  s   
z2TestPandasContainer.test_read_json_nullable_seriesc                 C   sD   d}t jt|d tddd W d    d S 1 sw   Y  d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r   r   numpy)r3  )rw   rx   r$   r   )rT   r(   r*   r*   r+   test_invalid_dtype_backendL  s
   "z.TestPandasContainer.test_invalid_dtype_backend)r  r  r  rw   ZfixturerW   r`   ri   rp   r   Zparametrizert   rz   r   r   r   r   r   r   r8   rG   r   r]   intr   r   r   r   r   r   AssertionErrorr   r   r   r   r   r   r   Zskipifr   r   r   r   r   r   r   r   r   r  r  r  r  r!  r#  r%  r&  r)  r*  r/  r1  r   r2  r5  r7  r9  r<  r=  rA  rQ  r   rO  rT  rZ  r\  r]  r^  ra  rg  rh  rk  rm  networkZ
single_cpurS   ZDatetimeTZDtypers  r}  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  Zskip_if_not_us_localer  r  r  sysmaxsizer  r  r  r  r  r   rg   r  r  r  r  r   r  r  r  r  r	   Zrename_axisr  r  r  r  r  r  r  r  r  paramr  r  r  r  r  r  r  r!  r"  r#  r$  r)  r*  r+  r>  r?  rA  r*   r*   r*   r+   r6   `   s   





	




	
"

b&


	






&





	


0&	 (&( 	 (& 		
u
	!

Fr6   c                  C   sT   t td} |  }tjtdd t|dd W d    d S 1 s#w   Y  d S )Nr   zThe engine type foor   rD   )enginer   r2   r%   rw   rx   r$   r   r_   r=  r*   r*   r+   test_invalid_engineU  s
   "rK  c                  C   sV   t td} |  }tjtdd t|ddd W d    d S 1 s$w   Y  d S )Nr   z&currently pyarrow engine only supportsr   r,  F)rH  r   rI  rJ  r*   r*   r+   test_pyarrow_engine_lines_false]  s
   "rL  c                 C   s   t d tddgddggddgdd	gd
}| }tdd tt|}W d    n1 s1w   Y  tddgddggdtddgddtdd	gddd}t	
|| d S )Nr,  r   r   r>   rj   zrow 1zrow 2zcol 1zcol 2rk   zfuture.infer_stringTr   rH   r  )rw   r9  r	   r%   rS   r;  r   r   r   r!   r&   )r4   rh   r=  r)   r'   r*   r*   r+   $test_json_roundtrip_string_inferencee  s   
rM  c                  C   sZ   t dg di} d}tjt|d t }| |d W d    d S 1 s&w   Y  d S )Nr   r   zuStarting with pandas version 3.0 all arguments of to_json except for the argument 'path_or_buf' will be keyword-only.r   rq   )r	   r!   r"   r#   r   r%   )rh   r(   rf  r*   r*   r+   test_json_pos_args_deprecationv  s   "rN  r,  c                  C   sH   t tdtgddtdtgddd} | jddd	}d
}||ks"J d S )Nr   zint64[pyarrow]rH   r   r-  r8  r-   Tr  z"{"a":1,"b":2}
{"a":null,"b":null}
)r	   r   r   r%   )rh   r)   r'   r*   r*   r+   test_to_json_ea_null  s   rO  c                  C   s2   d} t t| ddj}td}tj||dd d S )Nz#
{"a": 1, "b": 2}
{"a": 3, "b": 4}
Tr   r   )exact)r   r   rN   r   r!   r  )rU   r)   r'   r*   r*   r+   test_read_json_lines_rangeindex  s   rQ  )5rQ  r   decimalr   r   r   r   r   r   rE  r  r@  r8   rw   Zpandas._configr   Zpandas.compatr   Zpandas.util._test_decoratorsutilZ_test_decoratorsr  ZpandasrS   r   r	   r
   r   r   r   r   r   r   Zpandas._testingZ_testingr!   Zpandas.core.arraysr   r   Zpandas.core.arrays.string_arrowr   Zpandas.io.jsonr   r,   r5   r6   rK  rL  rM  rN  Z
skip_if_norO  rQ  r*   r*   r*   r+   <module>   sZ    ,-                
