a
    PfH                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZd dlZd dlm  mZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ dd Zej g dddd	 Z!G d
d dZ"G dd dZ#G dd dZ$dS )    N)IS64)		DataFrameDatetimeIndexIndexNaTPeriodIndexSeries	Timedelta	Timestamp
date_rangec                 C   s   dd |   D S )z
    Sanitize dictionary for JSON by converting all keys to strings.

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

    Returns
    -------
    cleaned_dict : dict
    c                 S   s   i | ]\}}t ||qS  )str).0kvr   r   X/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/io/json/test_ujson.py
<dictcomp>-       z_clean_dict.<locals>.<dictcomp>)itemsdr   r   r   _clean_dict    s    r   )Nsplitrecordsvaluesindex)paramsc                 C   s   | j S N)param)requestr   r   r   orient0   s    r    c                   @   s|  e Zd Zejje dddd Zejdddgdd	 Z	ejd
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d9d: Zejd;g d<d=d> Zd?d@ Z dAdB Z!ejdCg dDdEdF Z"dGdH Z#dIdJ Z$ejdKe%& e%&dLdMdNe%&dOdPdQdRgdSdT Z'dUdV Z(dWdX Z)ejdYe*e+,dZe+j-e+j.e+j. gd[d\ Z/d]d^ Z0d_d` Z1dadb Z2dcdd Z3dedf Z4ejdgg dhdidj Z5ejdkdldmgdndo Z6ejdpg dqdrds Z7ejdtg dudvdw Z8ejdxg dydzd{ Z9ejd|d}d~gdd Z:dd Z;dd Z<dd Z=ejdddgdd Z>ejdddgdd Z?ejdg ddd Z@dd ZAejdg ddd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdS )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sRJ t|}|dkshJ 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sJ t|}|dksJ t d}tj|dd}|dks@J t|}|dksXJ t d}tj|dd}|dks~J 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ujson_dumpsujson_loadsselfsutencodeddecodedr   r   r   test_encode_decimal8   sN    















z&TestUltraJSONTests.test_encode_decimalensure_asciiTFc                    s>   dd}d} fdd}|| ||dd ||dd d S )	Nz"A string \ /   
  	 </script> &z,"A string \\ \/ \b \f \n \r \t <\/script> &"z;"A string \\ \/ \b \f \n \r \t \u003c\/script\u003e \u0026"c                    sJ   t jfd i|}|| ks"J t|ks4J t |ksFJ d S )Nr6   r-   r.   jsonloadsr/   )Zexpected_outputencode_kwargsoutputr6   string_inputr   r   helperx   s    z@TestUltraJSONTests.test_encode_string_conversion.<locals>.helperF)Zencode_html_charsTr   )r1   r6   Znot_html_encodedZhtml_encodedr>   r   r<   r   test_encode_string_conversionp   s    
