U
    sVc                     @   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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"ej!ddgd
dd Z	dd Z#G dd dZ$G dd dZ%G dd dZ&dS )    N)IS64is_platform_windows)		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-xj8nt62q/pandas/tests/io/json/test_ujson.py
<dictcomp>0   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   orient3   s    r"   Tc                 C   s   | j S r   r   r    r   r   r   numpy:   s    r#   c                 C   s>   t j}| d ks:|dks:| dkr&|d ks:t r4t j}nt j}|S )Nr   T)npint64r   Zint32Zintp)r#   r"   dtyper   r   r   get_int32_compat_dtype?   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ejd>d?d@dAgdBdC ZdDdE ZdFdG Z ejdHd*ddgdIdJ Z!dKdL Z"dMdN Z#ejdOe$% e$%dPdQdRe$%dSdTdUdVgdWdX Z&dYdZ Z'd[d\ Z(ejd]e)e*+d^e*j,e*j-e*j- gd_d` Z.dadb Z/dcdd Z0dedf Z1dgdh Z2didj Z3ejdkdldmdndogdpdq Z4ejdrdldmgdsdt Z5ejdudvdwdxdydzgd{d| Z6ejd}d~ddgdd Z7ejddddgdd Z8ejdddgdd Z9dd Z:dd Z;dd Z<ejdddgdd Z=ejdddgdd Z>ejddddddgdd Z?dd Z@ejdddddgdd ZAdd ZBdd ZCdd ZDdd ZEdd ZFd*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_decimalL   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 )Nr?   )r5   r6   r8   jsonloadsr7   )Zexpected_outputencode_kwargsoutputr?   string_inputr   r   helper   s    z@TestUltraJSONTests.test_encode_string_conversion.<locals>.helperF)Zencode_html_charsTr   )r:   r?   Znot_html_encodedZhtml_encodedrF   r   rD   r   test_encode_string_conversion   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,   r5   r6   r7   r8   )r:   rH   r;   r<   r=   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_localer5   rA   dumpsr8   )r:   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 )NrI   g=
ףp=@TrL   rJ   r9   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?>ӡ)r5   r7   r6   r8   r$   Zallclose)r:   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r5   r7   r6   r8   )r:   rU   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   )r5   r6   roundr@   rA   r8   r7   )r:   rY   rC   r   r   r   test_encode_double_conversion   s    
z0TestUltraJSONTests.test_encode_double_conversionc                 C   s   d}t |}|dkstd S )Nr0   r/   r5   r6   r8   )r:   Zdecimal_inputrC   r   r   r   test_encode_with_decimal   s    
z+TestUltraJSONTests.test_encode_with_decimalc                 C   sd   g gggd }t |}|t|ks*t|t |ks<tt|}t	|t j|d|j
d d S )N   Tr#   r&   )r5   r6   r@   rA   r8   r7   r$   arrayrO   assert_numpy_array_equalr&   )r:   Znested_inputrC   r   r   r   "test_encode_array_of_nested_arrays   s    

 z5TestUltraJSONTests.test_encode_array_of_nested_arraysc                 C   s^   ddddgd }t |}|t|ks,t|t |ks>ttt	|t j|dd d S )NgcAT@
   Tr#   
