U
    ¾mœdð‡  ã                   @   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 ddddd	g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/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/io/json/test_ujson.pyÚ
<dictcomp>-   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   Ú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
dddg¡dd„ ƒZ
dd„ Zdd„ Zdd„ Zej dddg¡dd„ ƒZej dejej g¡dd„ ƒZdd„ Zd d!„ Zd"d#„ Zd$d%„ Zej d&d'd(d)d*g¡d+d,„ ƒZd-d.„ Zej d/d0d1g¡d2d3„ ƒZd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Z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+j.e+j. g¡dadb„ ƒZ/dcdd„ Z0dedf„ Z1dgdh„ Z2didj„ Z3dkdl„ Z4ej dmdndodpdqg¡drds„ ƒZ5ej dtdndog¡dudv„ ƒZ6ej dwdxdydzd{d|g¡d}d~„ ƒZ7ej dd€d�d‚g¡dƒd„„ ƒZ8ej d…d†d‡dˆg¡d‰dŠ„ ƒZ9ej 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›dœd�g¡dždŸ„ ƒZ?ej d d¡d¢d£d¤d¥g¡d¦d§„ ƒZ@d¨d©„ ZAej dªd«d¬d­d®g¡d¯d°„ ƒZBd±d²„ ZCd³d´„ ZDdµd¶„ ZEd·d¸„ ZFd¹dº„ ZGd*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sŒt‚t |¡}|dks¢t‚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�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�s–t‚t  d¡}tj|dd�}|dk�s¼t‚t |¡}|dk�sÔt‚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_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"t‚ˆt |¡ks4t‚ˆt  |¡ksFt‚d S )Nr6   )r,   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_numberlüÿÿÿZ:�`¡7{ g#å_œçt¦ÂgÔŸpAª‚¿Ác                 C   s0   d|i}t j|dd�}t  |¡}||ks,t‚d S )NÚar"   r#   ©r,   r-   r.   r/   )r1   r?   r2   r3   r4   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_localer,   r8   Údumpsr/   )r1   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 )Nr@   g=
×£p=@TrC   rA   r0   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 )NgœWw'&l¡7g0Žä.ÿ++g¹j7­Ö–¶gó¡?>¬úÓ¡)r,   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 t‚d S )NZvalue1©r,   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(t‚t|dƒtt  |¡dƒksFt‚d S ©Né   )r,   r-   Úroundr7   r8   r/   r.   )r1   rQ   r:   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&   ©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*t‚|t  |¡ks<t‚d S )Né   ©r,   r-   r7   r8   r/   r.   )r1   Znested_inputr:   r   r   r   Ú"test_encode_array_of_nested_arraysÂ   s    
z5TestUltraJSONTests.test_encode_array_of_nested_arraysc                 C   sB   ddddgd }t  |¡}|t |¡ks,t‚|t  |¡ks>t‚d S )NgcATšÞ@é
   rY   )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$t‚|t  |¡ks6t‚dD ]@}t j||d�}t||ƒ}|t |¡ksht‚|t  |¡ks:t‚q:d S )Ng² )>@r"   r#   )r)   é	   )r,   r-   r7   r8   r/   r.   rT   )r1   rQ   r:   r$   Zrounded_inputr   r   r   Útest_double_precisionÐ   s    
z(TestUltraJSONTests.test_double_precisionÚinvalid_valrX   éÿÿÿÿÚ9Nc              	   C   sF   d}t |tƒrtnt}d}tj||d�� tj||d� W 5 Q R X d S )NgöF7Ýš>@z‹Invalid 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   Ú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"rY   )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&t‚|t |¡ks8t‚d S r   ©r,   r-   r.   r7   rG   r/   r8   )r1   rn   Ú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ú)r,   r-   r.   r/   r7   rG   )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*t‚|t |¡ks<t‚d S )Nu   Ã°Â�Â�Â†rp   )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*t‚|t |¡ks<t‚d S )Nu   Ã°Â‘Â€Â°TRAILINGNORMALrp   ©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*t‚|t |¡ks<t‚d S )Nu   Ã³Â¿Â¿Â¿TRAILINGNORMALrp   rw   r   r   r   Ú&test_encode_unicode_4bytes_utf8highest  s
    

z9TestUltraJSONTests.test_encode_unicode_4bytes_utf8highestc              	   C   s2   d}d}t jt|d�� t |g¡ W 5 Q R X d S )Nu   'í«€'zT'utf-8' codec can't encode character '\\udac0' in position 1: surrogates not allowedrb   )rh   ri   ÚUnicodeEncodeErrorr,   rG   )r1   Ústringrk   r   r   r   Útest_encode_unicode_error&  s
    ÿz,TestUltraJSONTests.test_encode_unicode_errorc                 C   sN   g ggg}t  |¡}|t |¡ks&t‚|t |¡ks8t‚|t  |¡ksJt‚d S r   ©r,   r-   r7   r8   r/   rG   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t‚|t |¡ks.t‚|t  |¡ks@t‚d S r   r}   )r1   r   r:   r   r   r   Útest_encode_num_conversion7  s    	
z-TestUltraJSONTests.test_encode_num_conversionc                 C   s>   ddddg}t  |¡}|t |¡ks(t‚|t  |¡ks:t‚d S )Nr%   r(   r)   é   rY   )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*t‚|t  |¡ks<t‚d S )Nr%   r(   r)   rƒ   )Zk1Zk2Zk3Zk4rY   )r1   Z
dict_inputr:   r   r   r   Útest_encode_dict_conversionL  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}   )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sBt‚t|ƒt |¡ksXt‚d S )NÚs©Ú	date_unit)ÚdatetimeÚfromtimestampÚtimer,   r-   ÚcalendarÚtimegmÚutctimetuplere   r7   r8   r/   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sTt‚t|ƒt |¡ksjt‚d S )Nrˆ   r‰   r   )r‹   ÚdaterŒ   r�   r,   r-   ÚyearÚmonthÚdayrŽ   r�   re   r7   r8   r/   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&t‚d S )Nú"©r,   r-   Ú	isoformatr/   ©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:t‚d S ©Nr[   rš   r"   r›   rœ   )r‹   r�   ÚpytzÚutcr,   r-   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>t‚d S r¡   )	r‹   r�   ÚdateutilÚtzZtzutcr,   r-   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t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sJt‚t tj|dd	�¡}||jd kspt‚t tj|dd	�¡}||jd ks–t‚t tj|dd	�¡}||jks¸t‚d}tj	t
|d�� tj|dd	� W 5 Q R X d S )NéÝ  é   é   é   rš   iÐI Únsrˆ   r‰   i Êš;Úmsi@B Úuséè  z*Invalid value 'foo' for option 'date_unit'rb   Úfoo)r‹   r
   Zas_unitr,   r.   r-   Ú_valuer/   rh   ri   rf   )r1   ÚvalZstampZ	roundtriprk   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 )Nro   F)r6   rp   )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(t‚d S )Nz{"obj": 31337}©r,   r.   r   r/   )r1   rn   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 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   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'rb   ©rh   ri   rf   r,   r.   )r1   Z	jibberishrk   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 valuerb   rÅ   )r1   rÇ   rk   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 limitrb   i   rÅ   )r1   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'rb   rÅ   )r1   rÏ   rk   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²   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_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 valuerb   rÅ   )r1   rÙ   rk   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   )re   r,   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 t‚|t |¡ks2t‚|t  |¡ksDt‚d}t  |¡}|t |¡ksdt‚|t |¡ksvt‚|t  |¡ksˆt‚dt  d¡ksšt‚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t‚d S )Nz"31337 \u0000 31337"©r,   r.   r7   r8   r/   )r1   rÞ   r   r   r   Útest_decode_null_character   s    z-TestUltraJSONTests.test_decode_null_characterc                 C   sB   ddddddg}t  |¡}|t |¡ks,t‚|t  |¡ks>t‚d S )Nì   ÿÿÿÿ rY   ©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t‚|t |¡ks.t‚|t  |¡ks@t‚d S r   r}   rã   r   r   r   Útest_encode_long_conversion2  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 smallrb   )r,   r-   r   r/   rh   ri   rf   r8   )r1   rç   Úencodingr   r   r   Ú#test_dumps_ints_larger_than_maxsize:  s    
þz6TestUltraJSONTests.test_dumps_ints_larger_than_maxsizeÚint_expZ1337E40z1.337E40z1337E+9z	1.337e+40z1.337E-4c                 C   s   t  |¡t |¡kst‚d S r   rà   )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 5 Q R X d S )NzExpected 'str' or 'bytes'rb   )rh   ri   rg   r,   r8   ©r1   rk   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"t‚d S )Nz{"id": rË   Úid©r,   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Ó   r-   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@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   ©r1   r   r   r   ÚtoDictk  s    z8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictN)r¼   r½   r¾   rÿ   r   r   r   r   ÚDictTestj  s   r   rA   )r1   r   Úor:   rr   r   r   r   Útest_to_dictg  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sÖt‚dd„ }t t t	 	ddd¡¡¡t tjˆ dƒ|d�¡k�st‚ˆ dƒˆ dƒg}t
 t
j|td�¡t tj|td�¡k�sTt‚d S )Nc                       s8   e Zd Zddœdd„Ze‡ fdd„ƒZedœdd„ZdS )	z<TestUltraJSONTests.test_default_handler.<locals>._TestObjectN©Úreturnc                 S   s
   || _ d S r   )rµ   )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   r/   rg   r.   r‹   r7   r8   rG   )r1   rk   r  r  r  r  Zobj_listr   r  r   Útest_default_handlert  s@     ÿÿýÿÿÿþ
ÿz'TestUltraJSONTests.test_default_handlerc                 C   sB   G dd„ dƒ}|ddddd�}t  t  |¡¡ddddœks>t‚d S )	Nc                   @   s"   e Zd Zddœdd„Zdd„ ZdS )z:TestUltraJSONTests.test_encode_object.<locals>._TestObjectNr  c                 S   s   || _ || _|| _|| _d S r   ©r@   ÚbÚ_cr   )r1   r@   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  )r@   r  r   rO   )r1   r  Ztest_objectr   r   r   Útest_encode_objectª  s    z%TestUltraJSONTests.test_encode_object)Hr¼   r½   r¾   rh   ÚmarkZskipifr   r5   Úparametrizer>   rB   rH   rI   rL   rP   ÚmathÚpirU   rW   rZ   r\   r^   rl   rm   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    7   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dddg¡dd„ ƒZdd„ Zdd„ Zd d!„ Zd"S )#ÚTestNumpyJSONTestsÚ
bool_inputTFc                 C   s$   t |ƒ}t t |¡¡|ks t‚d S r   )Úboolr,   r.   r-   r/   )r1   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©Údtype)rJ   Úarrayr"  r,   r.   r-   rF   Ú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s0t‚d S )Nr%   ©rJ   r%  Útyper,   r.   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 )Néd   r$  )
rJ   Úarangere   Úastyper&  r,   r.   r-   rF   r'  )r1   r,  ÚarrZ	arr_inputZ
arr_outputr   r   r   Útest_int_arrayÍ  s    
 ÿz!TestNumpyJSONTests.test_int_arrayc                 C   sd   |dkrt st d¡ t |¡j}|dkr8t d¡j}nt |¡j}|t 	t 
|¡¡ƒ|ks`t‚d S )N)Úint64Úuint64z-Cannot test 64-bit integer on 32-bit platformr5  r4  )r   rh   ÚskiprJ   r%  r*  ZiinfoÚmaxr,   r.   r-   r/   r+  r   r   r   Útest_int_maxÖ  s    
zTestNumpyJSONTests.test_int_maxc                 C   s4   t  |¡j}|dƒ}|t t |¡¡ƒ|ks0t‚d S )NgõJY†8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   r0  Úfloatr1  r&  r,   r.   r-   rF   Úassert_almost_equal)r1   r:  r2  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finfor7  rF   r=  r,   r.   r-   r9  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   r0  ÚreshaperF   r'  r&  r,   r.   r-   ©r1   r2  r   r   r   Útest_array_basicý  s    

