3
U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Zd dljjZd dlmZ d dljZd dlmZmZmZmZmZmZmZ d dljZdd Z ej!ddddd	gd
dd Z"ej!ddgd
dd Z
dd Z#G dd dZ$G dd dZ%G dd dZ&dS )    N)	Timestamp)	DataFrameDatetimeIndexIndexNaTSeries	Timedelta
date_rangec             C   s   dd | j  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
   S/var/www/html/virt/lib64/python3.6/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   orient(   s    r   Tc             C   s   | j S )N)r   )r   r
   r
   r   numpy/   s    r   c             C   s@   t j}| d kp$|dkp$| dko$|d ks<tj r6t j}nt j}|S )Nr   T)npint64compatZis_platform_windowsZint32Zintp)r   r   dtyper
   r
   r   get_int32_compat_dtype4   s     r!   c            	   @   s  e Zd Zejjej dddd Zejj	dddgdd	 Z
ejj	d
dddgdd Zdd Zdd Zdd Zejj	dddgdd Zejj	dejej gdd Zdd Zd d! Zd"d# Zd$d% Zejj	d&d'dd)d*gd+d, Zd-d. Zejj	d/d0d1gd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zejj	d>d?ddgdAdB ZdCdD Z dEdF Z!ejj	dGd*ddgdHdI Z"dJdK Z#dLdM Z$ejj	dNe%j& e%j&d(dOdPe%j&dQdRdSdTgdUdV Z'dWdX Z(dYdZ Z)ejj	d[e*e+j,d\e+j-e+j.e+j. gd]d^ Z/d_d` Z0dadb Z1dcdd Z2dedf Z3dgdh Z4ejj	didjdkdldmgdndo Z5ejj	dpdjdkgdqdr Z6ejj	dsdtdudvdwdxgdydz Z7ejj	did{d|d}gd~d Z8ejj	ddddgdd Z9ejj	dddgdd Z:dd Z;dd Z<dd Z=dd Z>ejj	de?j@d( e?j@dO  gejjAejB dddd ZCejj	ddddddgdd ZDdd ZEejj	dddddgdd ZFdd ZGdd ZHdd ZIdd ZJd*S )TestUltraJSONTestsz$not compliant on 32-bit, xref #15865)reasonc             C   s  t jd}tj|dd}tj|}|dks.tt jd}tj|dd}|dksRttj|}|dkshtt jd	}tj|dd}|d
ksttj|}|dkstt jd}tj|dd}|dksttj|}|dkstt jd}tj|dd}|dksttj|}|dkstt jd}tj|dd}|dks@ttj|}|dksXtt jd}tj|dd}|dks~ttj|}|dkstt jd}tj|dd}|dksttj|}|dkstd S )Nz	1337.1337   )double_precisiong@z0.95   z1.0g      ?z0.94z0.9g?z1.95z2.0g       @z-1.95z-2.0z0.995   z0.9995   z0.99999999999999944g       )decimalDecimalujsonencodedecodeAssertionError)selfsutencodeddecodedr
   r
   r   test_encode_decimalA   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j|ks4tt j|ksFtd S )Nr4   )r+   r,   r.   jsonloadsr-   )Zexpected_outputencode_kwargsoutput)r4   string_inputr
   r   helper   s
    z@TestUltraJSONTests.test_encode_string_conversion.<locals>.helperF)Zencode_html_charsTr
   )r/   r4   Znot_html_encodedZhtml_encodedr:   r
   )r4   r9   r   test_encode_string_conversion{   s    
z0TestUltraJSONTests.test_encode_string_conversionlong_numberl   Z:`7{ g#_tBgԟpAAc             C   s0   d|i}t j|dd}t j|}||ks,td S )Nar$   )r%   )r+   r,   r-   r.   )r/   r<   r0   r1   r2   r
   r
   r   test_double_long_numbers   s    
z+TestUltraJSONTests.test_double_long_numbersc             C   sl   t j}x`dD ]X}tj||rtj||4 tjtjddksBttjddddksXtW d Q R X P qW d S )	Nit_IT.UTF-8Italian_ItalygˇLz4.78T)precise_floatgQ@)r?   r@   )	locale
LC_NUMERICtmZcan_set_localeZ
set_localer+   r6   dumpsr.   )r/   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 j|}t j|dd}||ks,td S )Nr=   g=
ףp=@T)rA   )r+   r,   r-   r.   )r/   r0   r1   r2   r
   r
   r    test_decimal_decode_test_precise   s    
