U
    >vf                     @   s
  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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  mZ d dlm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 Zej ddddd	gd
dd Z!G dd dZ"G dd dZ#G dd dZ$dS )    N)IS64)		DataFrameDatetimeIndexIndexNaTPeriodIndexSeries	Timedelta	Timestamp
date_rangec                 C   s   dd |   D S )z
    Sanitize dictionary for JSON by converting all keys to strings.

    Parameters
    ----------
    d : dict
        The dictionary to convert.

    Returns
    -------
    cleaned_dict : dict
    c                 S   s   i | ]\}}t ||qS  )str).0kvr   r   C/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/io/json/test_ujson.py
<dictcomp>-   s      z_clean_dict.<locals>.<dictcomp>)itemsdr   r   r   _clean_dict    s    r   splitrecordsvaluesindex)paramsc                 C   s   | j S N)param)requestr   r   r   orient0   s    r   c                   @   s  e Zd Zejje dddd Zejdddgdd	 Z	ejd
dddgdd Z
dd Zdd Zdd Zejdddgdd Zejdejej gdd Zdd Zd d! Zd"d# Zd$d% Zejd&d'd(d)d*gd+d, Zd-d. Zejd/d0d1gd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zejd@dAdBdCgdDdE ZdFdG Z dHdI Z!ejdJd*ddgdKdL Z"dMdN Z#dOdP Z$ejdQe%& e%&dRdSdTe%&dUdVdWdXgdYdZ Z'd[d\ Z(d]d^ Z)ejd_e*e+,d`e+j-e+j.e+j. gdadb Z/dcdd Z0dedf Z1dgdh Z2didj Z3dkdl Z4ejdmdndodpdqgdrds Z5ejdtdndogdudv Z6ejdwdxdydzd{d|gd}d~ Z7ejddddgdd Z8ejddddgdd Z9ejdddgdd Z:dd Z;dd Z<dd Z=ejdddgdd Z>ejdddgdd Z?ejddddddgdd Z@dd ZAejdddddgdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGd*S )TestUltraJSONTestsz$not compliant on 32-bit, xref #15865)reasonc                 C   s  t d}tj|dd}t|}|dks.tt d}tj|dd}|dksRtt|}|dkshtt d	}tj|dd}|d
kstt|}|dkstt d}tj|dd}|dkstt|}|dkstt d}tj|dd}|dkstt|}|dkstt d}tj|dd}|dks@tt|}|dksXtt d}tj|dd}|dks~tt|}|dkstt d}tj|dd}|dkstt|}|dkstd S )Nz	1337.1337   double_precisiong@z0.95   1.0      ?z0.94z0.9g?z1.95z2.0g       @z-1.95z-2.0g       z0.995   z0.9995   z0.99999999999999944)decimalDecimalujsonencodedecodeAssertionErrorselfsutencodeddecodedr   r   r   test_encode_decimal8   sN    















z&TestUltraJSONTests.test_encode_decimalensure_asciiTFc                    s>   dd}d} fdd}|| ||dd ||dd d S )	Nz"A string \ /   
  	 </script> &z,"A string \\ \/ \b \f \n \r \t <\/script> &"z;"A string \\ \/ \b \f \n \r \t \u003c\/script\u003e \u0026"c                    sJ   t jfd i|}|| ks"tt|ks4tt |ksFtd S )Nr6   )r,   r-   r/   jsonloadsr.   )Zexpected_outputencode_kwargsoutputr6   string_inputr   r   helperx   s    z@TestUltraJSONTests.test_encode_string_conversion.<locals>.helperF)Zencode_html_charsTr   )r1   r6   Znot_html_encodedZhtml_encodedr=   r   r;   r   test_encode_string_conversionp   s    