r5   r6   r@   rA   r8   r7   rO   rc   r$   rb   )r:   Zdoubles_inputrC   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,   )r2   	   )r5   r6   r@   rA   r8   r7   r\   )r:   rY   rC   r-   Zrounded_inputr   r   r   test_double_precision   s    
z(TestUltraJSONTests.test_double_precisioninvalid_valr`   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raisesr5   r6   )r:   rk   rY   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"r5   r6   r@   rA   r8   r7   )r:   rE   rC   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   r5   r6   r7   r@   rP   r8   rA   )r:   r{   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)r5   r6   r7   r8   r@   rP   )r:   Zescaped_inputr~   r   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   ðr}   )r:   Zsurrogate_inputr~   r   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   ð°TRAILINGNORMALr}   r:   Zfour_bytes_inputr~   r   r   r   r   test_encode_unicode_4bytes_utf82  s
    

z2TestUltraJSONTests.test_encode_unicode_4bytes_utf8c                 C   s@   d}t |}t |}|t|ks*t|t|ks<td S )Nu   ó¿¿¿TRAILINGNORMALr}   r   r   r   r   &test_encode_unicode_4bytes_utf8highest:  s
    

z9TestUltraJSONTests.test_encode_unicode_4bytes_utf8highestc                 C   sj   g ggg}t |}|t|ks&t|t|ks8t|t |ksJttt	
|t j|dd d S )NTrf   )r5   r6   r@   rA   r8   rP   r7   rO   rc   r$   rb   )r:   Zarr_in_arr_inputrC   r   r   r   test_encode_array_in_arrayC  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   r5   r6   r@   rA   r8   rP   r7   )r:   r   rC   r   r   r   test_encode_num_conversionO  s    	
z-TestUltraJSONTests.test_encode_num_conversionc                 C   sZ   ddddg}t |}|t|ks(t|t |ks:ttt	|t j|dd d S )Nr.   r1   r2      Trf   rg   )r:   Z
list_inputrC   r   r   r   test_encode_list_conversion]  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.   r1   r2   r   )Zk1Zk2Zk3Zk4ry   )r:   Z
dict_inputrC   r   r   r   test_encode_dict_conversionh  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   )r:   r   rC   r   r   r   %test_encode_builtin_values_conversiono  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timer5   r6   calendartimegmutctimetuplerq   r@   rA   r8   r7   )r:   Zdatetime_inputrC   expectedr   r   r   test_encode_datetime_conversionv  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   r5   r6   yearmonthdayr   r   rq   r@   rA   r8   r7   )r:   Z
date_inputrC   tupr   r   r   r   test_encode_date_conversion~  s    
z.TestUltraJSONTests.test_encode_date_conversiontestr.   r1   r2   re      r+   < c                 C   s*   t |}d|  d}||ks&td S )N"r5   r6   	isoformatr8   r:   r   rC   r   r   r   r   !test_encode_time_conversion_basic  s    
z4TestUltraJSONTests.test_encode_time_conversion_basicc                 C   s>   t ddddtj}t|}d|  d}||ks:td S Nre   r   r+   r   r   )r   r   pytzutcr5   r6   r   r8   r   r   r   r    test_encode_time_conversion_pytz  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tzutcr5   r6   r   r8   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 nullr^   )r:   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|}ttj|dd}||jd	 ksDtttj|d
d}||jd ksjt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 r   r   i ʚ;msi@B us  nsz*Invalid value 'foo' for option 'date_unit'rn   foo)
r   r   r5   r7   r6   valuer8   rt   ru   rr   )r:   valZstampZ	roundtriprw   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 )Nr|   F)r?   r}   )r:   	unencodedr~   r   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}r5   r7   r   r8   )r:   r{   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 reachedrn   )r   rt   ru   OverflowErrorr5   r6   )r:   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'rn   rt   ru   rr   r5   r7   )r:   Z	jibberishrw   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 valuern   r   )r:   r   rw   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 limitrn   i   r   )r:   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'rn   r   )r:   r   rw   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   rn   )rangert   ru   rr   reescaper5   r7   )r:   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 valuern   r   )r:   r   rw   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   )rq   r5   r7   r8   )r:   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   )r:   wrapped_inputrC   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"r5   r7   r@   rA   r8   )r:   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tt	|t j|dtj
d d S )N    Tra   )r5   r6   r@   rA   r8   r7   rO   rc   r$   rb   r%   r:   
long_inputrC   r   r   r    test_encode_list_long_conversionB  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_conversionT  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 smallrn   )r5   r6   r   r8   rt   ru   rr   rA   )r:   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   )r:   r   r   r   r   test_decode_numeric_int_expg  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'rn   )rt   ru   rs   r5   rA   r:   rw   r   r   r   test_loads_non_str_bytes_raisesm  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r5   r7   r8   )r:   r   docr   r   r   &test_decode_number_with_32bit_sign_bitr  s    z9TestUltraJSONTests.test_decode_number_with_32bit_sign_bitc                 C   s4   t dD ]&}d }|d d d }t| qd S )Nre      å   r1   )r   r6   r5   )r:   r   baseescape_inputr   r   r   test_encode_big_escapey  s    z)TestUltraJSONTests.test_encode_big_escapec                 C   s@   t dD ]2}d }d}||d d d  | }t| qd S )Nre   r      "r   r1   )r   r6   r5   r7   )r:   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   r:   r   r   r   toDict  s    z8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictN)r   r   r   r	  r   r   r   r   DictTest  s   r
  rJ   )r:   r
  orC   r   r   r   r   test_to_dict  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   )r:   r   r   r   r   __init__  s    zETestUltraJSONTests.test_default_handler.<locals>._TestObject.__init__c                    s    dS )Nrecursive_attrr   r  _TestObjectr   r   r    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    s   r  r   rn   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)rs   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   r1   r2   )r   r  r   r   r   my_obj_handler  s    z?TestUltraJSONTests.test_default_handler.<locals>.my_obj_handlerr   r1   r2   bar)default)rt   ru   r   r5   r6   r   r8   rs   r7   r   r@   rA   rP   )r:   rw   r  r  r  r  Zobj_listr   r  r   test_default_handler  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   rI   b_cr   )r:   rI   r   r!  r   r   r   r   r    s    zCTestUltraJSONTests.test_encode_object.<locals>._TestObject.__init__c                 S   s   dS rZ   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.   r1   r2   r   r  )rI   r   r   rW   )r:   r  Ztest_objectr   r   r   test_encode_object  s    z%TestUltraJSONTests.test_encode_object)Gr   r   r   rt   markZskipifr   r>   parametrizerG   rK   rQ   rR   rT   rX   mathpir]   r_   rd   rh   rj   rx   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   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(   K   s  
7
 


 
	

	


"
 
		



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

 

	6r(   c                   @   sb  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ejd"i g ged#i fd$d%ged&i fd'gd$ged(i fd$i d'ged)i fd$d'gd$ged*i fd'd+g d,ged#i fd'd+iged(d-difd'd+d,d$iiied.d-difd$d/d0d,d1iged2d-difg	d3d4 Zd5d6 Zd%S )7TestNumpyJSONTests
bool_inputTFc                 C   s$   t |}tt||ks td S r   )boolr5   r7   r6   r8   )r:   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r&   )r$   rb   r,  r5   r7   r6   rO   rc   )r:   Z
bool_arrayrC   r   r   r   test_bool_array  s     z"TestNumpyJSONTests.test_bool_arrayc                 C   s4   t |j}|d}|tt||ks0td S )Nr.   r$   r&   typer5   r7   r6   r8   r:   any_int_numpy_dtypeklassrS   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.  )
r$   arangerq   astyperb   r5   r7   r6   rO   rc   )r:   r3  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)r%   uint64z-Cannot test 64-bit integer on 32-bit platformr;  r%   )r   rt   skipr$   r&   r1  Ziinfomaxr5   r7   r6   r8   r2  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@r0  r:   float_numpy_dtyper4  rS   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,   )
r$   r7  floatr8  rb   r5   r7   r6   rO   assert_almost_equal)r:   r@  r9  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 )Nre   r+   r,   )
r$   r&   r1  Zfinfor=  rO   rC  r5   r7   r6   r?  r   r   r   test_float_max  s     z!TestNumpyJSONTests.test_float_maxc              	   C   sR   t d}|d}tt tt|| ttjt|dd| d S )N`   )r1   r1   r1   r1   r2   r1   Trf   	r$   r7  reshaperO   rc   rb   r5   r7   r6   r:   r9  r   r   r   test_array_basic  s    

