o
    i                     @   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!g d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   Z/var/www/edux/Edux_v2/venv/lib/python3.10/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   )Nsplitrecordsvaluesindex)paramsc                 C      | j S Nparamrequestr   r   r   orient3   s   r#   Tc                 C   r   r   r   r!   r   r   r   numpy:   s   r$   c                 C   s@   t j}| d u s|dks| du r|d u st rt j}|S t j}|S )Nr   T)npint64r   int32intp)r$   r#   dtyper   r   r   get_int32_compat_dtype?   s    r*   c                   @   sl  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
g d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$g d%d&d' Zd(d) Zejd*d+d,gd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zejd9g d:d;d< Zd=d> Zd?d@ Z ejdAg dBdCdD Z!dEdF Z"dGdH Z#ejdIe$% e$%dJdKdLe$%dMdNdOdPgdQdR Z&dSdT Z'dUdV Z(ejdWe)e*+dXe*j,e*j-e*j- gdYdZ Z.d[d\ Z/d]d^ Z0d_d` Z1dadb Z2dcdd Z3ejdeg dfdgdh Z4ejdidjdkgdldm Z5ejdng dodpdq Z6ejdrg dsdtdu Z7ejdvg dwdxdy Z8ejdzd{d|gd}d~ Z9dd Z:dd Z;dd Z<ejdddgdd Z=ejdddgdd Z>ejdg ddd Z?dd Z@ejdg ddd ZAdd ZBdd ZCdd ZDdd ZEdd ZFdS )TestUltraJSONTestsz$not compliant on 32-bit, xref #15865reasonc                 C   s  t d}tj|dd}t|}|dksJ t d}tj|dd}|dks)J t|}|dks4J t d	}tj|dd}|d
ksFJ t|}|dksQJ t d}tj|dd}|dkscJ t|}|dksnJ t d}tj|dd}|dksJ t|}|dksJ t d}tj|dd}|dksJ t|}|dksJ t d}tj|dd}|dksJ t|}|dksJ t d}tj|dd}|dksJ t|}|dksJ 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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J t|ksJ t |ks#J d S )NrA   r8   r9   jsonloadsr:   )expected_outputencode_kwargsoutputrA   string_inputr   r   helper   s   z@TestUltraJSONTests.test_encode_string_conversion.<locals>.helperF)encode_html_charsTr   )r<   rA   not_html_encodedhtml_encodedrJ   r   rH   r   test_encode_string_conversion   s   
z0TestUltraJSONTests.test_encode_string_conversionlong_number)lZ:`7{ g#_tgԟpAc                 C   s0   d|i}t j|dd}t |}||ksJ d S )Nar.   r/   r8   r9   r:   )r<   rO   r=   r>   r?   r   r   r   test_double_long_numbers   s   
z+TestUltraJSONTests.test_double_long_numbersc              	   C   s   t j}dD ]:}t||r?t||! ttddks J tjddddks+J W d     d S 1 s7w   Y   d S qd S )N)zit_IT.UTF-8Italian_ItalygˇLz4.78Tprecise_floatgQ@)locale
LC_NUMERICtmcan_set_locale
set_localer8   rD   dumps)r<   lc_category
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J d S )NrP   g=
ףp=@TrT   rQ   r;   r   r   r    test_decimal_decode_test_precise   s   
z3TestUltraJSONTests.test_decimal_decode_test_precisec                 C   sx   d}|t t |ksJ d}|t t |ksJ d}|t t |ks*J d}t|t t |s:J d S )NgWw'&l7g0.++gj7֖g?>ӡ)r8   r:   r9   r%   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J d S )Nvalue1r8   r:   r9   )r<   rc   unicode_dictr   r   r   "test_encode_dict_with_unicode_keys      z5TestUltraJSONTests.test_encode_dict_with_unicode_keysdouble_inputc                 C   sJ   t |}t|dtt|dksJ t|dtt |dks#J d S N   )r8   r9   roundrC   rD   r:   )r<   rj   rG   r   r   r   test_encode_double_conversion   s   
"z0TestUltraJSONTests.test_encode_double_conversionc                 C   s   d}t |}|dksJ d S )Nr3   r2   r8   r9   )r<   decimal_inputrG   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J |t |ksJ t|}t|t j|d|j	d d S )N   Tr$   r)   )
r8   r9   rC   rD   r:   r%   arrayrX   assert_numpy_array_equalr)   )r<   nested_inputrG   r   r   r   "test_encode_array_of_nested_arrays   s   