z3TestUltraJSONTests.test_decimal_decode_test_precisec             C   sx   d}|t jt j|kstd}|t jt j|ks8td}|t jt j|ksTtd}tj|t jt j|sttd S )NgWw'&l7g0.++gj7֖6g?>!gj7֖g?>ӡ)r+   r-   r,   r.   r   Z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 jt j|ks td S )NZvalue1)r+   r-   r,   r.   )r/   rJ   Zunicode_dictr
   r
   r   "test_encode_dict_with_unicode_keys   s    z5TestUltraJSONTests.test_encode_dict_with_unicode_keysdouble_inputc             C   sJ   t j|}t|dttj|dks(tt|dtt j|dksFtd S )N   )r+   r,   roundr5   r6   r.   r-   )r/   rM   r8   r
   r
   r   test_encode_double_conversion   s    
z0TestUltraJSONTests.test_encode_double_conversionc             C   s   d}t j|}|dkstd S )Ng      ?z1.0)r+   r,   r.   )r/   Zdecimal_inputr8   r
   r
   r   test_encode_with_decimal   s    
z+TestUltraJSONTests.test_encode_with_decimalc             C   sd   g gggd }t j|}|tj|ks*t|t j|ks<ttj|}tj	|t j|d|j
d d S )N   T)r   r    )r+   r,   r5   r6   r.   r-   r   arrayrD   assert_numpy_array_equalr    )r/   Znested_inputr8   r
   r
   r   "test_encode_array_of_nested_arrays   s    

z5TestUltraJSONTests.test_encode_array_of_nested_arraysc             C   s^   ddddgd }t j|}|tj|ks,t|t j|ks>ttjtj	|t j|dd d S )NgcAT@
   T)r   )
r+   r,   r5   r6   r.   r-   rD   rT   r   rS   )r/   Zdoubles_inputr8   r
   r
   r   test_encode_array_of_doubles   s    
z/TestUltraJSONTests.test_encode_array_of_doublesc             C   s   d}t j|dd}|tj|ks$t|t j|ks6txHdD ]@}t j||d}t||}|tj|ksjt|t j|ks<tq<W d S )Ng )>@r$   )r%   r(   	   )r(   rX   )r+   r,   r5   r6   r.   r-   rO   )r/   rM   r8   r%   Zrounded_inputr
   r
   r   test_double_precision   s    

z(TestUltraJSONTests.test_double_precisioninvalid_valrR   r&   9Nc             C   s>   d}t |trtnt}tj| tj||d W d Q R X d S )NgF7ݚ>@)r%   )
isinstanceint
ValueError	TypeErrorpytestraisesr+   r,   )r/   rZ   rM   expected_exceptionr
   r
   r   test_invalid_double_precision   s    z0TestUltraJSONTests.test_invalid_double_precisionc             C   sB   d}t j|}|tj|ks t|t j|ks2t|dks>td S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t")r+   r,   r5   r6   r.   r-   )r/   r9   r8   r
   r
   r   test_encode_string_conversion2   s
    
z1TestUltraJSONTests.test_encode_string_conversion2unicode_inputu@   Räksmörgås اسامة بن محمد بن عوض بن لادنu
   æ¥Ñc             C   s<   t j|}t j|}|tj|ks&t|tj|ks8td S )N)r+   r,   r-   r5   rE   r.   r6   )r/   re   encdecr
   r
   r   test_encode_unicode_conversion  s    

z1TestUltraJSONTests.test_encode_unicode_conversionc             C   s:   d}t j|}t j|}||ks$t|tj|ks6td S )N)r+   r,   r-   r.   r5   rE   )r/   Zescaped_inputrf   rg   r
   r
   r   test_encode_control_escaping  s
    

z/TestUltraJSONTests.test_encode_control_escapingc             C   s@   d}t j|}t j|}|tj|ks*t|tj|ks<td S )Nu   ð)r+   r,   r-   r5   rE   r.   r6   )r/   Zsurrogate_inputrf   rg   r
   r
   r   "test_encode_unicode_surrogate_pair  s
    

z5TestUltraJSONTests.test_encode_unicode_surrogate_pairc             C   s@   d}t j|}t j|}|tj|ks*t|tj|ks<td S )Nu   ð°TRAILINGNORMAL)r+   r,   r-   r5   rE   r.   r6   )r/   four_bytes_inputrf   rg   r
   r
   r   test_encode_unicode_4bytes_utf8  s
    

z2TestUltraJSONTests.test_encode_unicode_4bytes_utf8c             C   s@   d}t j|}t j|}|tj|ks*t|tj|ks<td S )Nu   ó¿¿¿TRAILINGNORMAL)r+   r,   r-   r5   rE   r.   r6   )r/   rl   rf   rg   r
   r
   r   &test_encode_unicode_4bytes_utf8highest%  s
    

