U
    +ifM                     @   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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   R/home/mars/bis/venv/lib/python3.8/site-packages/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(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?ejdddgdd Z@ejdddgdd ZAejddddddgdd ZBdd ZCejdddddgdd ZDdd ZEdd ZFdd ZGdd ZHdd ZId,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>   )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   rX   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   rb   r$   ra   )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   r[   )r9   rX   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   rj   rX   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   rz   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   ðr|   )r9   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|   r9   Zfour_bytes_inputr}   r~   r   r   r   test_encode_unicode_4bytes_utf87  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 )NTre   )r4   r5   r?   r@   r7   rO   r6   rN   rb   r$   ra   )r9   Zarr_in_arr_inputrB   r   r   r   test_encode_array_in_arrayH  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_conversionT  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      Tre   rf   )r9   Z
list_inputrB   r   r   r   test_encode_list_conversionb  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k4rx   )r9   Z
dict_inputrB   r   r   r   test_encode_dict_conversionm  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_conversiont  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utctimetuplerp   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   rp   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   rd      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 Nrd   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'rm   foo)
r   r   r4   r6   r5   valuer7   rs   rt   rq   )r9   valZstampZ	roundtriprv   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|   )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   rz   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 reachedrm   )r   rs   rt   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'rm   rs   rt   rq   r4   r6   )r9   Z	jibberishrv   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 valuerm   r   )r9   r   rv   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 limitrm   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'rm   r   )r9   r   rv   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   rm   )rangers   rt   rq   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 valuerm   r   )r9   r   rv   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   )rp   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_character3  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_characterC  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   rb   r$   ra   r%   r9   
long_inputrB   r   r   r    test_encode_list_long_conversionG  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_conversionY  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 smallrm   )r4   r5   r   r7   rs   rt   rq   r@   )r9   r   encodingr   r   r   #test_dumps_ints_larger_than_maxsizea  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_expl  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'rm   )rs   rt   rr   r4   r@   r9   rv   r   r   r   test_loads_non_str_bytes_raisesr  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_bitw  s    z9TestUltraJSONTests.test_decode_number_with_32bit_sign_bitc                 C   s4   t dD ]&}d }|d d d }t| qd S )Nrd      å   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 )Nrd   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   rm   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)rr   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)rs   rt   r   r4   r5   r   r7   rr   r6   r   r?   r@   rO   )r9   rv   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 Zdd ZdS )z:TestUltraJSONTests.test_encode_object.<locals>._TestObjectc                 S   s   || _ || _|| _|| _d S r   rH   b_cr   )r9   rH   r  r  r   r   r   r   r    s    zCTestUltraJSONTests.test_encode_object.<locals>._TestObject.__init__c                 S   s   dS rY   r   r  r   r   r   e  s    z<TestUltraJSONTests.test_encode_object.<locals>._TestObject.eN)r   r   r   r  r   r   r   r   r   r    s   r  r-   r0   r1   r   r  )rH   r  r   rV   )r9   r  Ztest_objectr   r   r   test_encode_object  s    z%TestUltraJSONTests.test_encode_object)Jr   r   r   rs   markZskipifr   r=   parametrizerF   rJ   rP   rQ   rS   rW   mathpir\   r^   rc   rg   ri   r   Zxfailr   rw   ry   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   )boolr4   r6   r5   r7   )r9   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$   ra   r*  r4   r6   r5   rN   rb   )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_numpy_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$   arangerp   astypera   r4   r6   r5   rN   rb   )r9   r1  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 platformr9  r%   )r   rs   skipr$   r&   r/  Ziinfomaxr4   r6   r5   r7   r0  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_numpy_dtyper2  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$   r5  floatr6  ra   r4   r6   r5   rN   assert_almost_equal)r9   r>  r7  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 )Nrd   r*   r+   )
r$   r&   r/  Zfinfor;  rN   rA  r4   r6   r5   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`   )r0   r0   r0   r0   r1   r0   Tre   	r$   r5  reshaperN   rb   ra   r4   r6   r5   r9   r7  r   r   r   test_array_basic$  s    

z#TestNumpyJSONTests.test_array_basicshape)rd   rd   rZ   rZ   r   )r4  r-   c              	   C   sR   t d}||}tt tt|| ttjt|dd| d S )Nr4  Tre   rE  )r9   rI  r7  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$   ra   objectr4   r6   r5   rN   rb   )r9   Zarr_listr7  resultr   r   r   test_array_list3  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,  rJ  Tr`   )
r$   Zfloat32r5  rF  ra   r4   r6   r5   rN   rA  )r9   r&   r7  Zarr_outr   r   r   test_array_floatC  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 momentrm   r-   )	r   r   rs   rt   rr   r4   r5   r$   ra   r   r   r   r   test_0d_arrayO  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 )Nrm   r#   T)rs   rt   r4   r6   rO   )r9   Z	bad_inputexc_typer   kwargsr   r   r   test_array_numpy_exceptU  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#   rR  )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   ra   rp   rF  )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   rs   r"  r#  r+  r-  r3  r8  r<  r?  rB  rC  rH  rK  rN  rO  rP  rq   rr   rV  ra  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dOS )P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   rZ      rH   r  xyzr   columnsr&   r"   r#   r   r   r   r   )rs   r:  r'   r   Zdtypesr`  r7   r4   r6   r5   r   rh  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   rZ   rc  rH   r  rd  re  rf  )r   rh  )Zdf1Zdf2r"   )r   copyr4   r6   r5   r7   )r9   r"   rj  nestedrU  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   rZ   rc  rH   r  rd  re  rf  rg  r"   TrW  r   r   )rs   r:  r   rp   r4   r6   r5   Tr   rN   ri  )r9   r"   rj  rU  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 )Nrd   r_      (   2   <   seriesrc     r   rh   r*   )namer   r&   r"   r#   r   )Nr   678rl   10Z15)r   r   r   r-   r0   r1   r   rZ   )r'   r	   sort_valuesr&   r7   r4   r6   r5   r   ry  r   rN   assert_series_equal)	r9   r"   r#   r&   r   rA   rk  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 )Nrd   r_   rs  rt  ru  rv  rw  rc  rx  r   rh   r*   )ry  r   )s1s2r"   )r	   r~  rm  r4   r6   r5   r7   )r9   r"   r   rn  rU  ro  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 )NrS  -      b   +      r   )ry  Tre   r   )r"   r   r   )	r   r4   r6   r5   rN   assert_index_equalr   ry  r7   )r9   irB   r~   r   r   r   
test_index3  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$   ra   r6   rN   r  r	   randomZrandnlenr   r   r6  r%   r  )r9   r   rngr;   r<   tsZ
idx_valuesr   r   r   test_datetime_indexa  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 valuerm   r   )r9   r  rv   r   r   r   test_decode_invalid_arrayr  s    z-TestPandasJSONTests.test_decode_invalid_arrayr7  r   c                 C   s   |t t|kstd S r   r   rG  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   )r9   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   )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 datarm   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   )rs   rt   rq   r4   r@   )r9   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?signrk   r-   c                 C   s&   ||9 }t j|tt|dd d S )NgV瞯<)Zrtol)rN   rA  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   rd  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   rZ   rc  rx  r   rh   rI   )r9   r   r}   r~   r   r   r   r   test_encode_set  s
    

z#TestPandasJSONTests.test_encode_settdin  )days   rZ   )hoursminutessecondsr_   rs  )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  rM  r   r   r   r   test_encode_timedelta_iso  s    z-TestPandasJSONTests.test_encode_timedelta_isoN)r   r   r   rl  rp  rr  r  r  r  r  rs   r"  r#  r  r  r  r  r  r  r  r  r  r  r  r
   r  r   r   r   r   rb    st   &!.	




	

rb  )'r   r   r2   r?   rL   r$  r   r   r   r#   r$   rs   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(  rb  r   r   r   r   <module>   s@   (


      Y