z5TestUltraJSONTests.test_encode_array_of_nested_arraysc                 C   sZ   g dd }t |}|t|ksJ |t |ksJ tt|t j|dd d S )N)cAT@rx   rx   rx   
   Tr$   	r8   r9   rC   rD   r:   rX   ru   r%   rt   )r<   doubles_inputrG   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J |t |ksJ dD ] }t j||d}t||}|t|ks4J |t |ks=J qd S )Ng )>@r.   r/   )r5   	   )r8   r9   rC   rD   r:   rm   )r<   rj   rG   r0   rounded_inputr   r   r   test_double_precision   s   
z(TestUltraJSONTests.test_double_precisioninvalid_val)rr   9Nc                 C   s\   d}t |tr	tnt}d}tj||d tj||d W d    d S 1 s'w   Y  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raisesr8   r9   )r<   r   rj   expected_exceptionmsgr   r   r   test_invalid_double_precision   s   
"z0TestUltraJSONTests.test_invalid_double_precisionc                 C   sB   d}t |}|t|ksJ |t |ksJ |dksJ d S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t"rB   )r<   rI   rG   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J |t|ksJ d S r   r8   r9   r:   rC   r[   rD   )r<   r   encdecr   r   r   test_encode_unicode_conversion  s   

z1TestUltraJSONTests.test_encode_unicode_conversionc                 C   s:   d}t |}t |}||ksJ |t|ksJ d S )N)r8   r9   r:   rC   r[   )r<   escaped_inputr   r   r   r   r   test_encode_control_escaping"  s
   

z/TestUltraJSONTests.test_encode_control_escapingc                 C   @   d}t |}t |}|t|ksJ |t|ksJ d S )Nu   ðr   )r<   surrogate_inputr   r   r   r   r   "test_encode_unicode_surrogate_pair*  
   

z5TestUltraJSONTests.test_encode_unicode_surrogate_pairc                 C   r   )Nu   ð°TRAILINGNORMALr   r<   four_bytes_inputr   r   r   r   r   test_encode_unicode_4bytes_utf82  r   z2TestUltraJSONTests.test_encode_unicode_4bytes_utf8c                 C   r   )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J |t|ksJ |t |ks%J tt	|t j|dd d S )NTrz   )
r8   r9   rC   rD   r[   r:   rX   ru   r%   rt   )r<   arr_in_arr_inputrG   r   r   r   test_encode_array_in_arrayC  s   

z-TestUltraJSONTests.test_encode_array_in_array	num_input)iz  i         c                 C   D   t |}|t|ksJ |t|ksJ |t |ks J d S r   r8   r9   rC   rD   r[   r:   )r<   r   rG   r   r   r   test_encode_num_conversionO  s   
	z-TestUltraJSONTests.test_encode_num_conversionc                 C   sV   g d}t |}|t|ksJ |t |ksJ tt|t j|dd d S )N)r1   r4   r5      Trz   r{   )r<   