z#TestNumpyJSONTests.test_array_basicshape)re   re   r[   r[   r   )r6  r.   c              	   C   sR   t d}||}tt tt|| ttjt|dd| d S )Nr6  Trf   rG  )r:   rK  r9  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 )NrI   r  g33333sX@r   r  r   r.  )r$   rb   objectr5   r7   r6   rO   rc   )r:   Zarr_listr9  resultr   r   r   test_array_list.  s    z"TestNumpyJSONTests.test_array_listc                 C   sn   t j}t jddd|d}|d}t jtt||d}t	|| tjt|d|d}t	|| d S )NgrhY@gX9vi@r.   r.  rL  Tra   )
r$   Zfloat32r7  rH  rb   r5   r7   r6   rO   rC  )r:   r&   r9  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 momentrn   r.   )	r   r   rt   ru   rs   r5   r6   r$   rb   r   r   r   r   test_0d_arrayJ  s    
z TestNumpyJSONTests.test_0d_arrayz!bad_input,exc_type,err_msg,kwargsz:nesting not supported for object or variable length dtypesr  NzZint\(\) argument must be a string, a bytes-like object or a( real)? number, not 'NoneType'rI   zLCannot decode multidimensional arrays with variable length elements to numpyzVint\(\) argument must be a string, a bytes-like object or a( real)? number, not 'dict'z-invalid literal for int\(\) with base 10: 'a'r   clabelledz(labels only supported up to 2 dimensions   )rI   r   r   z1cannot reshape array of size 3 into shape \(2,1\)c              	   C   s:   t j||d" tjt|fddi| W 5 Q R X d S )Nrn   r#   T)rt   ru   r5   r7   rP   )r:   Z	bad_inputexc_typer   kwargsr   r   r   test_array_numpy_exceptP  s    @z*TestNumpyJSONTests.test_array_numpy_exceptc                 C   s  dg i}t jt |ddd}td|d k s8ttdg|d k sTt|d d ksdtddig}t jt |ddd}tdg|d k sttdg|d k st|d d kstd	}t j|ddd}tjdd
ddddgtd	d}||d k st|d d ks(ttddg|d k sHtd}t j|ddd}tjdd
ddddgtd	d}||d k sttdddg|d k sttddg|d k std S )NrI   Tr#   rT  )r.   r   r   r.   r1   r  z<[{"a": 42, "b":31}, {"a": 24, "c": 99}, {"a": 2.4, "b": 78}]      c   g333333@N   r.  )r2   r1   r   zK{"1": {"a": 42, "b":31}, "2": {"a": 24, "c": 99}, "3": {"a": 2.4, "b": 78}}123)
r5   rA   rP   r$   emptyallr8   rb   rq   rH  )r:   Zlabelled_inputrC   Zinput_dumpsZexpected_valsr   r   r   test_array_numpy_labelled  s.    
   "z,TestNumpyJSONTests.test_array_numpy_labelled)r   r   r   rt   r$  r%  r-  r/  r5  r:  r>  rA  rD  rE  rJ  rM  rP  rQ  rR  rr   rs   rX  rc  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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/d0d1d2d3d4g	e