z0TestUltraJSONTests.test_encode_string_conversionlong_number)lZ:`7{ g#_tgԟpAc                 C   s0   d|i}t j|dd}t |}||ks,J d S )Nar#   r$   r-   r.   r/   )r1   r@   r2   r3   r4   r   r   r   test_double_long_numbers   s    
z+TestUltraJSONTests.test_double_long_numbersc              	   C   s~   t j}dD ]n}t||r
t||> ttddks@J tjddddksVJ W d    n1 sj0    Y   qzq
d S )N)zit_IT.UTF-8ZItalian_ItalygˇLz4.78TZprecise_floatgQ@)locale
LC_NUMERICtmZcan_set_localeZ
set_localer-   r/   r.   )r1   Zlc_categoryZ
new_localer   r   r   test_encode_non_c_locale   s    4z+TestUltraJSONTests.test_encode_non_c_localec                 C   s0   ddi}t |}t j|dd}||ks,J d S )NrA   g=
ףp=@TrD   rB   r0   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s8J d}|t t |ksTJ d}t|t t |stJ d S )NgWw'&l7g0.++gj7֖g?>ӡ)r-   r/   r.   npZallclose)r1   numr   r   r   #test_encode_double_tiny_exponential   s    z6TestUltraJSONTests.test_encode_double_tiny_exponentialunicode_keykey1u   بنc                 C   s$   |di}|t t |ks J d S )NZvalue1r-   r/   r.   )r1   rM   Zunicode_dictr   r   r   "test_encode_dict_with_unicode_keys   s    z5TestUltraJSONTests.test_encode_dict_with_unicode_keysdouble_inputc                 C   sJ   t |}t|dtt|dks(J t|dtt |dksFJ d S N   )r-   r.   roundr8   r9   r/   )r1   rQ   r;   r   r   r   test_encode_double_conversion   s    
z0TestUltraJSONTests.test_encode_double_conversionc                 C   s   d}t |}|dksJ d S )Nr(   r'   r-   r.   )r1   Zdecimal_inputr;   r   r   r   test_encode_with_decimal   s    
z+TestUltraJSONTests.test_encode_with_decimalc                 C   s@   g gggd }t |}|t|ks*J |t |ks<J d S )N   r7   )r1   Znested_inputr;   r   r   r   "test_encode_array_of_nested_arrays   s    
z5TestUltraJSONTests.test_encode_array_of_nested_arraysc                 C   s>   g dd }t |}|t|ks(J |t |ks:J d S )N)cAT@rZ   rZ   rZ   
   r7   )r1   Zdoubles_inputr;   r   r   r   test_encode_array_of_doubles   s    
z/TestUltraJSONTests.test_encode_array_of_doublesc                 C   s   d}t j|dd}|t|ks$J |t |ks6J dD ]@}t j||d}t||}|t|kshJ |t |ks:J q:d S )Ng )>@r#   r$   )r*   	   )r-   r.   r8   r9   r/   rT   )r1   rQ   r;   r%   Zrounded_inputr   r   r   test_double_precision   s    
z(TestUltraJSONTests.test_double_precisioninvalid_val)rX   9Nc                 C   sZ   d}t |trtnt}d}tj||d tj||d W d    n1 sL0    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raisesr-   r.   )r1   r_   rQ   Z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s2J |dks>J d S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t"r7   )r1   r=   r;   r   r   r   test_encode_string_conversion2   s
    
z1TestUltraJSONTests.test_encode_string_conversion2unicode_inputu@   Räksmörgås اسامة بن محمد بن عوض بن لادن
   æ¥Ñc                 C   s<   t |}t |}|t|ks&J |t|ks8J d S r   r-   r.   r/   r8   dumpsr9   )r1   rm   encdecr   r   r   test_encode_unicode_conversion   s    

z1TestUltraJSONTests.test_encode_unicode_conversionc                 C   s:   d}t |}t |}||ks$J |t|ks6J d S )N)r-   r.   r/   r8   rp   )r1   Zescaped_inputrq   rr   r   r   r   test_encode_control_escaping  s
    

z/TestUltraJSONTests.test_encode_control_escapingc                 C   s@   d}t |}t |}|t|ks*J |t|ks<J d S )Nu   ðro   )r1   Zsurrogate_inputrq   rr   r   r   r   "test_encode_unicode_surrogate_pair  s
    

z5TestUltraJSONTests.test_encode_unicode_surrogate_pairc                 C   s@   d}t |}t |}|t|ks*J |t|ks<J d S )Nu   ð°TRAILINGNORMALro   r1   Zfour_bytes_inputrq   rr   r   r   r   test_encode_unicode_4bytes_utf8  s
    

z2TestUltraJSONTests.test_encode_unicode_4bytes_utf8c                 C   s@   d}t |}t |}|t|ks*J |t|ks<J d S )Nu   ó¿¿¿TRAILINGNORMALro   rw   r   r   r   &test_encode_unicode_4bytes_utf8highest  s
    

z9TestUltraJSONTests.test_encode_unicode_4bytes_utf8highestc                 C   sF   d}d}t jt|d t|g W d    n1 s80    Y  d S )Nu   ''zT'utf-8' codec can't encode character '\\udac0' in position 1: surrogates not allowedrb   )rh   ri   UnicodeEncodeErrorr-   r.   )r1   stringrj   r   r   r   test_encode_unicode_error&  s
    z,TestUltraJSONTests.test_encode_unicode_errorc                 C   sN   g ggg}t |}|t|ks&J |t|ks8J |t |ksJJ d S r   r-   r.   r8   r9   rp   r/   )r1   Zarr_in_arr_inputr;   r   r   r   test_encode_array_in_array/  s
    

z-TestUltraJSONTests.test_encode_array_in_array	num_input)iz  i         c                 C   sD   t |}|t|ksJ |t|ks.J |t |ks@J d S r   r}   )r1   r   r;   r   r   r   test_encode_num_conversion7  s    	
z-TestUltraJSONTests.test_encode_num_conversionc                 C   s:   g d}t |}|t|ks$J |t |ks6J d S )N)r&   r)   r*      r7   )r1   Z
list_inputr;   r   r   r   test_encode_list_conversionE  s    
z.TestUltraJSONTests.test_encode_list_conversionc                 C   s@   ddddd}t |}|t|ks*J |t |ks<J d S )Nr&   r)   r*   r   )Zk1Zk2Zk3Zk4r7   )r1   Z
dict_inputr;   r   r   r   test_encode_dict_conversionL  s    
z.TestUltraJSONTests.test_encode_dict_conversionbuiltin_value)NTFc                 C   sD   t |}|t|ksJ |t|ks.J |t |ks@J d S r   r}   )r1   r   r;   r   r   r   %test_encode_builtin_values_conversionS  s    
z8TestUltraJSONTests.test_encode_builtin_values_conversionc                 C   s\   t j t }tj|dd}t| }t|t	
|ksBJ t|t|ksXJ d S )Ns	date_unit)datetimefromtimestamptimer-   r.   calendartimegmutctimetuplere   r8   r9   r/   )r1   Zdatetime_inputr;   expectedr   r   r   test_encode_datetime_conversionZ  s
    z2TestUltraJSONTests.test_encode_datetime_conversionc                 C   sn   t jt }tj|dd}|j|j|jdddf}t	
|}t|t|ksTJ t|t|ksjJ d S )Nr   r   r   )r   dater   r   r-   r.   yearmonthdayr   r   re   r8   r9   r/   )r1   Z
date_inputr;   tupr   r   r   r   test_encode_date_conversionb  s    
z.TestUltraJSONTests.test_encode_date_conversiontestr&   r)   r*   r[      r#   < c                 C   s*   t |}d|  d}||ks&J d S )N"r-   r.   	isoformatr1   r   r;   r   r   r   r   !test_encode_time_conversion_basicl  s    
z4TestUltraJSONTests.test_encode_time_conversion_basicc                 C   s>   t ddddtj}t|}d|  d}||ks:J d S Nr[   r   r#   r   r   )r   r   pytzutcr-   r.   r   r   r   r   r    test_encode_time_conversion_pytzu  s    
z3TestUltraJSONTests.test_encode_time_conversion_pytzc                 C   sB   t ddddtj }t|}d|  d}||ks>J d S r   )r   r   dateutiltzZtzutcr-   r.   r   r   r   r   r   $test_encode_time_conversion_dateutil|  s    
z7TestUltraJSONTests.test_encode_time_conversion_dateutildecoded_inputr   c                 C   s   t |dksJ dd S )NnullzExpected nullrV   )r1   r   r   r   r   test_encode_as_null  s    z&TestUltraJSONTests.test_encode_as_nullc              	   C   s   t  ddddddd}t|d}ttj|dd	}||jd
 ksJJ ttj|dd	}||jd kspJ ttj|dd	}||jd ksJ ttj|dd	}||jksJ d}tjt	|d tj|dd	 W d    n1 s0    Y  d S )N           r   iI nsr   r   i ʚ;msi@B us  z*Invalid value 'foo' for option 'date_unit'rb   foo)
r   r
   Zas_unitr-   r/   r.   _valuerh   ri   rf   )r1   valZstampZ	roundtriprj   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s2J |t|ksDJ d S )Nrn   F)r6   ro   )r1   	unencodedrq   rr   r   r   r   test_encode_to_utf8  s
    
z&TestUltraJSONTests.test_encode_to_utf8c                 C   s,   d}t |}t t|}||ks(J d S )Nz{"obj": 31337}r-   r/   r   )r1   rm   Zdec1Zdec2r   r   r   test_decode_from_unicode  s    
z+TestUltraJSONTests.test_decode_from_unicodec                 C   sn   G dd d}G dd d}| }| |_ ||j _ tjtdd t| W d    n1 s`0    Y  d S )Nc                   @   s   e Zd ZdZdS )z8TestUltraJSONTests.test_encode_recursion_max.<locals>.O2r   N__name__
__module____qualname__memberr   r   r   r   O2  s   r   c                   @   s   e Zd ZdZdS )z8TestUltraJSONTests.test_encode_recursion_max.<locals>.O1r   Nr   r   r   r   r   O1  s   r   Maximum recursion level reachedrb   )r   rh   ri   OverflowErrorr-   r.   )r1   r   r   r   r   r   r   test_encode_recursion_max  s    z,TestUltraJSONTests.test_encode_recursion_maxc                 C   sD   d}d}t jt|d t| W d    n1 s60    Y  d S )Nzfdsa sda v9sa fdsaz0Unexpected character found when decoding 'false'rb   rh   ri   rf   r-   r/   )r1   Z	jibberishrj   r   r   r   test_decode_jibberish  s    z(TestUltraJSONTests.test_decode_jibberishbroken_json)[{]}c                 C   s@   d}t jt|d t| W d    n1 s20    Y  d S )NzExpected object or valuerb   r   )r1   r   rj   r   r   r   test_decode_broken_json  s    
z*TestUltraJSONTests.test_decode_broken_jsontoo_big_charr   r   c                 C   s@   t jtdd t|d  W d    n1 s20    Y  d S )Nz#Reached object decoding depth limitrb   i   r   )r1   r   r   r   r   test_decode_depth_too_big  s    z,TestUltraJSONTests.test_decode_depth_too_big
bad_string)z"TESTINGz
"TESTING\"Ztrufanc                 C   s@   d}t jt|d t| W d    n1 s20    Y  d S )NzSUnexpected character found when decoding|Unmatched ''"' when when decoding 'string'rb   r   )r1   r   rj   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 ]B}tjtt|d t| W d    q1 s@0    Y  qd S )Nr   rb   )rangerh   ri   rf   reescaper-   r/   )r1   r   err_msg_r   r   r   test_decode_broken_json_leak  s    z/TestUltraJSONTests.test_decode_broken_json_leakinvalid_dict)z{{{{31337}}}}z{{{{"key":}}}}z{{{{"key"}}}}c                 C   s@   d}t jt|d t| W d    n1 s20    Y  d S )Nz{Key name of object must be 'string' when decoding 'object'|No ':' found when decoding object value|Expected object or valuerb   r   )r1   r   rj   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J d S r   )re   r-   r/   )r1   r   r   r   r   test_decode_numeric_int
  s    z*TestUltraJSONTests.test_decode_numeric_intc                 C   s   d}t |}|t|ks J |t|ks2J |t |ksDJ d}t |}|t|ksdJ |t|ksvJ |t |ksJ dt dksJ d S )Nz31337   1337 z"  \u0000\r\n "z   
 r}   )r1   wrapped_inputr;   Zalone_inputr   r   r   test_encode_null_character  s    