z0TestUltraJSONTests.test_encode_string_conversionlong_numberlZ:`7{ g#_tgԟpAc                 C   s0   d|i}t j|dd}t |}||ks,td S )Nar"   r#   r,   r-   r.   r/   )r1   r?   r2   r3   r4   r   r   r   test_double_long_numbers   s    
z+TestUltraJSONTests.test_double_long_numbersc              
   C   sj   t j}dD ]Z}t||r
t||4 ttddks@ttjddddksVtW 5 Q R X  qfq
d S )N)zit_IT.UTF-8ZItalian_ItalygˇLz4.78TZprecise_floatgQ@)	locale
LC_NUMERICtmZcan_set_localeZ
set_localer,   r8   dumpsr/   )r1   Zlc_categoryZ
new_localer   r   r   test_encode_non_c_locale   s     z+TestUltraJSONTests.test_encode_non_c_localec                 C   s0   ddi}t |}t j|dd}||ks,td S )Nr@   g=
ףp=@TrC   rA   r0   r   r   r    test_decimal_decode_test_precise   s    
z3TestUltraJSONTests.test_decimal_decode_test_precisec                 C   sx   d}|t t |kstd}|t t |ks8td}|t t |ksTtd}t|t t |sttd S )NgWw'&l7g0.++gj7֖g?>ӡ)r,   r.   r-   r/   npZallclose)r1   numr   r   r   #test_encode_double_tiny_exponential   s    z6TestUltraJSONTests.test_encode_double_tiny_exponentialunicode_keykey1u   بنc                 C   s$   |di}|t t |ks td S )NZvalue1r,   r.   r-   r/   )r1   rM   Zunicode_dictr   r   r   "test_encode_dict_with_unicode_keys   s    z5TestUltraJSONTests.test_encode_dict_with_unicode_keysdouble_inputc                 C   sJ   t |}t|dtt|dks(tt|dtt |dksFtd S N   )r,   r-   roundr7   r8   r/   r.   )r1   rQ   r:   r   r   r   test_encode_double_conversion   s    
z0TestUltraJSONTests.test_encode_double_conversionc                 C   s   d}t |}|dkstd S )Nr'   r&   r,   r-   r/   )r1   Zdecimal_inputr:   r   r   r   test_encode_with_decimal   s    
z+TestUltraJSONTests.test_encode_with_decimalc                 C   s@   g gggd }t |}|t|ks*t|t |ks<td S )N   r,   r-   r7   r8   r/   r.   )r1   Znested_inputr:   r   r   r   "test_encode_array_of_nested_arrays   s    
z5TestUltraJSONTests.test_encode_array_of_nested_arraysc                 C   sB   ddddgd }t |}|t|ks,t|t |ks>td S )NgcAT@
   rY   )r1   Zdoubles_inputr:   r   r   r   test_encode_array_of_doubles   s    
z/TestUltraJSONTests.test_encode_array_of_doublesc                 C   s   d}t j|dd}|t|ks$t|t |ks6tdD ]@}t j||d}t||}|t|ksht|t |ks:tq:d S )Ng )>@r"   r#   )r)   	   )r,   r-   r7   r8   r/   r.   rT   )r1   rQ   r:   r$   Zrounded_inputr   r   r   test_double_precision   s    
z(TestUltraJSONTests.test_double_precisioninvalid_valrX   9Nc              	   C   sF   d}t |trtnt}d}tj||d tj||d W 5 Q R X d S )NgF7ݚ>@zInvalid value '.*' for option 'double_precision', max is '15'|an integer is required \(got type |object cannot be interpreted as an integermatchr#   )
isinstanceint
ValueError	TypeErrorpytestraisesr,   r-   )r1   r_   rQ   expected_exceptionmsgr   r   r   test_invalid_double_precision   s    
z0TestUltraJSONTests.test_invalid_double_precisionc                 C   sB   d}t |}|t|ks t|t |ks2t|dks>td S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t"rY   )r1   r<   r:   r   r   r   test_encode_string_conversion2   s
    
z1TestUltraJSONTests.test_encode_string_conversion2unicode_inputu@   Räksmörgås اسامة بن محمد بن عوض بن لادن
   æ¥Ñc                 C   s<   t |}t |}|t|ks&t|t|ks8td S r   r,   r-   r.   r7   rG   r/   r8   )r1   rn   encdecr   r   r   test_encode_unicode_conversion   s    

z1TestUltraJSONTests.test_encode_unicode_conversionc                 C   s:   d}t |}t |}||ks$t|t|ks6td S )N)r,   r-   r.   r/   r7   rG   )r1   Zescaped_inputrq   rr   r   r   r   test_encode_control_escaping  s
    

z/TestUltraJSONTests.test_encode_control_escapingc                 C   s@   d}t |}t |}|t|ks*t|t|ks<td S )Nu   ðrp   )r1   Zsurrogate_inputrq   rr   r   r   r   "test_encode_unicode_surrogate_pair  s
    

z5TestUltraJSONTests.test_encode_unicode_surrogate_pairc                 C   s@   d}t |}t |}|t|ks*t|t|ks<td S )Nu   ð°TRAILINGNORMALrp   r1   Zfour_bytes_inputrq   rr   r   r   r   test_encode_unicode_4bytes_utf8  s
    

z2TestUltraJSONTests.test_encode_unicode_4bytes_utf8c                 C   s@   d}t |}t |}|t|ks*t|t|ks<td S )Nu   ó¿¿¿TRAILINGNORMALrp   rw   r   r   r   &test_encode_unicode_4bytes_utf8highest  s
    

z9TestUltraJSONTests.test_encode_unicode_4bytes_utf8highestc              	   C   s2   d}d}t jt|d t|g W 5 Q R X d S )Nu   ''zT'utf-8' codec can't encode character '\\udac0' in position 1: surrogates not allowedrb   )rh   ri   UnicodeEncodeErrorr,   rG   )r1   stringrk   r   r   r   test_encode_unicode_error&  s
    z,TestUltraJSONTests.test_encode_unicode_errorc                 C   sN   g ggg}t |}|t|ks&t|t|ks8t|t |ksJtd S r   r,   r-   r7   r8   r/   rG   r.   )r1   Zarr_in_arr_inputr:   r   r   r   test_encode_array_in_array/  s
    

z-TestUltraJSONTests.test_encode_array_in_array	num_inputiz  i         c                 C   sD   t |}|t|kst|t|ks.t|t |ks@td S r   r}   )r1   r   r:   r   r   r   test_encode_num_conversion7  s    	
z-TestUltraJSONTests.test_encode_num_conversionc                 C   s>   ddddg}t |}|t|ks(t|t |ks:td S )Nr%   r(   r)      rY   )r1   Z
list_inputr:   r   r   r   test_encode_list_conversionE  s    
z.TestUltraJSONTests.test_encode_list_conversionc                 C   s@   ddddd}t |}|t|ks*t|t |ks<td S )Nr%   r(   r)   r   )Zk1Zk2Zk3Zk4rY   )r1   Z
dict_inputr:   r   r   r   test_encode_dict_conversionL  s    
z.TestUltraJSONTests.test_encode_dict_conversionbuiltin_valuec                 C   sD   t |}|t|kst|t|ks.t|t |ks@td S r   r}   )r1   r   r:   r   r   r   %test_encode_builtin_values_conversionS  s    
z8TestUltraJSONTests.test_encode_builtin_values_conversionc                 C   s\   t j t }tj|dd}t| }t|t	
|ksBtt|t|ksXtd S )Ns	date_unit)datetimefromtimestamptimer,   r-   calendartimegmutctimetuplere   r7   r8   r/   r.   )r1   Zdatetime_inputr:   expectedr   r   r   test_encode_datetime_conversionZ  s
    z2TestUltraJSONTests.test_encode_datetime_conversionc                 C   sn   t jt }tj|dd}|j|j|jdddf}t	
|}t|t|ksTtt|t|ksjtd S )Nr   r   r   )r   dater   r   r,   r-   yearmonthdayr   r   re   r7   r8   r/   r.   )r1   Z
date_inputr:   tupr   r   r   r   test_encode_date_conversionb  s    
z.TestUltraJSONTests.test_encode_date_conversiontestr%   r(   r)   r[      r"   < c                 C   s*   t |}d|  d}||ks&td S )N"r,   r-   	isoformatr/   r1   r   r:   r   r   r   r   !test_encode_time_conversion_basicl  s    
z4TestUltraJSONTests.test_encode_time_conversion_basicc                 C   s>   t ddddtj}t|}d|  d}||ks:td S Nr[   r   r"   r   r   )r   r   pytzutcr,   r-   r   r/   r   r   r   r    test_encode_time_conversion_pytzu  s    
z3TestUltraJSONTests.test_encode_time_conversion_pytzc                 C   sB   t ddddtj }t|}d|  d}||ks>td S r   )	r   r   dateutiltzZtzutcr,   r-   r   r/   r   r   r   r   $test_encode_time_conversion_dateutil|  s    
z7TestUltraJSONTests.test_encode_time_conversion_dateutildecoded_inputr   c                 C   s   t |dkstdd S )NnullzExpected nullrV   )r1   r   r   r   r   test_encode_as_null  s    z&TestUltraJSONTests.test_encode_as_nullc              	   C   s   t  ddddddd}t|d}ttj|dd	}||jd
 ksJtttj|dd	}||jd ksptttj|dd	}||jd kstttj|dd	}||jkstd}tj	t
|d tj|dd	 W 5 Q R X d S )N           r   iI nsr   r   i ʚ;msi@B us  z*Invalid value 'foo' for option 'date_unit'rb   foo)r   r
   Zas_unitr,   r.   r-   _valuer/   rh   ri   rf   )r1   valZstampZ	roundtriprk   r   r   r   test_datetime_units  s    z&TestUltraJSONTests.test_datetime_unitsc                 C   sH   d}t j|dd}t |}|tj|ddks2t|t|ksDtd S )Nro   F)r6   rp   )r1   	unencodedrq   rr   r   r   r   test_encode_to_utf8  s
    
z&TestUltraJSONTests.test_encode_to_utf8c                 C   s,   d}t |}t t|}||ks(td S )Nz{"obj": 31337}r,   r.   r   r/   )r1   rn   Zdec1Zdec2r   r   r   test_decode_from_unicode  s    
z+TestUltraJSONTests.test_decode_from_unicodec              	   C   sZ   G dd d}G dd d}| }| |_ ||j _ tjtdd t| W 5 Q R X d S )Nc                   @   s   e Zd ZdZdS )z8TestUltraJSONTests.test_encode_recursion_max.<locals>.O2r   N__name__
__module____qualname__memberr   r   r   r   O2  s   r   c                   @   s   e Zd ZdZdS )z8TestUltraJSONTests.test_encode_recursion_max.<locals>.O1r   Nr   r   r   r   r   O1  s   r   Maximum recursion level reachedrb   )r   rh   ri   OverflowErrorr,   r-   )r1   r   r   r   r   r   r   test_encode_recursion_max  s    z,TestUltraJSONTests.test_encode_recursion_maxc              	   C   s0   d}d}t jt|d t| W 5 Q R X d S )Nzfdsa sda v9sa fdsaz0Unexpected character found when decoding 'false'rb   rh   ri   rf   r,   r.   )r1   Z	jibberishrk   r   r   r   test_decode_jibberish  s    z(TestUltraJSONTests.test_decode_jibberishbroken_json[{]}c              	   C   s,   d}t jt|d t| W 5 Q R X d S )NzExpected object or valuerb   r   )r1   r   rk   r   r   r   test_decode_broken_json  s    
z*TestUltraJSONTests.test_decode_broken_jsontoo_big_charc              	   C   s,   t jtdd t|d  W 5 Q R X d S )Nz#Reached object decoding depth limitrb   i   r   )r1   r   r   r   r   test_decode_depth_too_big  s    z,TestUltraJSONTests.test_decode_depth_too_big
bad_stringz"TESTINGz
"TESTING\"Ztrufanc              	   C   s,   d}t jt|d t| W 5 Q R X d S )NzSUnexpected character found when decoding|Unmatched ''"' when when decoding 'string'rb   r   )r1   r   rk   r   r   r   test_decode_bad_string  s    z)TestUltraJSONTests.test_decode_bad_stringzbroken_json, err_msg)z{{1337:""}}z:Key name of object must be 'string' when decoding 'object')z
{{"key":"}z*Unmatched ''"' when when decoding 'string')z[[[truez8Unexpected character found when decoding array value (2)c              
   C   s<   t dD ].}tjtt|d t| W 5 Q R X qd S )Nr   rb   )rangerh   ri   rf   reescaper,   r.   )r1   r   err_msg_r   r   r   test_decode_broken_json_leak  s    z/TestUltraJSONTests.test_decode_broken_json_leakinvalid_dictz{{{{31337}}}}z{{{{"key":}}}}z{{{{"key"}}}}c              	   C   s,   d}t jt|d t| W 5 Q R X d S )Nz{Key name of object must be 'string' when decoding 'object'|No ':' found when decoding object value|Expected object or valuerb   r   )r1   r   rk   r   r   r   test_decode_invalid_dict  s    
z+TestUltraJSONTests.test_decode_invalid_dictnumeric_int_as_strZ31337z-31337c                 C   s   t |t|kstd S r   )re   r,   r.   r/   )r1   r   r   r   r   test_decode_numeric_int
  s    z*TestUltraJSONTests.test_decode_numeric_intc                 C   s   d}t |}|t|ks t|t|ks2t|t |ksDtd}t |}|t|ksdt|t|ksvt|t |kstdt dkstd S )Nz31337   1337 z"  \u0000\r\n "z   
 r}   )r1   wrapped_inputr:   Zalone_inputr   r   r   test_encode_null_character  s    

z-TestUltraJSONTests.test_encode_null_characterc                 C   s    d}t |t|kstd S )Nz"31337 \u0000 31337"r,   r.   r7   r8   r/   )r1   r   r   r   r   test_decode_null_character   s    z-TestUltraJSONTests.test_decode_null_characterc                 C   sB   ddddddg}t |}|t|ks,t|t |ks>td S )N    rY   r1   
long_inputr:   r   r   r    test_encode_list_long_conversion$  s    
z3TestUltraJSONTests.test_encode_list_long_conversionr   r   l    c                 C   sD   t |}|t|kst|t|ks.t|t |ks@td S r   r}   r   r   r   r   test_encode_long_conversion2  s    
z.TestUltraJSONTests.test_encode_long_conversionbigNum                    c              	   C   sJ   t |}t||ksttjtdd t ||ks<tW 5 Q R X d S Nz#Value is too big|Value is too smallrb   )r,   r-   r   r/   rh   ri   rf   r8   )r1   r   encodingr   r   r   #test_dumps_ints_larger_than_maxsize:  s    
z6TestUltraJSONTests.test_dumps_ints_larger_than_maxsizeint_expZ1337E40z1.337E40z1337E+9z	1.337e+40z1.337E-4c                 C   s   t |t|kstd S r   r   )r1   r   r   r   r   test_decode_numeric_int_expE  s    z.TestUltraJSONTests.test_decode_numeric_int_expc              	   C   s,   d}t jt|d td  W 5 Q R X d S )NzExpected 'str' or 'bytes'rb   )rh   ri   rg   r,   r8   r1   rk   r   r   r   test_loads_non_str_bytes_raisesK  s    z2TestUltraJSONTests.test_loads_non_str_bytes_raisesr   l   M+ l        l        l    c                 C   s&   d| d}t |d |ks"td S )Nz{"id": r   idr,   r.   r/   )r1   r   docr   r   r   &test_decode_number_with_32bit_sign_bitP  s    z9TestUltraJSONTests.test_decode_number_with_32bit_sign_bitc                 C   s4   t dD ]&}d }|d d d }t| qd S )Nr[      å   r(   )r   r-   r,   )r1   r   baseescape_inputr   r   r   test_encode_big_escapeW  s    z)TestUltraJSONTests.test_encode_big_escapec                 C   s@   t dD ]2}d }d}||d d d  | }t| qd S )Nr[   r      "r   r(   )r   r-   r,   r.   )r1   r   r   quoter   r   r   r   test_decode_big_escape^  s
    z)TestUltraJSONTests.test_decode_big_escapec                    sD   ddi G  fddd}| }t |}t |}| ks@td S )Nkeyr   c                       s   e Zd Z fddZdS )z1TestUltraJSONTests.test_to_dict.<locals>.DictTestc                    s    S r   r   r1   r   r   r   toDictk  s    z8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictN)r   r   r   r   r   r   r   r   DictTestj  s   r   rA   )r1   r   or:   rr   r   r   r   test_to_dictg  s    

zTestUltraJSONTests.test_to_dictc              	      sX  G  fddd d}t jt|d t d W 5 Q R X dtj dtdksXtdd	 }d
tj d|dksztdd }t jtdd tj d|d W 5 Q R X dd }ttj d|ddkstdd }ttt		dddttj d|dkst d dg}t
t
j|tdttj|tdksTtd S )Nc                       s8   e Zd ZddddZe fddZedddZdS )	z<TestUltraJSONTests.test_default_handler.<locals>._TestObjectNreturnc                 S   s
   || _ d S r   )r   )r1   r   r   r   r   __init__v  s    zETestUltraJSONTests.test_default_handler.<locals>._TestObject.__init__c                    s    dS )Nrecursive_attrr   r   _TestObjectr   r   r  y  s    zKTestUltraJSONTests.test_default_handler.<locals>._TestObject.recursive_attrc                 S   s
   t | jS r   )r   r   r   r   r   r   __str__}  s    zDTestUltraJSONTests.test_default_handler.<locals>._TestObject.__str__)r   r   r   r  propertyr  r   r	  r   r  r   r   r  u  s   r  r   rb   r   z"foo")Zdefault_handlerc                 S   s   dS )NZfoobarr   r   r   r   r   
my_handler  s    z;TestUltraJSONTests.test_default_handler.<locals>.my_handlerz"foobar"c                 S   s   t dd S )NI raise for anything)rg   r  r   r   r   my_handler_raises  s    zBTestUltraJSONTests.test_default_handler.<locals>.my_handler_raisesr  c                 S   s   dS )N*   r   r  r   r   r   my_int_handler  s    z?TestUltraJSONTests.test_default_handler.<locals>.my_int_handlerr  c                 S   s   t  dddS )Nr   r(   r)   )r   r  r   r   r   my_obj_handler  s    z?TestUltraJSONTests.test_default_handler.<locals>.my_obj_handlerr   r(   r)   bar)default)rh   ri   r   r,   r-   r   r/   rg   r.   r   r7   r8   rG   )r1   rk   r  r  r  r  Zobj_listr   r  r   test_default_handlert  s@     
z'TestUltraJSONTests.test_default_handlerc                 C   sB   G dd d}|ddddd}t t |ddddks>td S )	Nc                   @   s"   e Zd ZddddZdd ZdS )z:TestUltraJSONTests.test_encode_object.<locals>._TestObjectNr  c                 S   s   || _ || _|| _|| _d S r   r@   b_cr   )r1   r@   r  r  r   r   r   r   r    s    zCTestUltraJSONTests.test_encode_object.<locals>._TestObject.__init__c                 S   s   dS rR   r   r   r   r   r   e  s    z<TestUltraJSONTests.test_encode_object.<locals>._TestObject.e)r   r   r   r  r  r   r   r   r   r    s   r  r%   r(   r)   r   r  )r@   r  r   rO   )r1   r  Ztest_objectr   r   r   test_encode_object  s    z%TestUltraJSONTests.test_encode_object)Hr   r   r   rh   markZskipifr   r5   parametrizer>   rB   rH   rI   rL   rP   mathpirU   rW   rZ   r\   r^   rl   rm   rs   ru   rv   rx   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   rJ   Z
datetime64naninfr   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    7   s  
7
 


 
	

		


"
 
		





	 



 

	6r    c                   @   s   e Zd Zejdddgdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zejddddgdd Zdd Zdd Zd d! Zd"S )#TestNumpyJSONTests
bool_inputTFc                 C   s$   t |}tt||ks td S r   )boolr,   r.   r-   r/   )r1   r!  r  r   r   r   	test_bool  s    zTestNumpyJSONTests.test_boolc              	   C   sH   t jddddddddgtd}t jtt|td}t|| d S )NTFdtype)rJ   arrayr"  r,   r.   r-   rF   assert_numpy_array_equal)r1   Z
bool_arrayr:   r   r   r   test_bool_array  s     z"TestNumpyJSONTests.test_bool_arrayc                 C   s4   t |j}|d}|tt||ks0td S )Nr%   rJ   r%  typer,   r.   r-   r/   r1   any_int_numpy_dtypeklassrK   r   r   r   test_int  s    zTestNumpyJSONTests.test_intc                 C   sB   t jdtd}||}t jtt||d}t	|| d S )Nd   r$  )
rJ   arangere   astyper&  r,   r.   r-   rF   r'  )r1   r,  arrZ	arr_inputZ
arr_outputr   r   r   test_int_array  s    
 z!TestNumpyJSONTests.test_int_arrayc                 C   sd   |dkrt std t|j}|dkr8tdj}nt|j}|t	t
||ks`td S )N)int64uint64z-Cannot test 64-bit integer on 32-bit platformr5  r4  )r   rh   skiprJ   r%  r*  Ziinfomaxr,   r.   r-   r/   r+  r   r   r   test_int_max  s    
zTestNumpyJSONTests.test_int_maxc                 C   s4   t |j}|d}|tt||ks0td S )NgJY8p@r)  r1   float_numpy_dtyper-  rK   r   r   r   
test_float  s    zTestNumpyJSONTests.test_floatc                 C   sJ   t jdddtd}||}t jttj|dd|d}t	|| d S )Ng      )@gףp=
7g@geX?r$  r"   r#   )
rJ   r0  floatr1  r&  r,   r.   r-   rF   assert_almost_equal)r1   r:  r2  Zfloat_inputZfloat_outputr   r   r   test_float_array  s    
z#TestNumpyJSONTests.test_float_arrayc              	   C   sD   t |j}|t |jd }t|ttj	|dd| d S )Nr[   r"   r#   )
rJ   r%  r*  Zfinfor7  rF   r=  r,   r.   r-   r9  r   r   r   test_float_max  s     z!TestNumpyJSONTests.test_float_maxc              	   C   s6   t d}|d}tt tt|| d S )N`   )r(   r(   r(   r(   r)   r(   	rJ   r0  reshaperF   r'  r&  r,   r.   r-   r1   r2  r   r   r   test_array_basic  s    

z#TestNumpyJSONTests.test_array_basicshape)r[   r[   rS   rS   r   )r/  r%   c              	   C   s6   t d}||}tt tt|| d S )Nr/  rA  )r1   rE  r2  r   r   r   test_array_reshaped  s    

z&TestNumpyJSONTests.test_array_reshapedc              
   C   sV   dg i i g ddddgddig	}t j|td}t jtt|td}t|| d S )Nr@   r  g33333sX@r  r   r   r$  )rJ   r&  objectr,   r.   r-   rF   r'  )r1   Zarr_listr2  resultr   r   r   test_array_list
  s    z"TestNumpyJSONTests.test_array_listc                 C   sL   t j}t jddd|d}|d}t jtt||d}t	|| d S )NgrhY@gX9vi@r%   r$  rF  )
rJ   Zfloat32r0  rB  r&  r,   r.   r-   rF   r=  )r1   r%  r2  Zarr_outr   r   r   test_array_float  s
    
z#TestNumpyJSONTests.test_array_floatc              	   C   s8   t d}tjt|d ttd W 5 Q R X d S )Nz:array(1) (0d array) is not JSON serializable at the momentrb   r%   )	r   r   rh   ri   rg   r,   r-   rJ   r&  r   r   r   r   test_0d_array#  s    
z TestNumpyJSONTests.test_0d_arrayN)r   r   r   rh   r  r  r#  r(  r.  r3  r8  r;  r>  r?  rD  rG  rJ  rK  rL  r   r   r   r   r     s   
	

	r   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dddddgdd Ze	j
dg dggdd Ze	j
dddgdd Ze	j
dd d gd d! Zd"d# Zd$d% Ze	j
d&d d gd'd( Ze	j
d)d*d+d,d-d.d/d0d1d2g	e	j
d3d4d5gd6d7 Zd8d9 Zd:d; Zd<d= Ze	j
d>ed?d@ed4d@edAdBdBdCedAdDdEdCed4dBdFed5dGed5d5dHed5d5d5dIedJdJdJdIg	dKdL ZdMdN ZdOS )PTestPandasJSONTestsc                 C   s  t j}tdddgdddggddgd	d
dg|d}|d kr<i nd|i}|j|k sVtttj|f|}|j|k s|t|dkrt	|}tf |}nt|}|dkrdddg|_
ddg|_n$|dkrddg|_n|dkr| }|j|k stt|| d S )Nr%   r(   r)   r   rS      r@   r  xyz)r   columnsr%  r   r   r   r   r   r   )rJ   r4  r   Zdtypesallr/   r,   r.   r-   r   rR  r   Z	transposerF   Zassert_frame_equal)r1   r   r%  dfr9   r:   rr   r   r   r   test_dataframe+  s0    z"TestPandasJSONTests.test_dataframec                 C   s   t dddgdddggddgd	d
dgd}|| d}|d krBi nd|i}ttj|f|ttj|f|d}ttj|f||kstd S )Nr%   r(   r)   r   rS   rN  r@   r  rO  rP  rQ  )r   rR  )Zdf1Zdf2r   )r   copyr,   r.   r-   r/   )r1   r   rT  nestedkwargsexpr   r   r   test_dataframe_nestedM  s      z)TestPandasJSONTests.test_dataframe_nestedc              	   C   s  t j}tddddddgddd	d
dddg|d }|j|ks@t|d krLi nd|i}ttj|f|}|j|ksvt|dkrt	|}tf |}nt|}|dkrd |_
| }ddddddg|_n |dkrd |_
ddddddg|_|j|kstt|| d S )Nr[   rX      (   2   <   seriesrN     r   r]   r"   )namer   r%  r   r   )Nr   678ra   10Z15)r   r   r   r%   r(   r)   r   rS   )rJ   r4  r   sort_valuesr%  r/   r,   r.   r-   r   ra  r   rF   assert_series_equal)r1   r   r%  r   r9   r:   rr   r   r   r   test_series[  s0    
zTestPandasJSONTests.test_seriesc              	   C   s   t ddddddgddd	d
dddgd }|| d}|d krDi nd|i}ttj|f|ttj|f|d}ttj|f||kstd S )Nr[   rX   r[  r\  r]  r^  r_  rN  r`  r   r]   r"   )ra  r   )s1s2r   )r   rf  rV  r,   r.   r-   r/   )r1   r   r   rW  rX  rY  r   r   r   test_series_nested{  s      
z&TestPandasJSONTests.test_series_nestedc                 C   s  t ddddddgdd}t tt|dd}t|| tttj|d	d
}t f |}t|| |j|jksztt|| |j|jkstt ttj|dd
dd}t|| t ttj|dd
dd}t|| t ttj|dd
dd}t|| d S )N   -      b   +      r   )ra  r   )r   r   r   )	r   r,   r.   r-   rF   assert_index_equalr   ra  r/   )r1   ir:   rr   r   r   r   
test_index  s    
zTestPandasJSONTests.test_indexc                 C   s   d}t ttdddd d}tj||d}t tt|}t	|| t
tjt||d}t
ttj||d}|jjtj}t ||_t|| d S )Nr   z1/1/2000rX   )Zperiodsfreqr   r   )r   listr   r,   r-   rJ   r&  r.   rF   rr  r   randomZrandnlenr   r   r1  r4  rg  )r1   r   rngr3   r4   tsZ
idx_valuesr   r   r   test_datetime_index  s    
z'TestPandasJSONTests.test_datetime_indexinvalid_arrz[31337,]z[,31337]z[]]z[,]c              	   C   s,   d}t jt|d t| W 5 Q R X d S )Nz[Expected object or value|Trailing data|Unexpected character found when decoding array valuerb   r   )r1   r~  rk   r   r   r   test_decode_invalid_array  s    z-TestPandasJSONTests.test_decode_invalid_arrayr2  r   c                 C   s   |t t|kstd S r   r   rC  r   r   r   test_decode_array  s    z%TestPandasJSONTests.test_decode_arrayextreme_numr   r   c                 C   s   |t t|kstd S r   r   )r1   r  r   r   r   test_decode_extreme_numbers  s    z/TestPandasJSONTests.test_decode_extreme_numberstoo_extreme_numr   r   c              	   C   s(   t jtdd t| W 5 Q R X d S r   r   )r1   r  r   r   r   test_decode_too_extreme_numbers  s
    z3TestPandasJSONTests.test_decode_too_extreme_numbersc                 C   s   i t dkstd S )Nz{}
	 r   r   r   r   r   %test_decode_with_trailing_whitespaces  s    z9TestPandasJSONTests.test_decode_with_trailing_whitespacesc              	   C   s(   t jtdd td W 5 Q R X d S )NzTrailing datarb   z{}
	 ar   r   r   r   r   )test_decode_with_trailing_non_whitespaces  s    z=TestPandasJSONTests.test_decode_with_trailing_non_whitespacesvaluec              	   C   s(   t jtdd t| W 5 Q R X d S r   )rh   ri   rf   r,   r8   )r1   r  r   r   r   test_decode_array_with_big_int  s
    z2TestPandasJSONTests.test_decode_array_with_big_intfloat_numberg3ӭ?gRC?gB4?g