z9TestUltraJSONTests.test_encode_unicode_4bytes_utf8highestc             C   sj   g ggg}t j|}|tj|ks&t|tj|ks8t|t j|ksJttjt	j
|t j|dd d S )NT)r   )r+   r,   r5   r6   r.   rE   r-   rD   rT   r   rS   )r/   Zarr_in_arr_inputr8   r
   r
   r   test_encode_array_in_array.  s    

z-TestUltraJSONTests.test_encode_array_in_array	num_inputiiz  l            c             C   sD   t j|}|tj|kst|tj|ks.t|t j|ks@td S )N)r+   r,   r5   r6   r.   rE   r-   )r/   rp   r8   r
   r
   r   test_encode_num_conversion:  s    	
z-TestUltraJSONTests.test_encode_num_conversionc             C   sZ   ddddg}t j|}|tj|ks(t|t j|ks:ttjtj	|t j|dd d S )Nr&   r'   r(      T)r   )
r+   r,   r5   r6   r.   r-   rD   rT   r   rS   )r/   Z
list_inputr8   r
   r
   r   test_encode_list_conversionH  s    
z.TestUltraJSONTests.test_encode_list_conversionc             C   s@   ddddd}t j|}|tj|ks*t|t j|ks<td S )Nr&   r'   r(   rr   )Zk1Zk2Zk3Zk4)r+   r,   r5   r6   r.   r-   )r/   Z
dict_inputr8   r
   r
   r   test_encode_dict_conversionS  s    
z.TestUltraJSONTests.test_encode_dict_conversionbuiltin_valuec             C   sD   t j|}|tj|kst|tj|ks.t|t j|ks@td S )N)r+   r,   r5   r6   r.   rE   r-   )r/   ru   r8   r
   r
   r   %test_encode_builtin_values_conversionZ  s    
z8TestUltraJSONTests.test_encode_builtin_values_conversionc             C   s\   t j jtj }tj|dd}tj|j }t|t	j
|ksBtt|tj|ksXtd S )Ns)	date_unit)datetimefromtimestamptimer+   r,   calendartimegmutctimetupler]   r5   r6   r.   r-   )r/   Zdatetime_inputr8   expectedr
   r
   r   test_encode_datetime_conversiona  s
    z2TestUltraJSONTests.test_encode_datetime_conversionc             C   sn   t jjtj }tj|dd}|j|j|jdddf}t	j
|}t|tj|ksTtt|tj|ksjtd S )Nrw   )rx   r   )ry   daterz   r{   r+   r,   yearmonthdayr|   r}   r]   r5   r6   r.   r-   )r/   Z
date_inputr8   tupr   r
   r
   r   test_encode_date_conversioni  s    
z.TestUltraJSONTests.test_encode_date_conversiontestr'   r(   rV      r$   i< c             C   s*   t j|}d|j  d}||ks&td S )N")r+   r,   	isoformatr.   )r/   r   r8   r   r
   r
   r   !test_encode_time_conversion_basics  s    
z4TestUltraJSONTests.test_encode_time_conversion_basicc             C   s>   t jddddtj}tj|}d|j  d}||ks:td S )NrV   r   r$   i< r   )ry   r{   pytzutcr+   r,   r   r.   )r/   r   r8   r   r
   r
   r    test_encode_time_conversion_pytz|  s    
z3TestUltraJSONTests.test_encode_time_conversion_pytzc             C   sB   t jddddtjj }tj|}d|j  d}||ks>td S )NrV   r   r$   i< r   )	ry   r{   dateutiltzZtzutcr+   r,   r   r.   )r/   r   r8   r   r
   r
   r   $test_encode_time_conversion_dateutil  s    
z7TestUltraJSONTests.test_encode_time_conversion_dateutildecoded_inputr   c             C   s   t j|dkstdd S )NnullzExpected null)r+   r,   r.   )r/   r   r
   r
   r   test_encode_as_null  s    z&TestUltraJSONTests.test_encode_as_nullc             C   s   t j ddddddd}t|}tjtj|dd}||jd ksDttjtj|dd}||jd ksjttjtj|dd}||jd ksttjtj|dd}||jkstd}tjt	|d tj|dd W d Q R X d S )Ni           r   iI rw   )rx   rV   rX   ms   usr(   nsz*Invalid value 'foo' for option 'date_unit')matchfooi ʚ;i@B i  )