z-TestUltraJSONTests.test_encode_null_characterc                 C   s    d}t |t|ksJ d S )Nz"31337 \u0000 31337"r-   r/   r8   r9   )r1   r   r   r   r   test_decode_null_character   s    z-TestUltraJSONTests.test_decode_null_characterc                 C   s:   g d}t |}|t|ks$J |t |ks6J d S )N)    r   r   r   r   r   r7   r1   
long_inputr;   r   r   r    test_encode_list_long_conversion$  s    
z3TestUltraJSONTests.test_encode_list_long_conversionr   r   l    c                 C   sD   t |}|t|ksJ |t|ks.J |t |ks@J d S r   r}   r   r   r   r   test_encode_long_conversion2  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    n1 sP0    Y  d S Nz#Value is too big|Value is too smallrb   )r-   r.   r   rh   ri   rf   r/   )r1   r   encodingr   r   r   #test_dumps_ints_larger_than_maxsize:  s    
z6TestUltraJSONTests.test_dumps_ints_larger_than_maxsizeint_exp)Z1337E40z1.337E40z1337E+9z	1.337e+40z1.337E-4c                 C   s   t |t|ksJ d S r   r   )r1   r   r   r   r   test_decode_numeric_int_expE  s    z.TestUltraJSONTests.test_decode_numeric_int_expc                 C   s@   d}t jt|d td  W d    n1 s20    Y  d S )Nz/a bytes-like object is required, not 'NoneType'rb   )rh   ri   rg   r-   r/   r1   rj   r   r   r   test_loads_non_str_bytes_raisesK  s    z2TestUltraJSONTests.test_loads_non_str_bytes_raisesr   )l   M+ l        l        l    c                 C   s&   d| d}t |d |ks"J d S )Nz{"id": r   idr-   r/   )r1   r   docr   r   r   &test_decode_number_with_32bit_sign_bitP  s    z9TestUltraJSONTests.test_decode_number_with_32bit_sign_bitc                 C   s4   t dD ]&}d }|d d d }t| qd S )Nr[      å   r)   )r   encoder-   r.   )r1   r   baseescape_inputr   r   r   test_encode_big_escapeW  s    z)TestUltraJSONTests.test_encode_big_escapec                 C   s@   t dD ]2}d }d}||d d d  | }t| qd S )Nr[   r      "r   r)   )r   r   r-   r/   )r1   r   r   quoter   r   r   r   test_decode_big_escape^  s
    z)TestUltraJSONTests.test_decode_big_escapec                    sD   ddi G  fddd}| }t |}t |}| ks@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   r1   r   r   r   toDictk  s    z8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictN)r   r   r   r   r   r   r   r   DictTestj  s   r  rB   )r1   r  or;   rr   r   r   r   test_to_dictg  s    