z#TestNumpyJSONTests.test_array_basicÚshape)r[   r[   ©rS   rS   rƒ   )r/  r%   c              	   C   s6   t  d¡}| |¡}t t  t t |¡¡¡|¡ d S )Nr/  rA  )r1   rE  r2  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 )Nr@   r  g33333sX@r  rý   rµ   r$  )rJ   r&  Úobjectr,   r.   r-   rF   r'  )r1   Zarr_listr2  Ú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 )Ng°rh‘íY@gX9´Èvi@r%   r$  rF  )
rJ   Zfloat32r0  rB  r&  r,   r.   r-   rF   r=  )r1   r%  r2  Zarr_outr   r   r   Útest_array_float  s
    
z#TestNumpyJSONTests.test_array_floatc              	   C   s8   t  d¡}tjt|d�� t t d¡¡ W 5 Q R X d S )Nz:array(1) (0d array) is not JSON serializable at the momentrb   r%   )	rÔ   rÕ   rh   ri   rg   r,   r-   rJ   r&  rï   r   r   r   Útest_0d_array#  s    
z TestNumpyJSONTests.test_0d_arrayN)r¼   r½   r¾   rh   r  r  r#  r(  r.  r3  r8  r;  r>  r?  rD  rG  rJ  rK  rL  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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-d.d/d0d1d2g	¡e	j
 d3d4d5g¡d6d7„ ƒƒZd8d9„ Zd:d;„ Zd<d=„ Ze	j
 d>ed?d@�ed4d@�edAdBdBdC�edAdDdEdC�ed4dBdF�ed5dG�ed5d5dH�ed5d5d5dI�edJdJdJdI�g	¡dKdL„ ƒZdMdN„ ZdOS )PÚTestPandasJSONTestsc                 C   s  t j}tdddgdddggddgd	d