ry   r   r+   r-   r,   valuer.   r`   ra   r^   )r/   valZstampZ	roundtripmsgr
   r
   r   test_datetime_units  s    z&TestUltraJSONTests.test_datetime_unitsc             C   sH   d}t j|dd}t j|}|tj|ddks2t|tj|ksDtd S )Nu
   æ¥ÑF)r4   )r+   r,   r-   r5   rE   r.   r6   )r/   	unencodedrf   rg   r
   r
   r   test_encode_to_utf8  s
    
z&TestUltraJSONTests.test_encode_to_utf8c             C   s,   d}t j|}t jt|}||ks(td S )Nz{"obj": 31337})r+   r-   r   r.   )r/   re   Zdec1Zdec2r
   r
   r   test_decode_from_unicode  s    
z+TestUltraJSONTests.test_decode_from_unicodec          	   C   sV   G dd d}G dd d}| }| |_ ||j _ tjt tj| W d 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   N)r   r   r   r   r
   r
   r
   r   O1  s   r   )r   r`   ra   OverflowErrorr+   r,   )r/   r   r   r   r
   r
   r   test_encode_recursion_max  s    z,TestUltraJSONTests.test_encode_recursion_maxc          	   C   s(   d}t jt tj| W d Q R X d S )Nzfdsa sda v9sa fdsa)r`   ra   r^   r+   r-   )r/   Z	jibberishr
   r
   r   test_decode_jibberish  s    z(TestUltraJSONTests.test_decode_jibberishbroken_json[{]}c          	   C   s$   t jt tj| W d Q R X d S )N)r`   ra   r^   r+   r-   )r/   r   r
   r
   r   test_decode_broken_json  s    
z*TestUltraJSONTests.test_decode_broken_jsontoo_big_charc             C   s(   t jt tj|d  W d Q R X d S )Ni   i   )r`   ra   r^   r+   r-   )r/   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$   t jt tj| W d Q R X d S )N)r`   ra   r^   r+   r-   )r/   r   r
   r
   r   test_decode_bad_string  s    z)TestUltraJSONTests.test_decode_bad_stringz{{1337:""}}z
{{"key":"}z[[[truec          
   C   s6   x0t dD ]$}tjt tj| W d Q R X q
W d S )Ni  )ranger`   ra   r^   r+   r-   )r/   r   _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$   t jt tj| W d Q R X d S )N)r`   ra   r^   r+   r-   )r/   r   r
   r
   r   test_decode_invalid_dict  s    	z+TestUltraJSONTests.test_decode_invalid_dictnumeric_int_as_strZ31337z-31337c             C   s   t |tj|kstd S )N)r]   r+   r-   r.   )r/   r   r
   r
   r   test_decode_numeric_int  s    z*TestUltraJSONTests.test_decode_numeric_intc             C   s   d}t j|}|tj|ks t|tj|ks2t|t j|ksDtd}t j|}|tj|ksdt|tj|ksvt|t j|kstdt jdkstd S )Nz31337   1337 z"  \u0000\r\n "z   
 )r+   r,   r5   r6   r.   rE   r-   )r/   wrapped_inputr8   Zalone_inputr
   r
   r   test_encode_null_character  s    

z-TestUltraJSONTests.test_encode_null_characterc             C   s    d}t j|tj|kstd S )Nz"31337 \u0000 31337")r+   r-   r5   r6   r.   )r/   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 j|}|tj|ks,t|t j|ks>ttjtj	|t j|dtj
d d S )Nl    T)r   r    )r+   r,   r5   r6   r.   r-   rD   rT   r   rS   r   )r/   
long_inputr8   r
   r
   r    test_encode_list_long_conversion  s    
z3TestUltraJSONTests.test_encode_list_long_conversionc             C   sH   d}t j|}|tj|ks t|tj|ks2t|t j|ksDtd S )Nl    )r+   r,   r5   r6   r.   rE   r-   )r/   r   r8   r
   r
   r   test_encode_long_conversion+  s
    
z.TestUltraJSONTests.test_encode_long_conversionbigNumzGH-35288c          	   C   sP   t jd }tj|}t||ks$ttjt tj	||ksBtW d Q R X d S )Nr&   )
sysmaxsizer+   r,   r   r.   r`   ra   r^   r6   )r/   r   encodingr
   r
   r   #test_dumps_ints_larger_than_maxsize3  s
    

z6TestUltraJSONTests.test_dumps_ints_larger_than_maxsizeint_expZ1337E40z1.337E40z1337E+9z	1.337e+40z1.337E-4c             C   s   t j|tj|kstd S )N)r+   r-   r5   r6   r.   )r/   r   r
   r
   r   test_decode_numeric_int_exp?  s    z.TestUltraJSONTests.test_decode_numeric_int_expc          	   C   s,   d}t jt|d tjd  W d Q R X d S )NzExpected 'str' or 'bytes')r   )r`   ra   r_   r+   r6   )r/   r   r
   r
   r   test_loads_non_str_bytes_raisesE  s    z2TestUltraJSONTests.test_loads_non_str_bytes_raisesr   l   M+        c             C   s&   d| d}t j|d |ks"td S )Nz{"id": r   id)r+   r-   r.   )r/   r   docr
   r
   r   &test_decode_number_with_32bit_sign_bitJ  s    z9TestUltraJSONTests.test_decode_number_with_32bit_sign_bitc             C   s:   x4t dD ](}djd}|d d d }tj| q