zTestUltraJSONTests.test_to_dictc              	      s  G  fddd d}t jt|d t d W d    n1 sH0    Y  dtj dtdkslJ dd	 }d
tj d|dksJ dd }t jtdd" tj d|d W d    n1 s0    Y  dd }ttj d|ddksJ dd }tttdddttj d|dks>J  d dg}t	
t	j|tdttj|tdks|J d S )Nc                       s8   e Zd ZddddZe fddZedddZdS )	z<TestUltraJSONTests.test_default_handler.<locals>._TestObjectNreturnc                 S   s
   || _ d S r   )r   )r1   r   r   r   r   __init__v  s    zETestUltraJSONTests.test_default_handler.<locals>._TestObject.__init__c                    s    dS )Nrecursive_attrr   r   _TestObjectr   r   r  y  s    zKTestUltraJSONTests.test_default_handler.<locals>._TestObject.recursive_attrc                 S   s
   t | jS r   )r   r   r   r   r   r   __str__}  s    zDTestUltraJSONTests.test_default_handler.<locals>._TestObject.__str__)r   r   r   r  propertyr  r   r
  r   r  r   r   r	  u  s   r	  r   rb   r   z"foo")Zdefault_handlerc                 S   s   dS )NZfoobarr   r   r   r   r   
my_handler  s    z;TestUltraJSONTests.test_default_handler.<locals>.my_handlerz"foobar"c                 S   s   t dd S )NI raise for anything)rg   r  r   r   r   my_handler_raises  s    zBTestUltraJSONTests.test_default_handler.<locals>.my_handler_raisesr  c                 S   s   dS )N*   r   r  r   r   r   my_int_handler  s    z?TestUltraJSONTests.test_default_handler.<locals>.my_int_handlerr  c                 S   s   t  dddS )Nr   r)   r*   )r   r  r   r   r   my_obj_handler  s    z?TestUltraJSONTests.test_default_handler.<locals>.my_obj_handlerr   r)   r*   bar)default)rh   ri   r   r-   r.   r   rg   r/   r   r8   r9   rp   )r1   rj   r  r  r  r  Zobj_listr   r  r   test_default_handlert  s>    ,0
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dZdd ZdS )z:TestUltraJSONTests.test_encode_object.<locals>._TestObjectNr  c                 S   s   || _ || _|| _|| _d S r   rA   b_cr   )r1   rA   r  r  r   r   r   r   r    s    zCTestUltraJSONTests.test_encode_object.<locals>._TestObject.__init__c                 S   s   dS rR   r   r   r   r   r   e  s    z<TestUltraJSONTests.test_encode_object.<locals>._TestObject.e)r   r   r   r  r  r   r   r   r   r	    s   r	  r&   r)   r*   r   r  )rA   r  r   rO   )r1   r	  Ztest_objectr   r   r   test_encode_object  s    z%TestUltraJSONTests.test_encode_objectc                 C   s   t jdksJ d S )Nzpandas._libs.json)r-   r   r   r   r   r   test_ujson__name__  s    z%TestUltraJSONTests.test_ujson__name__N)Ir   r   r   rh   markZskipifr   r5   parametrizer?   rC   rH   rI   rL   rP   mathpirU   rW   rY   r\   r^   rk   rl   rs   ru   rv   rx   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   rJ   Z
datetime64naninfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r   r!   7   s   
7




	

		