dg|d�}|d kr<i nd|i}|j|k ¡ sVt‚t tj|f|Ž¡}|j|k ¡ s|t‚|dkr˜t	|ƒ}tf |Ž}nt|ƒ}|dkrÀdddg|_
ddg|_n$|dkrÔddg|_n|dkrä| ¡ }|j|k ¡ söt‚t ||¡ d S )Nr%   r(   r)   rƒ   rS   é   r@   r  ÚxÚyÚz)r   Úcolumnsr%  r   r   r   r   r   r   )rJ   r4  r   ZdtypesÚallr/   r,   r.   r-   r   rR  r   Z	transposerF   Zassert_frame_equal)r1   r   r%  Údfr9   r:   rr   r   r   r   Útest_dataframe+  s0    ü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s�t‚d S )Nr%   r(   r)   rƒ   rS   rN  r@   r  rO  rP  rQ  )r   rR  )Zdf1Zdf2r   )r   Úcopyr,   r.   r-   r/   )r1   r   rT  ÚnestedÚkwargsÚexpr   r   r   Útest_dataframe_nestedM  s      ÿþz)TestPandasJSONTests.test_dataframe_nestedc              	   C   s  t j}tddddddgddd	d
dddg|d� ¡ }|j|ks@t‚|d krLi nd|i}t tj|f|Ž¡}|j|ksvt‚|dkr’t	|ƒ}tf |Ž}nt|ƒ}|dkrÄd |_
| ¡ }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 )Nr[   rX   é   é(   é2   é<   ÚseriesrN  é   r¬   r]   r"   )Únamer   r%  r   r   )Nr   Ú6Ú7Ú8ra   Ú10Z15)r   r   r   r%   r(   r)   rƒ   rS   )rJ   r4  r   Úsort_valuesr%  r/   r,   r.   r-   r   ra  r   rF   Úassert_series_equal)r1   r   r%  rˆ   r9   r:   rr   r   r   r   Útest_series[  s0    ü
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s’t‚d S )Nr[   rX   r[  r\  r]  r^  r_  rN  r`  r¬   r]   r"   )ra  r   )Ús1Ús2r   )r   rf  rV  r,   r.   r-   r/   )r1   r   rˆ   rW  rX  rY  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 tj|d	d
�¡ƒ}t f |Ž}t ||¡ |j|jkszt‚t ||¡ |j|jks–t‚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   )ra  r   )r   r   r   )	r   r,   r.   r-   rF   Úassert_index_equalr   ra  r/   )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 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   Úlistr   r,   r-   rJ   r&  r.   rF   rr  r   ÚrandomZrandnÚlenr   r   r1  r4  rg  )r1   rŠ   Úrngr3   r4   ÚtsZ
idx_valuesr   r   r   Útest_datetime_index¡  s    
z'TestPandasJSONTests.test_datetime_indexÚinvalid_arrz[31337,]z[,31337]z[]]z[,]c              	   C   s,   d}t jt|d�� t |¡ W 5 Q R X d S )Nz[Expected object or value|Trailing data|Unexpected character found when decoding array valuerb   rÅ   )r1   r~  rk   r   r   r   Útest_decode_invalid_array²  s    ÿz-TestPandasJSONTests.test_decode_invalid_arrayr2  r€   c                 C   s   |t  t|ƒ¡kst‚d S r   r¹   rC  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¹   )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 5 Q R X 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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 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 5 Q R X d S rê   )rh   ri   rf   r,   r8   )r1   r‡  r   r   r   Útest_decode_array_with_big_intÚ  s
    þz2TestPandasJSONTests.test_decode_array_with_big_intÚfloat_numbergÞ3ˆÓ­ùñ?gªRCÊÀó?g¨B4¡æ‡õ?gŽš
LO÷?g‰	jøù?g[_$´åÜú?gŒ¹k	ù ü?g}?5^ºIþ?gÍÌÌÌÌÌô?Úsignr`   r%   c                 C   s&   ||9 }t j|t t|ƒ¡dd� d S )NgVçž¯Ò<)Zrtol)rF   r=  r,   r8   r   )r1   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Ó   Úaddr,   r-   )r1   rˆ   rO  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[])r,   r-   rŒ  r/   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%   r(   r)   rƒ   rS   rN  r`  r¬   r]   rA   )r1   rˆ   rq   rr   r   r   r   r   Útest_encode_set  s
    

z#TestPandasJSONTests.test_encode_setÚtdin  )Údaysé   rS   )ÚhoursÚminutesÚsecondsrX   r[  )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�   )r1   r‘  rI  r‘   r   r   r   Útest_encode_timedelta_iso	  s    z-TestPandasJSONTests.test_encode_timedelta_isoc                 C   s.   t ddgdd�}t|d�}| ¡ dks*t‚d S )Nz
2022-04-06z
2022-04-07ÚDru  rw  z{})r   r   Úto_jsonr/   )r1   ÚprT  r   r   r   Útest_encode_periodindex  s    
z+TestPandasJSONTests.test_encode_periodindexN)r¼   r½   r¾   rU  rZ  rh  rk  rt  r}  rh   r  r  r  r€  r‚  r„  r…  r†  rˆ  r‹  rŽ  r�  r�  r	   r™  r�  r   r   r   r   rM  *  st   " üþ	




÷þ	

÷þ
rM  )%rŽ   r‹   r*   r7   rD   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_testingrF   r   Zfixturer   r    r   rM  r   r   r   r   Ú<module>   s8   ,ÿ
     p