list_inputrG   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J |t |ksJ d S )Nr1   r4   r5   r   )k1k2k3k4rB   )r<   
dict_inputrG   r   r   r   test_encode_dict_conversionh  s   
z.TestUltraJSONTests.test_encode_dict_conversionbuiltin_value)NTFc                 C   r   r   r   )r<   r   rG   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s!J t|t|ks,J d S )Ns	date_unit)datetimefromtimestamptimer8   r9   calendartimegmutctimetupler   rC   rD   r:   )r<   datetime_inputrG   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s*J t|t|ks5J d S )Nr   r   r   )r   dater   r   r8   r9   yearmonthdayr   r   r   rC   rD   r:   )r<   
date_inputrG   tupr   r   r   r   test_encode_date_conversion~  s   
z.TestUltraJSONTests.test_encode_date_conversiontestr1   r4   r5   ry      r.   < c                 C   s*   t |}d|  d}||ksJ d S )N"r8   r9   	isoformatr<   r   rG   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J d S Nry   r   r.   r   r   )r   r   pytzutcr8   r9   r   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J d S r   )r   r   dateutiltztzutcr8   r9   r   r   r   r   r   $test_encode_time_conversion_dateutil  s   
z7TestUltraJSONTests.test_encode_time_conversion_dateutildecoded_inputr   c                 C   s   t |dksJ dd S )NnullzExpected nullro   )r<   r   r   r   r   test_encode_as_null     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s"J ttj|d
d}||jd ks5J ttj|dd}||jd ksHJ ttj|dd}||jksYJ d}tjt|d tj|dd W d    d S 1 suw   Y  d S )N           r   iI r   r   i ʚ;msi@B us  nsz*Invalid value 'foo' for option 'date_unit'r   foo)	r   r   r8   r:   r9   valuer   r   r   )r<   valstamp	roundtripr   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sJ |t|ks"J d S )Nr   F)rA   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J d S )Nz{"obj": 31337}r8   r:   r   )r<   r   dec1dec2r   r   r   test_decode_from_unicode  s   
z+TestUltraJSONTests.test_decode_from_unicodec                 C   sp   G dd d}G dd d}| }| |_ ||j _ tjtdd t| W d    d S 1 s1w   Y  d S )Nc                   @      e Zd ZdZdS )z8TestUltraJSONTests.test_encode_recursion_max.<locals>.O2r   N__name__
__module____qualname__memberr   r   r   r   O2      r   c                   @   r   )z8TestUltraJSONTests.test_encode_recursion_max.<locals>.O1r   Nr   r   r   r   r   O1  r   r   Maximum recursion level reachedr   )r   r   r   OverflowErrorr8   r9   )r<   r   r   r   r   r   r   test_encode_recursion_max  s   "z,TestUltraJSONTests.test_encode_recursion_maxc                 C   sF   d}d}t jt|d t| W d    d S 1 sw   Y  d S )Nzfdsa sda v9sa fdsaz0Unexpected character found when decoding 'false'r   r   r   r   r8   r:   )r<   	jibberishr   r   r   r   test_decode_jibberish  s
   "z(TestUltraJSONTests.test_decode_jibberishbroken_json)[{]}c                 C   B   d}t jt|d t| W d    d S 1 sw   Y  d S )NzExpected object or valuer   r   )r<   r   r   r   r   r   test_decode_broken_json  s   
"z*TestUltraJSONTests.test_decode_broken_jsontoo_big_charr   r   c                 C   sB   t jtdd t|d  W d    d S 1 sw   Y  d S )Nz#Reached object decoding depth limitr   i   r   )r<   r  r   r   r   test_decode_depth_too_big  s   "z,TestUltraJSONTests.test_decode_depth_too_big
bad_string)z"TESTINGz
"TESTING\"trufanc                 C   r  )NzSUnexpected character found when decoding|Unmatched ''"' when when decoding 'string'r   r   )r<   r  r   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   sP   t dD ]!}tjtt|d t| W d    n1 s w   Y  qd S )Nr   r   )ranger   r   r   reescaper8   r:   )r<   r   err_msg_r   r   r   test_decode_broken_json_leak  s   z/TestUltraJSONTests.test_decode_broken_json_leakinvalid_dict)z{{{{31337}}}}z{{{{"key":}}}}z{{{{"key"}}}}c                 C   r  )Nz{Key name of object must be 'string' when decoding 'object'|No ':' found when decoding object value|Expected object or valuer   r   )r<   r  r   r   r   r   test_decode_invalid_dict  s
   
"z+TestUltraJSONTests.test_decode_invalid_dictnumeric_int_as_str31337z-31337c                 C   s   t |t|ksJ d S r   )r   r8   r:   )r<   r  r   r   r   test_decode_numeric_int(  r   z*TestUltraJSONTests.test_decode_numeric_intc                 C   s   d}t |}|t|ksJ |t|ksJ |t |ks"J d}t |}|t|ks2J |t|ks;J |t |ksDJ dt dksMJ d S )Nz31337   1337 z"  \u0000\r\n "z   
 r   )r<   wrapped_inputrG   alone_inputr   r   r   test_encode_null_character.  s   

