U
    f/e                     @   s6  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Zd dlm  mZ d dlmZmZmZ d dl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PY310is_platform_windows)	DataFrameDatetimeIndexIndexNaT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-tiezk1ph/pandas/tests/io/json/test_ujson.py
<dictcomp>1   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   orient4   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(ejd)ejjed*dd+ejd,ejjed*dd+gd-d. Zd/d0 Zejd1d2d3g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-j0e-j0 gdadb Z1dcdd Z2dedf Z3dgdh Z4didj Z5dkdl Z6ejdmdndodpdqgdrds Z7ejdtdndogdudv Z8ejdwdxdydzd{d|gd}d~ Z9ejddddgdd Z:ejddddgdd Z;ejdddgdd Z<dd Z=dd Z>dd Z?dd Z@ejdeAjBdR eAjBdS  gejje dddd ZCejddddddgdd ZDdd ZEejdddddgdd ZFdd ZGdd ZHdd ZIdd ZJd,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_decimalM   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>   )r4   r5   r7   jsonloadsr6   )Zexpected_outputencode_kwargsoutputr>   string_inputr   r   helper   s    z@TestUltraJSONTests.test_encode_string_conversion.<locals>.helperF)Zencode_html_charsTr   )r9   r>   Znot_html_encodedZhtml_encodedrE   r   rC   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+   r4   r5   r6   r7   )r9   rG   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_localer4   r@   dumpsr7   )r9   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 )NrH   g=
ףp=@TrK   rI   r8   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?>ӡ)r4   r6   r5   r7   r$   Zallclose)r9   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)r4   r6   r5   r7   )r9   rT   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   )r4   r5   roundr?   r@   r7   r6   )r9   rW   rB   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.   r4   r5   r7   )r9   Zdecimal_inputrB   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&   )r4   r5   r?   r@   r7   r6   r$   arrayrN   assert_numpy_array_equalr&   )r9   Znested_inputrB   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#   
r4   r5   r?   r@   r7   r6   rN   r`   r$   r_   )r9   Zdoubles_inputrB   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+   )r1   	   )r4   r5   r?   r@   r7   r6   rY   )r9   rW   rB   r,   Zrounded_inputr   r   r   test_double_precision   s    
z(TestUltraJSONTests.test_double_precisioninvalid_valr]   9zFailing on Python 3.10 GH41940)ZmarksNc              	   C   sF   d}t |trtnt}d}tj||d tj||d W 5 Q R X d S )NgF7ݚ>@z`Invalid value '.*' for option 'double_precision', max is '15'|an integer is required \(got type matchr+   )
isinstanceint
ValueError	TypeErrorpytestraisesr4   r5   )r9   rh   rW   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"r4   r5   r?   r@   r7   r6   )r9   rD   rB   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   r4   r5   r6   r?   rO   r7   r@   )r9   rx   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)r4   r5   r6   r7   r?   rO   )r9   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   ðrz   )r9   Zsurrogate_inputr{   r|   r   r   r   "test_encode_unicode_surrogate_pair0  s
    