"

		



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



	6r!   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d d! Zd"S )#TestNumpyJSONTests
bool_inputTFc                 C   s$   t |}tt||ks J d S r   )boolr-   r/   r.   )r1   r#  r  r   r   r   	test_bool  s    zTestNumpyJSONTests.test_boolc                 C   s<   t jg dtd}t jtt|td}t|| d S )N)TFTTFTFFdtype)rJ   arrayr$  r-   r/   r.   rG   assert_numpy_array_equal)r1   Z
bool_arrayr;   r   r   r   test_bool_array  s
    z"TestNumpyJSONTests.test_bool_arrayc                 C   s4   t |j}|d}|tt||ks0J d S )Nr&   rJ   r'  typer-   r/   r.   r1   any_int_numpy_dtypeklassrK   r   r   r   test_int  s    zTestNumpyJSONTests.test_intc                 C   sB   t jdtd}||}t jtt||d}t	|| d S )Nd   r&  )
rJ   arangere   astyper(  r-   r/   r.   rG   r)  )r1   r.  arrZ	arr_inputZ
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r8tdj}nt|j}|t	t
||ks`J d S )N)int64uint64z-Cannot test 64-bit integer on 32-bit platformr7  r6  )r   rh   skiprJ   r'  r,  Ziinfomaxr-   r/   r.   r-  r   r   r   test_int_max  s    
zTestNumpyJSONTests.test_int_maxc                 C   s4   t |j}|d}|tt||ks0J d S )NgJY8p@r+  r1   float_numpy_dtyper/  rK   r   r   r   
test_float  s    zTestNumpyJSONTests.test_floatc                 C   sJ   t jdddtd}||}t jttj|dd|d}t	|| d S )Ng      )@gףp=
7g@geX?r&  r#   r$   )
rJ   r2  floatr3  r(  r-   r/   r.   rG   assert_almost_equal)r1   r<  r4  Zfloat_inputZfloat_outputr   r   r   test_float_array  s    
z#TestNumpyJSONTests.test_float_arrayc              	   C   sD   t |j}|t |jd }t|ttj	|dd| d S )Nr[   r#   r$   )
rJ   r'  r,  Zfinfor9  rG   r?  r-   r/   r.   r;  r   r   r   test_float_max  s
    z!TestNumpyJSONTests.test_float_maxc              	   C   s6   t d}|d}tt tt|| d S )N`   )r)   r)   r)   r)   r*   r)   	rJ   r2  reshaperG   r)  r(  r-   r/   r.   r1   r4  r   r   r   test_array_basic  s
    

z#TestNumpyJSONTests.test_array_basicshape))r[   r[   rS   rS   r   )r1  r&   c              	   C   s6   t d}||}tt tt|| d S )Nr1  rC  )r1   rG  r4  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 )NrA   r  g33333sX@r  r   r   r&  )rJ   r(  objectr-   r/   r.   rG   r)  )r1   Zarr_listr4  resultr   r   r   test_array_list  s    z"TestNumpyJSONTests.test_array_listc                 C   sL   t j}t jddd|d}|d}t jtt||d}t	|| d S )NgrhY@gX9vi@r&   r&  rH  )
rJ   Zfloat32r2  rD  r(  r-   r/   r.   rG   r?  )r1   r'  r4  Zarr_outr   r   r   test_array_float&  s
    
z#TestNumpyJSONTests.test_array_floatc                 C   sL   t d}tjt|d  ttd W d    n1 s>0    Y  d S )Nz>array(1) (numpy-scalar) is not JSON serializable at the momentrb   r&   )	r   r   rh   ri   rg   r-   r.   rJ   r(  r   r   r   r   test_0d_array/  s
    z TestNumpyJSONTests.test_0d_arrayc                 C   sL   t d}tjt|d  ttd W d    n1 s>0    Y  d S )Nz@1234.5.* \(numpy-scalar\) is not JSON serializable at the momentrb   g     J@)	r   compilerh   ri   rg   r-   r.   rJ   Z