z-TestUltraJSONTests.test_encode_null_characterc                 C   s    d}t |t|ksJ d S )Nz"31337 \u0000 31337"r8   r:   rC   rD   )r<   r  r   r   r   test_decode_null_character>  s   z-TestUltraJSONTests.test_decode_null_characterc                 C   sZ   g d}t |}|t|ksJ |t |ksJ tt|t j|dtj	d d S )N)    r  r  r  r  r  Trs   )
r8   r9   rC   rD   r:   rX   ru   r%   rt   r&   r<   
long_inputrG   r   r   r    test_encode_list_long_conversionB  s   
z3TestUltraJSONTests.test_encode_list_long_conversionr  r  l    c                 C   r   r   r   r  r   r   r   test_encode_long_conversionT  s   
z.TestUltraJSONTests.test_encode_long_conversionbigNum                    c                 C   s`   t |}t||ksJ tjtdd t ||ksJ W d    d S 1 s)w   Y  d S Nz#Value is too big|Value is too smallr   )r8   r9   r   r   r   r   rD   )r<   r"  encodingr   r   r   #test_dumps_ints_larger_than_maxsize\  s   
"z6TestUltraJSONTests.test_dumps_ints_larger_than_maxsizeint_exp)1337E40z1.337E40z1337E+9z	1.337e+40z1.337E-4c                 C   s   t |t|ksJ d S r   r  )r<   r(  r   r   r   test_decode_numeric_int_expg  s   z.TestUltraJSONTests.test_decode_numeric_int_expc                 C   sB   d}t jt|d td  W d    d S 1 sw   Y  d S )NzExpected 'str' or 'bytes'r   )r   r   r   r8   rD   r<   r   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J d S )Nz{"id": r  idr8   r:   )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 )Nry      å   r4   )r  r9   r8   )r<   r  baseescape_inputr   r   r   test_encode_big_escapey  s
   z)TestUltraJSONTests.test_encode_big_escapec                 C   s@   t dD ]}d }d}||d d d  | }t| qd S )Nry   r1     "r2  r4   )r  r9   r8   r:   )r<   r  r3  quoter4  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 J 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     z8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictN)r   r   r   r;  r   r   r   r   DictTest  s    r=  rQ   )r<   r=  orG   r   r   r   r   test_to_dict  s   

zTestUltraJSONTests.test_to_dictc              	      s|  G  fddd d}t jt|d t d W d    n1 s$w   Y  dtj dtdks6J dd	 }d
tj d|dksGJ dd }t jtdd tj d|d W d    n1 sfw   Y  dd }ttj d|ddksJ dd }tttdddttj d|dksJ  d dg}t	
t	j|tdttj|tdksJ d S )Nc                       s4   e Zd Zd	ddZe fddZdefddZdS )
z<TestUltraJSONTests.test_default_handler.<locals>._TestObjectreturnNc                 S   s
   || _ d S r   )r   )r<   r   r   r   r   __init__     
zETestUltraJSONTests.test_default_handler.<locals>._TestObject.__init__c                    s    dS )Nrecursive_attrr   r:  _TestObjectr   r   rC    s   zKTestUltraJSONTests.test_default_handler.<locals>._TestObject.recursive_attrc                 S   s
   t | jS r   )r   r   r:  r   r   r   __str__  rB  zDTestUltraJSONTests.test_default_handler.<locals>._TestObject.__str__r@  N)r   r   r   rA  propertyrC  r   rF  r   rD  r   r   rE    s
    
rE  r   r   r   z"foo")default_handlerc                 S      dS )Nfoobarr   r  r   r   r   
my_handler  r<  z;TestUltraJSONTests.test_default_handler.<locals>.my_handlerz"foobar"c                 S   s   t d)NI raise for anything)r   rL  r   r   r   my_handler_raises  s   zBTestUltraJSONTests.test_default_handler.<locals>.my_handler_raisesrN  c                 S   rJ  )N*   r   rL  r   r   r   my_int_handler  r<  z?TestUltraJSONTests.test_default_handler.<locals>.my_int_handlerrP  c                 S   s   t  dddS )Nr   r4   r5   )r   rL  r   r   r   my_obj_handler  s   z?TestUltraJSONTests.test_default_handler.<locals>.my_obj_handlerr   r4   r5   bar)default)r   r   r   r8   r9   r   r   r:   r   rC   rD   r[   )r<   r   rM  rO  rQ  rR  obj_listr   rD  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J d S )	Nc                   @   s   e Zd ZdddZdd ZdS )z:TestUltraJSONTests.test_encode_object.<locals>._TestObjectr@  Nc                 S   s   || _ || _|| _|| _d S r   rP   b_cr   )r<   rP   rX  rY  r   r   r   r   rA    s   
zCTestUltraJSONTests.test_encode_object.<locals>._TestObject.__init__c                 S   rJ  rk   r   r:  r   r   r   e  r<  z<TestUltraJSONTests.test_encode_object.<locals>._TestObject.erG  )r   r   r   rA  rZ  r   r   r   r   rE    s    
rE  r1   r4   r5   r   rW  )rP   rX  r   rf   )r<   rE  test_objectr   r   r   test_encode_object  s   $z%TestUltraJSONTests.test_encode_objectN)Gr   r   r   r   markskipifr   r@   parametrizerN   rR   r^   r_   rb   rh   mathpirn   rq   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   
datetime64naninfr   r   r   r   r   r   r  r  r  r  r  r  r  r  r   r!  r'  r*  r,  r0  r5  r8  r?  rV  r\  r   r   r   r   r+   K   s    
7



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



	





	6r+   c                   @   s`  e Zd Zejdddgdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zejdg d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-d.d*d/iged0d+difg	d1d2 Zd3d4 Zd#S )5TestNumpyJSONTests