z5TestUltraJSONTests.test_encode_unicode_surrogate_pairc                 C   s@   d}t |}t |}|t|ks*t|t|ks<td S )Nu   ð°TRAILINGNORMALrz   r9   Zfour_bytes_inputr{   r|   r   r   r   test_encode_unicode_4bytes_utf88  s
    

z2TestUltraJSONTests.test_encode_unicode_4bytes_utf8c                 C   s@   d}t |}t |}|t|ks*t|t|ks<td S )Nu   ó¿¿¿TRAILINGNORMALrz   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 )NTrc   )r4   r5   r?   r@   r7   rO   r6   rN   r`   r$   r_   )r9   Zarr_in_arr_inputrB   r   r   r   test_encode_array_in_arrayI  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   r4   r5   r?   r@   r7   rO   r6   )r9   r   rB   r   r   r   test_encode_num_conversionU  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-   r0   r1      Trc   rd   )r9   Z
list_inputrB   r   r   r   test_encode_list_conversionc  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-   r0   r1   r   )Zk1Zk2Zk3Zk4rv   )r9   Z
dict_inputrB   r   r   r   test_encode_dict_conversionn  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   )r9   r   rB   r   r   r   %test_encode_builtin_values_conversionu  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timer4   r5   calendartimegmutctimetuplern   r?   r@   r7   r6   )r9   Zdatetime_inputrB   expectedr   r   r   test_encode_datetime_conversion|  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   r4   r5   yearmonthdayr   r   rn   r?   r@   r7   r6   )r9   Z
date_inputrB   tupr   r   r   r   test_encode_date_conversion  s    
z.TestUltraJSONTests.test_encode_date_conversiontestr-   r0   r1   rb      r*   < c                 C   s*   t |}d|  d}||ks&td S )N"r4   r5   	isoformatr7   r9   r   rB   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 Nrb   r   r*   r   r   )r   r   pytzutcr4   r5   r   r7   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tzutcr4   r5   r   r7   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[   )r9   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'rk   foo)
r   r   r4   r6   r5   valuer7   rq   rr   ro   )r9   valZstampZ	roundtriprt   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 )Nry   F)r>   rz   )r9   	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}r4   r6   r   r7   )r9   rx   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 reachedrk   )r   rq   rr   OverflowErrorr4   r5   )r9   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'rk   rq   rr   ro   r4   r6   )r9   Z	jibberishrt   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 valuerk   r   )r9   r   rt   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 limitrk   i   r   )r9   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'rk   r   )r9   r   rt   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   rk   )rangerq   rr   ro   reescaper4   r6   )r9   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 valuerk   r   )r9   r   rt   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   )rn   r4   r6   r7   )r9   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   )r9   wrapped_inputrB   Zalone_inputr   r   r   test_encode_null_character4  s    

z-TestUltraJSONTests.test_encode_null_characterc                 C   s    d}t |t|kstd S )Nz"31337 \u0000 31337"r4   r6   r?   r@   r7   )r9   r   r   r   r   test_decode_null_characterD  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    Tr^   )r4   r5   r?   r@   r7   r6   rN   r`   r$   r_   r%   r9   Z
long_inputrB   r   r   r    test_encode_list_long_conversionH  s    
 z3TestUltraJSONTests.test_encode_list_long_conversionc                 C   sH   d}t |}|t|ks t|t|ks2t|t |ksDtd S )Nr   r   r   r   r   r   test_encode_long_conversionZ  s
    
z.TestUltraJSONTests.test_encode_long_conversionbigNumzGH-35288c              	   C   sT   t jd }t|}t||ks$ttjtdd t	||ksFtW 5 Q R X d S )Nr-   Value is too bigrk   )
sysmaxsizer4   r5   r   r7   rq   rr   ro   r@   )r9   r   encodingr   r   r   #test_dumps_ints_larger_than_maxsizeb  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   )r9   r   r   r   r   test_decode_numeric_int_expn  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'rk   )rq   rr   rp   r4   r@   r9   rt   r   r   r   test_loads_non_str_bytes_raisest  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r4   r6   r7   )r9   r   docr   r   r   &test_decode_number_with_32bit_sign_bity  s    z9TestUltraJSONTests.test_decode_number_with_32bit_sign_bitc                 C   s4   t dD ]&}d }|d d d }t| qd S )Nrb      å   r0   )r   r5   r4   )r9   r   baseescape_inputr   r   r   test_encode_big_escape  s    z)TestUltraJSONTests.test_encode_big_escapec                 C   s@   t dD ]2}d }d}||d d d  | }t| qd S )Nrb   r      "r   r0   )r   r5   r4   r6   )r9   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   r9   r   r   r   toDict  s    z8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictN)r   r   r   r  r   r   r   r   DictTest  s   r  rI   )r9   r  orB   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                       s2   e Zd Zdd Ze fddZedddZdS )	z<TestUltraJSONTests.test_default_handler.<locals>._TestObjectc                 S   s
   || _ d S r   )r   )r9   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_attr)returnc                 S   s
   t | jS r   )r   r   r  r   r   r   __str__  s    zDTestUltraJSONTests.test_default_handler.<locals>._TestObject.__str__N)r   r   r   r	  propertyr
  r   r  r   r  r   r   r    s   r  r   rk   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)rp   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   r0   r1   )r   r  r   r   r   my_obj_handler  s    z?TestUltraJSONTests.test_default_handler.<locals>.my_obj_handlerr   r0   r1   bar)default)rq   rr   r   r4   r5   r   r7   rp   r6   r   r?   r@   rO   )r9   rt   r  r  r  r  Zobj_listr   r  r   test_default_handler  s@     