W d S )NrV      åzutf-8i   r'   )r   r,   r+   )r/   r   baseescape_inputr
   r
   r   test_encode_big_escapeQ  s    
z)TestUltraJSONTests.test_encode_big_escapec             C   sF   x@t dD ]4}djd}d}||d d d  | }tj| q
W d S )NrV   r   zutf-8   "i   r'   )r   r,   r+   r-   )r/   r   r   quoter   r
   r
   r   test_decode_big_escapeX  s
    
z)TestUltraJSONTests.test_decode_big_escapec                sD   ddi G  fddd}| }t j|}t j|}| ks@td S )Nkeyiiz  c                   s   e Zd Z fddZdS )z1TestUltraJSONTests.test_to_dict.<locals>.DictTestc                s    S )Nr
   )r/   )r   r
   r   toDicte  s    z8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictN)r   r   r   r   r
   )r   r
   r   DictTestd  s   r   )r+   r,   r-   r.   )r/   r   or8   rg   r
   )r   r   test_to_dicta  s    

zTestUltraJSONTests.test_to_dictc                sX  G  fddd d}t jt|d tj d W d 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 d Q R X dd }tjtj d|ddkstdd }tjtjt	j	dddtjtj d|dkst d dg}t
jt
j|tdtjtj|tdksTtd S )Nc                   s2   e Zd Zdd Ze fddZedddZdS )	z<TestUltraJSONTests.test_default_handler.<locals>._TestObjectc             S   s
   || _ d S )N)r   )r/   r   r
   r
   r   __init__p  s    zETestUltraJSONTests.test_default_handler.<locals>._TestObject.__init__c                s    dS )Nrecursive_attrr
   )r/   )_TestObjectr
   r   r   s  s    zKTestUltraJSONTests.test_default_handler.<locals>._TestObject.recursive_attr)returnc             S   s
   t | jS )N)r   r   )r/   r
   r
   r   __str__w  s    zDTestUltraJSONTests.test_default_handler.<locals>._TestObject.__str__N)r   r   r   r   propertyr   r   r   r
   )r   r
   r   r   o  s   r   zMaximum recursion level reached)r   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 )NzI raise for anything)r_   )r   r
   r
   r   my_handler_raises  s    zBTestUltraJSONTests.test_default_handler.<locals>.my_handler_raiseszI raise for anythingc             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 j dddS )Ni  r'   r(   )ry   )r   r
   r
   r   my_obj_handler  s    z?TestUltraJSONTests.test_default_handler.<locals>.my_obj_handleri  r'   r(   bar)default)r`   ra   r   r+   r,   r   r.   r_   r-   ry   r5   r6   rE   )r/   r   r   r   r   r   Zobj_listr
   )r   r   test_default_handlern  s.    
z'TestUltraJSONTests.test_default_handlerlZ:`7{ g#_tgԟpAil         l        l        l        l    )Kr   r   r   r`   markZskipifr   is_platform_32bitr3   parametrizer;   r>   rF   rG   rI   rL   mathpirP   rQ   rU   rW   rY   rc   rd   rh   rj   rk   rm   rn   ro   rq   rs   rt   rv   r   r   ry   r{   r   r   r   r   r   Z
datetime64naninfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ZxfailZIS64r   r   r   r   r   r   r   r   r
   r
   r
   r   r"   @   s   9	
			
.(		r"   c               @   sV  e Zd Zej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jdd2d3d4gdd Zdd Zd d! Zd"d# Zejjd$i g gei fd%d&gei fd'gd%gei fd%i d'gei fd%d'gd%gei fd'd(g d)gei fd'd(igeedd*fd'd(d)d%iiieedd*fd%d+d,d)d-igeedd*fg	d.d/ Zd0d1 Zd&S )5TestNumpyJSONTests
bool_inputTFc             C   s$   t |}tjtj||ks td S )N)boolr+   r-   r,   r.   )r/   r   br
   r
   r   	test_bool  s    zTestNumpyJSONTests.test_boolc          	   C   sH   t jddddddddgtd}t jtjtj|td}tj|| d S )NTF)r    )r   rS   r   r+   r-   r,   rD   rT   )r/   Z
bool_arrayr8   r
   r
   r   test_bool_array  s    z"TestNumpyJSONTests.test_bool_arrayc             C   s4   t j|j}|d}|tjtj||ks0td S )Nr&   )r   r    typer+   r-   r,   r.   )r/   any_int_dtypeklassrH   r
   r
   r   test_int  s    zTestNumpyJSONTests.test_intc             C   sB   t jdtd}|j|}t jtjtj||d}tj	|| d S )Nd   )r    )