longdoubler   r   r   r   test_array_long_double7  s
    z)TestNumpyJSONTests.test_array_long_doubleN)r   r   r   rh   r  r  r%  r*  r0  r5  r:  r=  r@  rA  rF  rI  rL  rM  rN  rP  r   r   r   r   r"    s    
	

	r"  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
d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-d. Zd/d0 Zd1d2 Ze	j
d3ed4d5ed)d5ed6d7d7d8ed6d9d:d8ed)d7d;ed*d<ed*d*d=ed*d*d*d>ed?d?d?d>g	d@dA ZdBdC ZdDS )ETestPandasJSONTestsc                 C   s  t j}tg dg dgddgg d|d}|d u r6i nd|i}|j|k sPJ ttj|fi |}|j|k szJ |dkrt|}tf 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 )Nr&   r)   r*   r   rS      rA   r  xyz)r   columnsr'  r    r   r   )r   r&   r)   r   r&   r   r   )rJ   r6  r   Zdtypesallr-   r/   r.   r   rY  r   Z	transposerG   Zassert_frame_equal)r1   r    r'  dfr:   r;   rr   r   r   r   test_dataframe@  s0    
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sJ d S )	NrR  rS  rA   r  rU  )r   rY  )Zdf1Zdf2r    )r   copyr-   r/   r.   )r1   r    r[  nestedkwargsexpr   r   r   test_dataframe_nestedb  s    z)TestPandasJSONTests.test_dataframe_nestedc                 C   s   t j}tg ddg d|d }|j|ks0J |d u r<i nd|i}ttj|fi |}|j|ksjJ |dkrt|}tf i |}nt|}|dv rd |_	| }g d|_
n|d	v rd |_	g d
|_
|j|ksJ t|| d S )Nr[   rX      (   2   <   seriesrT     r   r]   r[   r#   )namer   r'  r    r   )Nr   )678ra   10Z15)r   r   )r   r&   r)   r*   r   rS   )rJ   r6  r   sort_valuesr'  r-   r/   r.   r   rj  r   rG   assert_series_equal)r1   r    r'  r   r:   r;   rr   r   r   r   test_seriesp  s0    

zTestPandasJSONTests.test_seriesc                 C   s   t g ddg dd }|| d}|d u r4i nd|i}ttj|fi |ttj|fi |d}ttj|fi ||ksJ d S )Nrb  rg  rh  )rj  r   )s1s2r    )r   ro  r]  r-   r/   r.   )r1   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tj|dd}t f i |}t|| |j|jksvJ t|| |j|jksJ t ttj|dddd}t|| t ttj|dddd}t|| t ttj|dddd}t|| d S )N)   -      b   +      r   )rj  r   )r    r   r   )r   r-   r/   r.   rG   assert_index_equalr   rj  )r1   ir;   rr   r   r   r   
test_index  s*    zTestPandasJSONTests.test_indexc                 C   s   d}t ttdddd d}tj||d}t tt|}t	|| t
tjdt||d}t
ttj||d}|jjtj}t ||_t|| d S )	Nr   z1/1/2000rX   )Zperiodsfreqr   r)   r   )r   listr   r-   r.   rJ   r(  r/   rG   r{  r   randomZdefault_rngZstandard_normallenr   r   r3  r6  rp  )r1   r   rngr3   r4   tsZ
idx_valuesr   r   r   test_datetime_index  s    
z'TestPandasJSONTests.test_datetime_indexinvalid_arr)z[31337,]z[,31337]z[]]z[,]c                 C   s@   d}t jt|d t| W d    n1 s20    Y  d S )Nz[Expected object or value|Trailing data|Unexpected character found when decoding array valuerb   r   )r1   r  rj   r   r   r   test_decode_invalid_array  s    z-TestPandasJSONTests.test_decode_invalid_arrayr4  r   c                 C   s   |t t|ksJ d S r   r   rE  r   r   r   test_decode_array  s    z%TestPandasJSONTests.test_decode_arrayextreme_numr   r   c                 C   s   |t t|ksJ d S r   r   )r1   r  r   r   r   test_decode_extreme_numbers  s    z/TestPandasJSONTests.test_decode_extreme_numberstoo_extreme_numr   r   c                 C   s<   t jtdd t| W d    n1 s.0    Y  d S r   r   )r1   r  r   r   r   test_decode_too_extreme_numbers  s
    z3TestPandasJSONTests.test_decode_too_extreme_numbersc                 C   s   i t dks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    n1 s.0    Y  d S )NzTrailing datarb   z{}
	 ar   r   r   r   r   )test_decode_with_trailing_non_whitespaces  s    z=TestPandasJSONTests.test_decode_with_trailing_non_whitespacesvaluec                 C   s<   t jtdd t| W d    n1 s.0    Y  d S r   r   )r1   r  r   r   r   test_decode_array_with_big_int  s
    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`   r&   c                 C   s&   ||9 }t j|tt|dd d S )NgV瞯<)Zrtol)rG   r?  r-   r/   r   )r1   r  r  r   r   r   test_decode_floating_point  s    z.TestPandasJSONTests.test_decode_floating_pointc                 C   s,   t  }tdD ]}|| qt| d S )Ni )setr   addr-   r.   )r1   r   rV  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[])r-   r.   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>	   r&   r)   r*   r   rS   rT  ri  r   r]   rB   )r1   r   rq   rr   r   r   r   r   test_encode_set  s
    

z#TestPandasJSONTests.test_encode_settdin  )days   rS   )hoursminutessecondsrX   rc  )r  nanoseconds)r  )microsecondsr  )Zmillisecondsr  r  i  c                 C   s.   t j|dd}d|  d}||ks*J d S )NT)Z	iso_datesr   r   )r1   r  rK  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)r1   pr[  r   r   r   test_encode_periodindex;  s    
z+TestPandasJSONTests.test_encode_periodindexN)r   r   r   r\  ra  rq  rt  r}  r  rh   r  r  r  r  r  r  r  r  r  r  r  r  r  r	   r  r  r   r   r   r   rQ  ?  sZ   " 	




	


rQ  )%r   r   r+   r8   rE   r  r   r   r   numpyrJ   rh   r   Zpandas._libs.jsonZ_libsr-   Zpandas.compatr   Zpandasr   r   r   r   r   r   r	   r
   r   Zpandas._testingZ_testingrG   r   Zfixturer    r!   r"  rQ  r   r   r   r   <module>   s8   ,
     }