z'TestUltraJSONTests.test_default_handler)Kr   r   r   rq   markZskipifr   r=   parametrizerF   rJ   rP   rQ   rS   rV   mathpirZ   r\   ra   re   rg   r   Zxfailr   ru   rw   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   r(   L   s  
7
 


 



	


"
 
		





	 

 

	r(   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   )boolr4   r6   r5   r7   )r9   r!  br   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$   r_   r"  r4   r6   r5   rN   r`   )r9   Z
bool_arrayrB   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&   typer4   r6   r5   r7   r9   any_int_dtypeklassrR   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$   arangern   astyper_   r4   r6   r5   rN   r`   )r9   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)r%   uint64z-Cannot test 64-bit integer on 32-bit platformr2  r%   )r   rq   skipr$   r&   r(  Ziinfomaxr4   r6   r5   r7   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'  r9   float_dtyper+  rR   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$   r.  floatr/  r_   r4   r6   r5   rN   assert_almost_equal)r9   r7  r0  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 )Nrb   r*   r+   )
r$   r&   r(  Zfinfor4  rN   r:  r4   r6   r5   r6  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`   )r0   r0   r0   r0   r1   r0   Trc   	r$   r.  reshaperN   r`   r_   r4   r6   r5   r9   r0  r   r   r   test_array_basic  s    

z#TestNumpyJSONTests.test_array_basicshape)rb   rb   rX   rX   r   )r-  r-   c              	   C   sR   t d}||}tt tt|| ttjt|dd| d S )Nr-  Trc   r>  )r9   rB  r0  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 )NrH   r  g33333sX@r#  r  r   r%  )r$   r_   objectr4   r6   r5   rN   r`   )r9   Zarr_listr0  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%  rC  Tr^   )
r$   Zfloat32r.  r?  r_   r4   r6   r5   rN   r:  )r9   r&   r0  Zarr_outr   r   r   test_array_float6  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 momentrk   r-   )	r   r   rq   rr   rp   r4   r5   r$   r_   r   r   r   r   test_0d_arrayB  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'rH   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   )rH   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 )Nrk   r#   T)rq   rr   r4   r6   rO   )r9   Z	bad_inputexc_typer   kwargsr   r   r   test_array_numpy_exceptH  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 )NrH   Tr#   rK  )r-   r   r   r-   r0   r  z<[{"a": 42, "b":31}, {"a": 24, "c": 99}, {"a": 2.4, "b": 78}]      c   g333333@N   r%  )r1   r0   r#  zK{"1": {"a": 42, "b":31}, "2": {"a": 24, "c": 99}, "3": {"a": 2.4, "b": 78}}123)
r4   r@   rO   r$   emptyallr7   r_   rn   r?  )r9   Zlabelled_inputrB   Zinput_dumpsZexpected_valsr   r   r   test_array_numpy_labelled  s.    
   "z,TestNumpyJSONTests.test_array_numpy_labelled)r   r   r   rq   r  r  r$  r&  r,  r1  r5  r8  r;  r<  rA  rD  rG  rH  rI  ro   rp   rO  rZ  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d(d) Ze