r   aranger]   astyperS   r+   r-   r,   rD   rT   )r/   r   arrZ	arr_inputZ
arr_outputr
   r
   r   test_int_array  s
    
z!TestNumpyJSONTests.test_int_arrayc             C   sh   |dkrt j rtjd tj|j}|dkr<tjdj}ntj|j}|t	j
t	j||ksdtd S )Nr   uint64z-Cannot test 64-bit integer on 32-bit platform)r   r  )r   r   r`   skipr   r    r   Ziinfomaxr+   r-   r,   r.   )r/   r   r   rH   r
   r
   r   test_int_max  s    
zTestNumpyJSONTests.test_int_maxc             C   s4   t j|j}|d}|tjtj||ks0td S )NgJY8p@)r   r    r   r+   r-   r,   r.   )r/   float_dtyper   rH   r
   r
   r   
test_float  s    zTestNumpyJSONTests.test_floatc             C   sJ   t jdddtd}|j|}t jtjtj|dd|d}tj	|| d S )Ng      )@gףp=
7g@geX?)r    r$   )r%   )
r   r  floatr  rS   r+   r-   r,   rD   assert_almost_equal)r/   r
  r  Zfloat_inputZfloat_outputr
   r
   r   test_float_array  s    
z#TestNumpyJSONTests.test_float_arrayc             C   sD   t j|j}|t j|jd }tj|tjtj	|dd| d S )NrV   r$   )r%   )
r   r    r   Zfinfor  rD   r  r+   r-   r,   )r/   r
  r   rH   r
   r
   r   test_float_max  s    z!TestNumpyJSONTests.test_float_maxc             C   sR   t jd}|jd}tjt jtjtj|| tjtjtj|dd| d S )N`   r'   r(   T)r   )r'   r'   r'   r'   r(   r'   )	r   r  reshaperD   rT   rS   r+   r-   r,   )r/   r  r
   r
   r   test_array_basic  s    

z#TestNumpyJSONTests.test_array_basicshaperV   rN   rr   r  r&   c             C   sR   t jd}|j|}tjt jtjtj|| tjtjtj|dd| d S )Nr  T)r   )	r   r  r  rD   rT   rS   r+   r-   r,   )r/   r  r  r
   r
   r   test_array_reshaped  s    

z&TestNumpyJSONTests.test_array_reshapedc          
   C   s^   dt  t t t  ddddgddig	}tj|td}tjtjtj|td}tj	|| d S )Nr=   r   g33333sX@r   r   r   )r    )
listdictr   rS   objectr+   r-   r,   rD   rT   )r/   Zarr_listr  resultr
   r
   r   test_array_list  s    
z"TestNumpyJSONTests.test_array_listc             C   sn   t j}t jddd|d}|jd	}t jtjtj||d}tj	|| tjtj|d|d}tj	|| d S )
NgrhY@gX9vi@r&   )r    rN   rr   T)r   r    )rN   rN   rr   )
r   Zfloat32r  r  rS   r+   r-   r,   rD   r  )r/   r    r  Zarr_outr
   r
   r   test_array_float  s    
z#TestNumpyJSONTests.test_array_floatc          
   C   s8   t jd}tjt|d tjtjd W d Q R X d S )Nz:array(1) (0d array) is not JSON serializable at the moment)r   r&   )	reescaper`   ra   r_   r+   r,   r   rS   )r/   r   r
   r
   r   test_0d_array  s    
z TestNumpyJSONTests.test_0d_arrayzbad_input,exc_type,kwargsr   Nr=   r   c)labelled   )r=   r   r   c             C   s6   t j|" tjtj|fddi| W d Q R X d S )Nr   T)r`   ra   r+   r-   rE   )r/   Z	bad_inputexc_typekwargsr
   r
   r   test_array_numpy_except  s    z*TestNumpyJSONTests.test_array_numpy_exceptc             C   s  dg i}t jt j|ddd}tjd|d kj s8ttjdg|d kj sTt|d d ksdtddig}t jt j|ddd}tjdg|d kj sttjdg|d kj st|d d kstd}t j|ddd}tjdd	d
dddgtdj	d}||d kj st|d d ks(ttjddg|d kj sHtd}t j|ddd}tjdd	d
dddgtdj	d}||d kj sttjdddg|d kj sttjddg|d kj std S )Nr=   T)r   r  r&   r   r'   r   z<[{"a": 42, "b":31}, {"a": 24, "c": 99}, {"a": 2.4, "b": 78}]r      c   g333333@N   )r    r(   r   zK{"1": {"a": 42, "b":31}, "2": {"a": 24, "c": 99}, "3": {"a": 2.4, "b": 78}}123)r&   r   )r(   r'   )r(   r'   )
r+   r6   rE   r   emptyallr.   rS   r]   r  )r/   Zlabelled_inputr8   Zinput_dumpsZexpected_valsr
   r
   r   test_array_numpy_labelled+  s,    
   "z,TestNumpyJSONTests.test_array_numpy_labelled)rV   rV   )rN   rN   rr   )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     s2   	