jd5d6d7gd8d9 Zd:d; Zd<d= Zd>d? Ze
jd@edAdBed6dBedCdDdDdEedCdFdGdEed6dDdHed7dIed7d7dJed7d7d7dKedLdLdLdKg	dMdN ZdOdP ZdQS )RTestPandasJSONTestsc           
      C   sR  |dkr(|r(|j tjjd| d t||}tdddgddd	ggd
dgdddg|d}|d krhi nd|i}|d kr|i nd|i}|j|k st	t
jt
j|f|f|}|j|k st	|dkrt|}	tf |	}nt|}|dkrdddg|_ddg|_n(|dkrddg|_n|dkr.| }|j|k sBt	t|| d S )Nr   zNot idiomatic pandas if orient=r)   r.   r1   r2   r   r[      rI   r   xyzr   columnsr&   r"   r#   r   r   r   r   )node
add_markerrt   r$  xfailr'   r   Zdtypesrb  r8   r5   r7   r6   r   rj  r   Z	transposerO   assert_frame_equal)
r:   r!   r"   r#   r&   dfrB   decode_kwargsrC   r   r   r   r   test_dataframe  s:    



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.   r1   r2   r   r[   re  rI   r   rf  rg  rh  )r   rj  )Zdf1Zdf2r"   )r   copyr5   r7   r6   r8   )r:   r"   ro  nestedrW  expr   r   r   test_dataframe_nested  s      z)TestPandasJSONTests.test_dataframe_nestedc                 C   s   |dkr$|j tjj| dd tdddgddd	ggd
dgdddgtd}|d krZi nd|i}ttjtj	|f|ddd }|d kr|j
}n|dkrddg|_t|| d S )N)r   r   z incompatible for labelled=Truer)   r.   r1   r2   r   r[   re  rI   r   rf  rg  rh  ri  r"   TrY  r   r   )rk  rl  rt   r$  rm  r   rq   r5   r7   r6   Tr   rO   rn  )r:   r"   r!   ro  rW  rC   r   r   r   test_dataframe_numpy_labelled  s&    
z1TestPandasJSONTests.test_dataframe_numpy_labelledc           	   	   C   s"  t ||}tddddddgddd	d
dddg|d }|j|ksDt|d krPi nd|i}|d krdi nd|i}tjtj|f|f|}|j|kst|dkrt|}tf |}nt|}|dkrd |_	| }ddddddg|_
n"|dkrd |_	ddddddg|_
|j|kstt|| d S )Nre   r`      (   2   <   seriesre     r   ri   r+   )namer   r&   r"   r#   r   )Nr   678rm   10Z15)r   r   r   r.   r1   r2   r   r[   )r'   r	   sort_valuesr&   r8   r5   r7   r6   r   r~  r   rO   assert_series_equal)	r:   r"   r#   r&   r   rB   rp  rC   r   r   r   r   test_series  s2    


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 )Nre   r`   rx  ry  rz  r{  r|  re  r}  r   ri   r+   )r~  r   )s1s2r"   )r	   r  rr  r5   r7   r6   r8   )r:   r"   r   rs  rW  rt  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jt|d	d
dd}t|| tttj|dd}t f |}t|| |j|jkstttjtj|ddd	d
}t f |}t|| |j|jkstt ttj|dddd}t|| t tjtj|ddd	d
dd}t|| t ttj|dddd}t|| t tjtj|ddd	d
dd}t|| t ttj|dddd}t|| t tjtj|ddd	d
dd}t|| d S )NrU  -      b   +      r   )r~  Trf   r   )r"   r   r   )	r   r5   r7   r6   rO   assert_index_equalr   r~  r8   )r:   irC   r   r   r   r   
test_index2  sD    

   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/2000r`   )Zperiodsfreqr   r   )r   listr   r5   r6   r$   rb   r7   rO   r  r	   randomZrandnlenr   r   r8  r%   r  )r:   r   rngr<   r=   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 valuern   r   )r:   r  rw   r   r   r   test_decode_invalid_arrayq  s    z-TestPandasJSONTests.test_decode_invalid_arrayr9  r   c                 C   s   |t t|kstd S r   r   rI  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   )r:   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   )r:   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 datarn   z{}
	 ar   r  r   r   r   )test_decode_with_trailing_non_whitespaces  s    z=TestPandasJSONTests.test_decode_with_trailing_non_whitespacesr   c              	   C   s(   t jtdd t| W 5 Q R X d S r   )rt   ru   rr   r5   rA   )r:   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?signrl   r.   c                 C   s&   ||9 }t j|tt|dd d S )NgV瞯<)Zrtol)rO   rC  r5   rA   r   )r:   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   addr5   r6   )r:   r   rf  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[])r5   r6   r  r8   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.   r1   r2   r   r[   re  r}  r   ri   rJ   )r:   r   r~   r   r   r   r   r   test_encode_set  s
    

z#TestPandasJSONTests.test_encode_settdin  )days   r[   )hoursminutessecondsr`   rx  )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   )r:   r  rO  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Dr  r  z{})r   r   Zto_jsonr8   )r:   pro  r   r   r   test_encode_periodindex  s    
z+TestPandasJSONTests.test_encode_periodindexN)r   r   r   rq  ru  rw  r  r  r  r  rt   r$  r%  r  r  r  r  r  r  r  r  r  r  r  r
   r  r  r   r   r   r   rd    sv   (!.	




	


rd  )'r   r   r3   r@   rM   r&  r   r   r   r#   r$   rt   r   Zpandas._libs.jsonZ_libsr5   Zpandas.compatr   r   Zpandasr   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingrO   r   Zfixturer"   r'   r(   r*  rd  r   r   r   r   <module>   s@   ,

      Y