bool_inputTFc                 C   s$   t |}tt||ksJ d S r   )boolr8   r:   r9   )r<   rf  rX  r   r   r   	test_bool  ri   zTestNumpyJSONTests.test_boolc                 C   s<   t jg dtd}t jtt|td}t|| d S )N)TFTTFTFFr)   )r%   rt   rg  r8   r:   r9   rX   ru   )r<   
bool_arrayrG   r   r   r   test_bool_array  s
   z"TestNumpyJSONTests.test_bool_arrayc                 C   4   t |j}|d}|tt||ksJ d S )Nr1   r%   r)   typer8   r:   r9   r<   any_int_numpy_dtypeklassra   r   r   r   test_int      zTestNumpyJSONTests.test_intc                 C   sB   t jdtd}||}t jtt||d}t	|| d S )Nd   ri  )
r%   aranger   astypert   r8   r:   r9   rX   ru   )r<   rp  arr	arr_input
arr_outputr   r   r   test_int_array  s   
z!TestNumpyJSONTests.test_int_arrayc                 C   sd   |dv rt std t|j}|dkrtdj}nt|j}|t	t
||ks0J d S )N)r&   uint64z-Cannot test 64-bit integer on 32-bit platformr{  r&   )r   r   skipr%   r)   rn  iinfomaxr8   r:   r9   ro  r   r   r   test_int_max  s   
 zTestNumpyJSONTests.test_int_maxc                 C   rl  )NgJY8p@rm  r<   float_numpy_dtyperq  ra   r   r   r   