jd*d+d,d-d.d/d0d1d2d3g	e
jd4d5d6gd7d8 Zd9d: Zd;d< Zd=d> Ze
jd?ed@dAed5dAedBdCdCdDedBdEdFdDed5dCdGed6dHed6d6dIed6d6d6dJedKdKdKdJg	dLdM ZdNS )OTestPandasJSONTestsc           	      C   s>  |dkr|rt d t||}tdddgdddggd	d
gdddg|d}|d krVi nd|i}|d krji nd|i}|j|k sttjtj	|f|f|}|j|k st|dkrt
|}tf |}nt|}|dkrdddg|_ddg|_n(|dkrddg|_n|dkr| }|j|k s.tt|| d S )Nr   zNot idiomatic pandasr-   r0   r1   r   rX      rH   r#  xyzr   columnsr&   r"   r#   r   r   r   r   )rq   r3  r'   r   ZdtypesrY  r7   r4   r6   r5   r   ra  r   Z	transposerN   assert_frame_equal)	r9   r"   r#   r&   dfrA   decode_kwargsrB   r|   r   r   r   test_dataframe  s6    



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-   r0   r1   r   rX   r\  rH   r#  r]  r^  r_  )r   ra  )Zdf1Zdf2r"   )r   copyr4   r6   r5   r7   )r9   r"   rc  nestedrN  expr   r   r   test_dataframe_nested  s      z)TestPandasJSONTests.test_dataframe_nestedc                 C   s   |dkrt d tdddgdddggd	d
gdddgtd}|d krHi 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 with labelled=Truer-   r0   r1   r   rX   r\  rH   r#  r]  r^  r_  r`  r"   TrP  r   r   )rq   r3  r   rn   r4   r6   r5   Tr   rN   rb  )r9   r"   rc  rN  rB   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 )Nrb   r]      (   2   <   seriesr\     r   rf   r*   )namer   r&   r"   r#   r   )Nr   678rj   10Z15)r   r   r   r-   r0   r1   r   rX   )r'   r	   sort_valuesr&   r7   r4   r6   r5   r   rr  r   rN   assert_series_equal)	r9   r"   r#   r&   r   rA   rd  rB   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 )Nrb   r]   rl  rm  rn  ro  rp  r\  rq  r   rf   r*   )rr  r   )s1s2r"   )r	   rw  rf  r4   r6   r5   r7   )r9   r"   r   rg  rN  rh  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 )NrL  -      b   +      r   )rr  Trc   r   )r"   r   r   )	r   r4   r6   r5   rN   assert_index_equalr   rr  r7   )r9   irB   r|   r   r   r   
test_index&  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   r4   r5   r$   r_   r6   rN   r  r	   randomZrandnlenr   r   r/  r%   rx  )r9   r   rngr;   r<   tsZ
idx_valuesr   r   r   test_datetime_indexT  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 valuerk   r   )r9   r  rt   r   r   r   test_decode_invalid_arraye  s    z-TestPandasJSONTests.test_decode_invalid_arrayr0  r   c                 C   s   |t t|kstd S r   r   r@  r   r   r   test_decode_arrayv  s    z%TestPandasJSONTests.test_decode_arrayextreme_numr   r   c                 C   s   |t t|kstd S r   r   )r9   r  r   r   r   test_decode_extreme_numbersz  s    z/TestPandasJSONTests.test_decode_extreme_numberstoo_extreme_numZ9223372036854775808z-90223372036854775809c              	   C   s(   t jtdd t| W 5 Q R X d S )Nz#Value is too big|Value is too smallrk   r   )r9   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 datark   z{}
	 ar   r  r   r   r   )test_decode_with_trailing_non_whitespaces  s    z=TestPandasJSONTests.test_decode_with_trailing_non_whitespacesc              	   C   s(   t jtdd td W 5 Q R X d S )Nr   rk   z[18446098363113800555])rq   rr   ro   r4   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?signri   r-   c                 C   s&   ||9 }t j|tt|dd d S )NgV瞯<)Zrtol)rN   r:  r4   r@   r   )r9   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   addr4   r5   )r9   r   r]  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[])r4   r5   r  r7   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-   r0   r1   r   rX   r\  rq  r   rf   rI   )r9   r   r{   r|   r   r   r   r   test_encode_set  s
    

z#TestPandasJSONTests.test_encode_settdin  )days   rX   )hoursminutessecondsr]   rl  )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   )r9   r  rF  r   r   r   r   test_encode_timedelta_iso  s    z-TestPandasJSONTests.test_encode_timedelta_isoN)r   r   r   re  ri  rk  ry  r|  r  r  rq   r  r  r  r  r  r  r  r  r  r  r  r  r  r
   r  r   r   r   r   r[    sx   &!.	


 
	

r[  )(r   r   r2   r?   rL   r  r   r   r   r   r#   r$   rq   r   Zpandas._libs.jsonZ_libsr4   Zpandas.compatr   r   r   Zpandasr   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingrN   r   Zfixturer"   r'   r(   r   r[  r   r   r   r   <module>   sB   (


      Y