*r   c               @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
jjdddddgdd Ze
jjdg dggdd Ze
jjdddNgdd Ze
jjdd d!gd"d# Zd$d% Zd&d' Zd(d) Ze
jjd*d+d,d-d.d/d0d1d2d3g	e
jjd4dOd5gd6d7 Zd8d9 Zd:d; Zd<d= Ze
jjd>ed?d@edPd@edAdBdBdCedAdDdEdCedQdBdFed5dGed5d5dHed5d5d5dIedJdJdJdIg	dKdL ZdMS )RTestPandasJSONTestsc       	      C   sB  |dkr|rt jd t||}tdddgdddggd	d
gdddg|d}|d krVi nt|d}|d krli nt|d}|j|kj sttj	tj
|f|f|}|j|kj st|dkrt|}tf |}nt|}|dkrdddg|_ddg|_n(|dkrddg|_n|dkr|j }|j|kj s2ttj|| d S )Nr   zNot idiomatic pandasr&   r'   r(   rr   rN   r   r=   r   xyz)r   columnsr    )r   )r   r   r   r   r   )r`   r  r!   r   r  Zdtypesr+  r.   r+   r-   r,   r   r1  r   Z	transposerD   assert_frame_equal)	r/   r   r   r    dfr7   decode_kwargsr8   rg   r
   r
   r   test_dataframeM  s4    



z"TestPandasJSONTests.test_dataframec             C   s   t dddgdddggddgd	d
dgd}||j d}|d krBi nt|d}tjtj|f|tjtj|f|d}tjtj|f||kstd S )Nr&   r'   r(   rr   rN   r   r=   r   r.  r/  r0  )r   r1  )Zdf1Zdf2)r   )r   copyr  r+   r-   r,   r.   )r/   r   r3  nestedr"  expr
   r
   r   test_dataframe_nesteds  s    &z)TestPandasJSONTests.test_dataframe_nestedc             C   s   |dkrt jd tdddgddd	ggd
dgdddgtd}|d krHi nt|d}ttjtj|f|ddd }|d kr|j}n|dkrddg|_	t
j|| d S )Nr   r   zIncompatible with labelled=Truer&   r'   r(   rr   rN   r   r=   r   r.  r/  r0  )r   r1  r    )r   T)r   r  r   r   )r   r   )r`   r  r   r]   r  r+   r-   r,   Tr   rD   r2  )r/   r   r3  r"  r8   r
   r
   r   test_dataframe_numpy_labelled  s    

z1TestPandasJSONTests.test_dataframe_numpy_labelledc       	   	   C   s&  t ||}tddddddgddd	d
dddg|dj }|j|ksDt|d krPi nt|d}|d krfi nt|d}tjtj|f|f|}|j|kst|dkrt	|}tf |}nt|}|d krd |_
|j }ddddddg|_n"|d!krd |_
ddddddg|_|j|ksttj|| d S )"NrV   rR      (   2   <   seriesr      r   rX   r$   )namer   r    )r   )r   r   r   678r[   10Z15r   r   r   r&   r'   r(   rr   rN   )Nr   )r   r   )r!   r   sort_valuesr    r.   r  r+   r-   r,   r   rB  r   rD   assert_series_equal)	r/   r   r   r    rw   r7   r4  r8   rg   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j }||j d}|d krDi nt|d}tjtj|f|tjtj|f|d}tjtj|f||kstd S )NrV   rR   r<  r=  r>  r?  r@  r   rA  r   rX   r$   )rB  r   )s1s2)r   )r   rG  r6  r  r+   r-   r,   r.   )r/   r   rw   r7  r"  r8  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jtj|dd}tj|| t tjtj|d	d
dd}tj|| ttjtj|dd}t f |}tj|| |j|jkstttjtj|ddd	d
}t f |}tj|| |j|jkstt tjtj|dddd}tj|| t tjtj|ddd	d
dd}tj|| t tjtj|dddd}tj|| t tjtj|ddd	d
dd}tj|| t tjtj|dddd}tj|| t tjtj|ddd	d
dd}tj|| d S )Nr   -      b   +      r   )rB  T)r   r   )r   r   r   )	r   r+   r-   r,   rD   assert_index_equalr   rB  r.   )r/   ir8   rg   r
   r
   r   
test_index  s8    