test_float  rs  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?ri  r.   r/   )
r%   ru  floatrv  rt   r8   r:   r9   rX   assert_almost_equal)r<   r  rw  float_input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 )Nry   r.   r/   )
r%   r)   rn  finfor~  rX   r  r8   r:   r9   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`   )r4   r4   r4   r4   r5   r4   Trz   	r%   ru  reshaperX   ru   rt   r8   r:   r9   r<   rw  r   r   r   test_array_basic  s   

 z#TestNumpyJSONTests.test_array_basicshape))ry   ry   rl   rl   r   )rt  r1   c              	   C   sR   t d}||}tt tt|| ttjt|dd| d S )Nrt  Trz   r  )r<   r  rw  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 )NrP   rP  g33333sX@rX  r9  r   ri  )r%   rt   objectr8   r:   r9   rX   ru   )r<   arr_listrw  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@r1   ri  r  Trs   )
r%   float32ru  r  rt   r8   r:   r9   rX   r  )r<   r)   rw  arr_outr   r   r   test_array_float>  s   
z#TestNumpyJSONTests.test_array_floatc                 C   sN   t d}tjt|d ttd W d    d S 1 s w   Y  d S )Nz:array(1) (0d array) is not JSON serializable at the momentr   r1   )	r  r  r   r   r   r8   r9   r%   rt   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 dtypesrP  NzZint\(\) argument must be a string, a bytes-like object or a( real)? number, not 'NoneType'rP   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'rX  clabelledz(labels only supported up to 2 dimensions   )rP   rX  r   z1cannot reshape array of size 3 into shape \(2,1\)c                 C   sP   t j||d tjt|fddi| W d    d S 1 s!w   Y  d S )Nr   r$   T)r   r   r8   r:   r[   )r<   	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 sJ tdg|d k s*J |d d u s2J ddig}t jt |ddd}tdg|d k sPJ tdg|d k s^J |d d u sfJ d	}t j|ddd}tjg d
tdd}||d k sJ |d d u sJ tddg|d k sJ d}t j|ddd}tjg d
tdd}||d k sJ tg d|d k sJ tddg|d k sJ d S )NrP   Tr$   r  )r1   r   r   r1   r4   rP  z<[{"a": 42, "b":31}, {"a": 24, "c": 99}, {"a": 2.4, "b": 78}])rP        c   g333333@N   ri  )r5   r4   rX  zK{"1": {"a": 42, "b":31}, "2": {"a": 24, "c": 99}, "3": {"a": 2.4, "b": 78}})123)	r8   rD   r[   r%   emptyallrt   r   r  )r<   labelled_inputrG   input_dumpsexpected_valsr   r   r   test_array_numpy_labelled  s.   
"z,TestNumpyJSONTests.test_array_numpy_labelled)r   r   r   r   r]  r_  rh  rk  rr  rz  r  r  r  r  r  r  r  r  r  r   r   r  r  r   r   r   r   re    s    
	




?re  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g d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(g d)e
jd*d+d,gd-d. Zd/d0 Zd1d2 Zd3d4 Ze
jd5ed6d7ed+d7ed8d9d9d:ed8d;d<d:ed+d9d=ed,d>ed,d,d?ed,d,d,d@edAdAdAd@g	dBdC ZdDdE ZdFS )GTestPandasJSONTestsc           
      C   sN  |dkr|r|j tjjd| d t||}tg dg dgddgg d|d	}|d u r1i nd
|i}|d u r;i nd|i}|j|k sHJ t	j
t	j|fi |fi |}|j|k saJ |dkrqt|}	tdi |	}nt|}|dkrg d|_ddg|_n|dkrddg|_n|dkr| }|j|k sJ t|| d S )Nr   zNot idiomatic pandas if orient=r,   r1   r4   r5   r   rl      rP   rX  xyzr   columnsr)   r#   r$   r   r   )r   r1   r4   r   r1   r   r   )node
add_markerr   r]  xfailr*   r   dtypesr  r8   r:   r9   r   r  r   	transposerX   assert_frame_equal)
r<   r"   r#   r$   r)   dfrF   decode_kwargsrG   r   r   r   r   test_dataframe  s:   
 
z"TestPandasJSONTests.test_dataframec                 C   s   t g dg dgddgg dd}|| d}|d u ri nd|i}ttj|fi |ttj|fi |d}ttj|fi ||ksKJ d S )	Nr  r  rP   rX  r  )r   r  )df1df2r#   )r   copyr8   r:   r9   )r<   r#   r  nestedr  expr   r   r   test_dataframe_nested  s   $z)TestPandasJSONTests.test_dataframe_nestedc                 C   s   |dv r|j tjj| dd tg dg dgddgg dtd	}|d u r*i nd
|i}ttjtj	|fi |ddd }|d u rG|j
}n	|dkrPddg|_t|| d S )N)r   r   z incompatible for labelled=Truer,   r  r  rP   rX  r  r  r#   Tr  r   r   r1   )r  r  r   r]  r  r   r   r8   r:   r9   Tr   rX   r  )r<   r#   r"   r  r  rG   r   r   r   test_dataframe_numpy_labelled  s&   
z1TestPandasJSONTests.test_dataframe_numpy_labelledc           	      C   s
  t ||}tg ddg d|d }|j|ksJ |d u r i nd|i}|d u r*i nd|i}tjtj|fi |fi |}|j|ksEJ |dkrUt|}tdi |}nt|}|dv rjd |_| }g d	|_	n|d
v rvd |_g d|_	|j|ks}J t
|| d S )Nry   rr      (   2   <   seriesr     r   r~   ry   r.   )namer   r)   r#   r$   r   )Nr   )678r   1015)r   r   )r   r1   r4   r5   r   rl   r   )r*   r	   sort_valuesr)   r8   r:   r9   r   r  r   rX   assert_series_equal)	r<   r#   r$   r)   r   rF   r  rG   r   r   r   r   test_series  s6   
 
zTestPandasJSONTests.test_seriesc                 C   s   t g ddg dd }|| d}|d u ri nd|i}ttj|fi |ttj|fi |d}ttj|fi ||ksGJ d S )Nr  r  r  )r  r   )s1s2r#   )r	   r  r  r8   r:   r9   )r<   r#   r   r  r  r  r   r   r   test_series_nested%  s   $z&TestPandasJSONTests.test_series_nestedc                 C   s  t g ddd}t tt|dd}t|| t tjt|dddd}t|| tttj|dd}t d
i |}t|| |j|jksOJ ttjtj|dddd}t d
i |}t|| |j|jksrJ 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 )N)r  -      b   +      r   )r  Trz   r   )r#   r   r   r   )r   r8   r:   r9   rX   assert_index_equalr   r  )r<   irG   r   r   r   r   
test_index2  s>   zTestPandasJSONTests.test_indexc                 C   s   d}t ttdddd d}tj||d}t tt|}t	|| t
tjt||d}t
ttj||d}|jjtj}t ||_t|| d S )Nr   z1/1/2000rr   )periodsfreqr   r   )r   listr   r8   r9   r%   rt   r:   rX   r  r	   randomrandnlenr   r   rv  r&   r  )r<   r   rngr>   r?   ts
idx_valuesr   r   r   test_datetime_index`  s   
z'TestPandasJSONTests.test_datetime_indexinvalid_arr)z[31337,]z[,31337]z[]]z[,]c                 C   r  )Nz[Expected object or value|Trailing data|Unexpected character found when decoding array valuer   r   )r<   r  r   r   r   r   test_decode_invalid_arrayq  s
   "z-TestPandasJSONTests.test_decode_invalid_arrayrw  r   c                 C      |t t|ksJ d S r   r   r  r   r   r   test_decode_array     z%TestPandasJSONTests.test_decode_arrayextreme_numr  r   c                 C   r  r   r   )r<   r  r   r   r   test_decode_extreme_numbers  r  z/TestPandasJSONTests.test_decode_extreme_numberstoo_extreme_numr#  r$  c                 C   >   t jtdd t| W d    d S 1 sw   Y  d S r%  r   )r<   r  r   r   r   test_decode_too_extreme_numbers     "z3TestPandasJSONTests.test_decode_too_extreme_numbersc                 C   s   i t dks	J 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 d    d S 1 sw   Y  d S )NzTrailing datar   z{}
	 ar   r:  r   r   r   )test_decode_with_trailing_non_whitespaces  s   "z=TestPandasJSONTests.test_decode_with_trailing_non_whitespacesr   c                 C   r  r%  )r   r   r   r8   rD   )r<   r   r   r   r   test_decode_array_with_big_int  r  z2TestPandasJSONTests.test_decode_array_with_big_intfloat_number)	g3ӭ?gRC?gB4?g