LO?g	j?g[_$?gk	?g}?5^I?g?signr`   r%   c                 C   s&   ||9 }t j|tt|dd d S )NgV瞯<)Zrtol)rF   r=  r,   r8   r   )r1   r  r  r   r   r   test_decode_floating_point  s    z.TestPandasJSONTests.test_decode_floating_pointc                 C   s.   t  }tddD ]}|| qt| d S )Nr   i )setr   addr,   r-   )r1   r   rO  r   r   r   test_encode_big_set  s    z'TestPandasJSONTests.test_encode_big_setc                 C   s   dt t kstd S )Nz[])r,   r-   r  r/   r   r   r   r   test_encode_empty_set  s    z)TestPandasJSONTests.test_encode_empty_setc              	   C   sD   ddddddddd	h	}t |}t |}|D ]}||ks.tq.d S )
Nr%   r(   r)   r   rS   rN  r`  r   r]   rA   )r1   r   rq   rr   r   r   r   r   test_encode_set  s
    

z#TestPandasJSONTests.test_encode_settdin  )days   rS   )hoursminutessecondsrX   r[  )r  nanoseconds)r  )microsecondsr  )Zmillisecondsr  r  i  c                 C   s.   t j|dd}d|  d}||ks*td S )NT)Z	iso_datesr   r   )r1   r  rI  r   r   r   r   test_encode_timedelta_iso	  s    z-TestPandasJSONTests.test_encode_timedelta_isoc                 C   s.   t ddgdd}t|d}| dks*td S )Nz
2022-04-06z
2022-04-07Dru  rw  z{})r   r   Zto_jsonr/   )r1   prT  r   r   r   test_encode_periodindex  s    
z+TestPandasJSONTests.test_encode_periodindexN)r   r   r   rU  rZ  rh  rk  rt  r}  rh   r  r  r  r  r  r  r  r  r  r  r  r  r  r	   r  r  r   r   r   r   rM  *  st   " 	




	


rM  )%r   r   r*   r7   rD   r  r   r   r   ZnumpyrJ   rh   r   Zpandas._libs.jsonZ_libsr,   Zpandas.compatr   Zpandasr   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingrF   r   Zfixturer   r    r   rM  r   r   r   r   <module>   s8   ,
     p