zTestPandasJSONTests.test_indexc             C   s   d}t ttdddd d}tj||d}t tjtj|}tj	|| t
tjjt||d}t
tjtj||d}|jjjtj}t ||_tj|| d S )Nr   z1/1/2000rR   )Zperiods)freq)rx   )r   )r   r  r	   r+   r,   r   rS   r-   rD   rR  r   randomZrandnlenr   r   r  r   rH  )r/   rx   rngr1   r2   tsZ
idx_valuesr
   r
   r   test_datetime_index  s    
z'TestPandasJSONTests.test_datetime_indexinvalid_arrz[31337,]z[,31337]z[]]z[,]c          	   C   s$   t jt tj| W d Q R X d S )N)r`   ra   r^   r+   r-   )r/   r[  r
   r
   r   test_decode_invalid_array  s    
z-TestPandasJSONTests.test_decode_invalid_arrayr  iiz  c             C   s   |t jt|kstd S )N)r+   r-   r   r.   )r/   r  r
   r
   r   test_decode_array  s    z%TestPandasJSONTests.test_decode_arrayextreme_numl    l            c             C   s   |t jt|kstd S )N)r+   r-   r   r.   )r/   r^  r
   r
   r   test_decode_extreme_numbers  s    z/TestPandasJSONTests.test_decode_extreme_numberstoo_extreme_numZ9223372036854775808z-90223372036854775809c          	   C   s$   t jt tj| W d Q R X d S )N)r`   ra   r^   r+   r-   )r/   r`  r
   r
   r   test_decode_too_extreme_numbers  s    z3TestPandasJSONTests.test_decode_too_extreme_numbersc             C   s   i t jdkstd S )Nz{}
	 )r+   r-   r.   )r/   r
   r
   r   %test_decode_with_trailing_whitespaces!  s    z9TestPandasJSONTests.test_decode_with_trailing_whitespacesc          	   C   s$   t jt tjd W d Q R X d S )Nz{}
	 a)r`   ra   r^   r+   r-   )r/   r
   r
   r   )test_decode_with_trailing_non_whitespaces$  s    z=TestPandasJSONTests.test_decode_with_trailing_non_whitespacesc          	   C   s$   t jt tjd W d Q R X d S )Nz[18446098363113800555])r`   ra   r^   r+   r6   )r/   r
   r
   r   test_decode_array_with_big_int(  s    z2TestPandasJSONTests.test_decode_array_with_big_intfloat_numberg3ӭ?gRC?gB4?g
LO?g	j?g[_$?gk	?g}?5^I?g?signr&   c             C   s&   ||9 }t j|tjt|dd d S )NgV瞯<)Zrtol)rD   r  r+   r6   r   )r/   rf  re  r
   r
   r   test_decode_floating_point,  s    z.TestPandasJSONTests.test_decode_floating_pointc             C   s2   t  }xtddD ]}|j| qW tj| d S )Nr   i )setr   addr+   r,   )r/   rw   r.  r
   r
   r   test_encode_big_set?  s    z'TestPandasJSONTests.test_encode_big_setc             C   s   dt jt kstd S )Nz[])r+   r,   rh  r.   )r/   r
   r
   r   test_encode_empty_setH  s    z)TestPandasJSONTests.test_encode_empty_setc          	   C   sH   ddddddddd	h	}t j|}t j|}x|D ]}||ks0tq0W d S )
Nr&   r'   r(   rr   rN   r   rA  r   rX   )r+   r,   r-   r.   )r/   rw   rf   rg   r   r
   r
   r   test_encode_setK  s
    


z#TestPandasJSONTests.test_encode_settdin  )days   rN   )hoursminutessecondsrR   r<  )rn  nanoseconds)rs  )microsecondsrs  )Zmillisecondsrt  rs  i  c             C   s.   t j|dd}d|j  d}||ks*td S )NT)Z	iso_datesr   )r+   r,   r   r.   )r/   rm  r  r   r
   r
   r   test_encode_timedelta_isoS  s    z-TestPandasJSONTests.test_encode_timedelta_isoNl         r   r   r   )r   r   r   r5  r9  r;  rI  rL  rT  rZ  r`   r   r   r\  r]  r_  ra  rb  rc  rd  rg  rj  rk  rl  r   ru  r
   r
   r
   r   r-  L  s\   &!.	

r-  )'r|   ry   r)   r5   rB   r   r  r   r{   r   r   r   r`   r   Zpandas._libs.jsonZ_libsr+   Zpandas._libs.tslibr   Zpandas.compatr   Zpandasr   r   r   r   r   r   r	   Zpandas._testingZ_testingrD   r   Zfixturer   r!   r"   r   r-  r
   r
   r
   r   <module>   s<   
$
    i (