LO?g	j?g[_$?gk	?g}?5^I?g?signr   r1   c                 C   s&   ||9 }t j|tt|dd d S )NgV瞯<)rtol)rX   r  r8   rD   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  addr8   r9   )r<   r   r  r   r   r   test_encode_big_set  s   z'TestPandasJSONTests.test_encode_big_setc                 C   s   dt t ks
J d S )Nz[])r8   r9   r  r:  r   r   r   test_encode_empty_set  s   z)TestPandasJSONTests.test_encode_empty_setc                 C   s6   h d}t |}t |}|D ]}||v sJ qd S )N>	   r1   r4   r5   r   rl   r  r  r   r~   rQ   )r<   r   r   r   r   r   r   r   test_encode_set  s   

z#TestPandasJSONTests.test_encode_settdin  )days   rl   )hoursminutessecondsrr   r  )r
  nanoseconds)r  )microsecondsr  )millisecondsr  r  i  c                 C   s.   t j|dd}d|  d}||ksJ d S )NT)	iso_datesr   r   )r<   r	  r  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J d S )Nz
2022-04-06z
2022-04-07Dr  r  z{})r   r   to_json)r<   pr  r   r   r   test_encode_periodindex  s   
z+TestPandasJSONTests.test_encode_periodindexN)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   r   r    s^    (!.
	



	


r  )'r   r   r6   rC   rV   r`  r  r   r   r$   r%   r   r   pandas._libs.json_libsr8   pandas.compatr   r   pandasr   r   r   r   r   r	   r
   r   r   pandas._testing_testingrX   r   fixturer#   r*   r+   re  r  r   r   r   r   <module>   sB    ,

      Y