
    d                     H   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c 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 Z ej         g d          d             Z! G d d	          Z" G d
 d          Z# G d d          Z$dS )    N)IS64)		DataFrameDatetimeIndexIndexNaTPeriodIndexSeries	Timedelta	Timestamp
date_rangec                 >    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                 4    i | ]\  }}t          |          |S  )str).0kvs      [/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/tests/io/json/test_ujson.py
<dictcomp>z_clean_dict.<locals>.<dictcomp>-   s$    ,,,$!QCFFA,,,    )itemsds    r   _clean_dictr       s      -,!'')),,,,r   )Nsplitrecordsvaluesindex)paramsc                     | j         S N)param)requests    r   orientr$   0   s     =r   c                      e Zd Zej                            e d          d             Zej                            dddg          d             Z	ej                            dg d	          d
             Z
d Zd Zd Zej                            dddg          d             Zej                            dej        ej         g          d             Zd Zd Zd Zd Zej                            dg d          d             Zd Zej                            dddg          d             Zd  Zd! Zd" Zd# Zd$ Zd% Zej                            d&g d'          d(             Zd) Z d* Z!ej                            d+g d,          d-             Z"d. Z#d/ Z$ej                            d0 e%j&                     e%j&        d1d2d3           e%j&        d4d5d6d7          g          d8             Z'd9 Z(d: Z)ej                            d;e* e+j,        d<          e+j-        e+j.        e+j.         g          d=             Z/d> Z0d? Z1d@ Z2dA Z3dB Z4ej                            dCg dD          dE             Z5ej                            dFdGdHg          dI             Z6ej                            dJg dK          dL             Z7ej                            dMg dN          dO             Z8ej                            dPg dQ          dR             Z9ej                            dSdTdUg          dV             Z:dW Z;dX Z<dY Z=ej                            dZd[d\g          d]             Z>ej                            d^d_d`g          da             Z?ej                            dbg dc          dd             Z@de ZAej                            dfg dg          dh             ZBdi ZCdj ZDdk ZEdl ZFdm ZGdnS )oTestUltraJSONTestsz$not compliant on 32-bit, xref #15865)reasonc                    t          j        d          }t          j        |d          }t          j        |          }|dk    sJ t          j        d          }t          j        |d          }|dk    sJ t          j        |          }|dk    sJ t          j        d	          }t          j        |d          }|d
k    sJ t          j        |          }|dk    sJ t          j        d          }t          j        |d          }|dk    sJ t          j        |          }|dk    sJ t          j        d          }t          j        |d          }|dk    sJ t          j        |          }|dk    sJ t          j        d          }t          j        |d          }|dk    sJ t          j        |          }|dk    sJ t          j        d          }t          j        |d          }|dk    sJ t          j        |          }|dk    sJ t          j        d          }t          j        |d          }|dk    sJ t          j        |          }|dk    sJ d S )Nz	1337.1337   double_precisiong@z0.95   1.0      ?z0.94z0.9g?z1.95z2.0g       @z-1.95z-2.0g       z0.995   z0.9995   z0.99999999999999944)decimalDecimalujsonencodedecodeselfsutencodeddecodeds       r   test_encode_decimalz&TestUltraJSONTests.test_encode_decimal8   sz   ok**,sR888,w'')####of%%,sQ777%,w''#~~~~of%%,sQ777%,w''#~~~~of%%,sQ777%,w''#~~~~og&&,sQ777&    ,w''$og&&,sQ777%,w''#~~~~oh'',sQ777%,w''#~~~~o344,sR888%,w''#~~~~~~r   ensure_asciiTFc                 l    dd}d}f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                     t          j        fdi|}|| k    sJ t          j        |          k    sJ t          j        |          k    sJ d S )Nr<   r3   r4   jsonloadsr5   )expected_outputencode_kwargsoutputr<   string_inputs      r   helperz@TestUltraJSONTests.test_encode_string_conversion.<locals>.helperx   s{    \ +7;H F _,,,,4:f#5#555555<#7#7777777r   F)encode_html_charsTr   )r7   r<   not_html_encodedhtml_encodedrF   rE   s    `   @r   test_encode_string_conversionz0TestUltraJSONTests.test_encode_string_conversionp   s}    ARU 		8 	8 	8 	8 	8 	8 	    	59999 	|t444444r   long_number)lZ:`7{ g#_tgԟpAc                 r    d|i}t          j        |d          }t          j        |          }||k    sJ d S )Nar)   r*   r3   r4   r5   )r7   rK   r8   r9   r:   s        r   test_double_long_numbersz+TestUltraJSONTests.test_double_long_numbers   sB     K ,sR888,w''g~~~~~~r   c                 D   t           j        }dD ]}t          j        ||          ryt          j        ||          5  t          j        t          j        d                    dk    sJ t          j        dd          dk    sJ 	 d d d            n# 1 swxY w Y    d S d S )N)zit_IT.UTF-8Italian_ItalygˇLz4.78Tprecise_floatgQ@)locale
LC_NUMERICtmcan_set_locale
set_localer3   rA   dumps)r7   lc_category
new_locales      r   test_encode_non_c_localez+TestUltraJSONTests.test_encode_non_c_locale   s   ' ; 	 	J [99 ]:{;; K K ;u{7';';<<GGGG ;vTBBBdJJJJJK K K K K K K K K K K K K K K 		 	s   A	BB	B	c                 r    ddi}t          j        |          }t          j        |d          }||k    sJ d S )NrM   g=
ףp=@TrR   rN   r6   s       r    test_decimal_decode_test_precisez3TestUltraJSONTests.test_decimal_decode_test_precise   s?    Dk,s##,wd;;;g~~~~~~r   c                    d}|t          j        t          j        |                    k    sJ d}|t          j        t          j        |                    k    sJ d}|t          j        t          j        |                    k    sJ d}t          j        |t          j        t          j        |                              sJ d S )NgWw'&l7g0.++gj7֖g?>ӡ)r3   r5   r4   npallclose)r7   nums     r   #test_encode_double_tiny_exponentialz6TestUltraJSONTests.test_encode_double_tiny_exponential   s    el5<#4#4555555el5<#4#4555555el5<#4#4555555{3U\#->-> ? ?@@@@@@@r   unicode_keykey1u   بنc                 f    |di}|t          j        t          j        |                    k    sJ d S )Nvalue1r3   r5   r4   )r7   rd   unicode_dicts      r   "test_encode_dict_with_unicode_keysz5TestUltraJSONTests.test_encode_dict_with_unicode_keys   s7    #X.u|EL,F,FGGGGGGGGr   double_inputc                    t          j        |          }t          |d          t          t          j        |          d          k    sJ t          |d          t          t          j        |          d          k    sJ d S N   )r3   r4   roundr@   rA   r5   )r7   rk   rD   s      r   test_encode_double_conversionz0TestUltraJSONTests.test_encode_double_conversion   sw     l++\1%%tz&/A/A1)E)EEEEE\1%%u|F/C/CQ)G)GGGGGGGr   c                 B    d}t          j        |          }|dk    sJ d S )Nr.   r-   r3   r4   )r7   decimal_inputrD   s      r   test_encode_with_decimalz+TestUltraJSONTests.test_encode_with_decimal   s'    m,,r   c                     g gggdz  }t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )N   r?   )r7   nested_inputrD   s      r   "test_encode_array_of_nested_arraysz5TestUltraJSONTests.test_encode_array_of_nested_arrays   s\    x"}l++tz&111111u|F33333333r   c                     g ddz  }t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )N)cAT@rz   rz   rz   
   r?   )r7   doubles_inputrD   s      r   test_encode_array_of_doublesz/TestUltraJSONTests.test_encode_array_of_doubles   s]    LLLrQm,,
6 2 22222V 4 4444444r   c                 \   d}t          j        |d          }|t          j        |          k    sJ |t          j        |          k    sJ dD ]\}t          j        ||          }t          ||          }|t          j        |          k    sJ |t          j        |          k    sJ ]d S )Ng )>@r)   r*   )r0   	   )r3   r4   r@   rA   r5   ro   )r7   rk   rD   r+   rounded_inputs        r   test_double_precisionz(TestUltraJSONTests.test_double_precision   s    )lR@@@tz&111111u|F333333 & 	9 	9\,AQRRRF!,0@AAM DJv$6$66666 EL$8$888888	9 	9r   invalid_val)rv   9Nc                     d}t          |t                    rt          nt          }d}t	          j        ||          5  t          j        ||           d d d            d S # 1 swxY w Y   d S )NgF7ݚ>@zInvalid value '.*' for option 'double_precision', max is '15'|an integer is required \(got type |object cannot be interpreted as an integermatchr*   )
isinstanceint
ValueError	TypeErrorpytestraisesr3   r4   )r7   r   rk   expected_exceptionmsgs        r   test_invalid_double_precisionz0TestUltraJSONTests.test_invalid_double_precision   s     /+5k3+G+GVZZY: 	
 ]-S999 	E 	ELDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   A""A&)A&c                     d}t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ |dk    sJ d S )NzA string \ /   
  	z"A string \\ \/ \b \f \n \r \t"r?   )r7   rE   rD   s      r   test_encode_string_conversion2z1TestUltraJSONTests.test_encode_string_conversion2   sd    5l++tz&111111u|F333333BBBBBBBr   unicode_inputu@   Räksmörgås اسامة بن محمد بن عوض بن لادن
   æ¥Ñc                     t          j        |          }t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S r!   r3   r4   r5   r@   rY   rA   )r7   r   encdecs       r   test_encode_unicode_conversionz1TestUltraJSONTests.test_encode_unicode_conversion   s\    
 l=))l3dj//////djoo%%%%%%r   c                     d}t          j        |          }t          j        |          }||k    sJ |t          j        |          k    sJ d S )N)r3   r4   r5   r@   rY   )r7   escaped_inputr   r   s       r   test_encode_control_escapingz/TestUltraJSONTests.test_encode_control_escaping  sW    l=))l3####dj////////r   c                     d}t          j        |          }t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )Nu   ðr   )r7   surrogate_inputr   r   s       r   "test_encode_unicode_surrogate_pairz5TestUltraJSONTests.test_encode_unicode_surrogate_pair  s_    ,l?++l3dj111111djoo%%%%%%r   c                     d}t          j        |          }t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )Nu   ð°TRAILINGNORMALr   r7   four_bytes_inputr   r   s       r   test_encode_unicode_4bytes_utf8z2TestUltraJSONTests.test_encode_unicode_4bytes_utf8  sb    ;l+,,l3dj!1222222djoo%%%%%%r   c                     d}t          j        |          }t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )Nu   ó¿¿¿TRAILINGNORMALr   r   s       r   &test_encode_unicode_4bytes_utf8highestz9TestUltraJSONTests.test_encode_unicode_4bytes_utf8highest  sb    ;l+,,l3dj!1222222djoo%%%%%%r   c                     d}d}t          j        t          |          5  t          j        |g           d d d            d S # 1 swxY w Y   d S )Nu   ''zT'utf-8' codec can't encode character '\\udac0' in position 1: surrogates not allowedr   )r   r   UnicodeEncodeErrorr3   rY   )r7   stringr   s      r   test_encode_unicode_errorz,TestUltraJSONTests.test_encode_unicode_error&  s    5 	 ]-S999 	" 	"K!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   AA
Ac                     g ggg}t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ |t          j        |          k    sJ d S r!   r3   r4   r@   rA   rY   r5   )r7   arr_in_arr_inputrD   s      r   test_encode_array_in_arrayz-TestUltraJSONTests.test_encode_array_in_array/  sv     TF8.//4:f#5#55555$45555555<#7#7777777r   	num_input)iz  i         c                     t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ |t          j        |          k    sJ d S r!   r   )r7   r   rD   s      r   test_encode_num_conversionz-TestUltraJSONTests.test_encode_num_conversion7  sj     i((DJv......I......EL00000000r   c                     g d}t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )N)r,   r/   r0      r?   )r7   
list_inputrD   s      r   test_encode_list_conversionz.TestUltraJSONTests.test_encode_list_conversionE  sV    !\\
j))TZ//////U\&11111111r   c                     ddddd}t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )Nr,   r/   r0   r   )k1k2k3k4r?   )r7   
dict_inputrD   s      r   test_encode_dict_conversionz.TestUltraJSONTests.test_encode_dict_conversionL  s^    Qaq99
j))TZ//////U\&11111111r   builtin_value)NTFc                     t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ |t          j        |          k    sJ d S r!   r   )r7   r   rD   s      r   %test_encode_builtin_values_conversionz8TestUltraJSONTests.test_encode_builtin_values_conversionS  sh    m,,
6 2 22222M222222V 4 4444444r   c                 z   t           j                             t          j                              }t          j        |d          }t          j        |                                          }t          |          t          j
        |          k    sJ t          |          t          j        |          k    sJ d S )Ns	date_unit)datetimefromtimestamptimer3   r4   calendartimegmutctimetupler   r@   rA   r5   )r7   datetime_inputrD   expecteds       r   test_encode_datetime_conversionz2TestUltraJSONTests.test_encode_datetime_conversionZ  s    !*88EEn<<<?>#>#>#@#@AA8}}
6 2 222228}}V 4 4444444r   c                    t           j                            t          j                              }t	          j        |d          }|j        |j        |j        dddf}t          j
        |          }t          |          t          j        |          k    sJ t          |          t	          j        |          k    sJ d S )Nr   r   r   )r   dater   r   r3   r4   yearmonthdayr   r   r   r@   rA   r5   )r7   
date_inputrD   tupr   s        r   test_encode_date_conversionz.TestUltraJSONTests.test_encode_date_conversionb  s    ]00==
jC888
 0*.!QJ?3''8}}
6 2 222228}}V 4 4444444r   testr,   r/   r0   r{      r)   < c                 n    t          j        |          }d|                                 d}||k    sJ d S )N"r3   r4   	isoformatr7   r   rD   r   s       r   !test_encode_time_conversion_basicz4TestUltraJSONTests.test_encode_time_conversion_basicl  sD    
 d##*t~~''***6!!!!!!r   c                     t          j        ddddt          j                  }t	          j        |          }d|                                 d}||k    sJ d S Nr{   r   r)   r   r   )r   r   pytzutcr3   r4   r   r   s       r    test_encode_time_conversion_pytzz3TestUltraJSONTests.test_encode_time_conversion_pytzu  s[    }RR::d##*t~~''***6!!!!!!r   c                     t          j        ddddt          j                                                  }t          j        |          }d|                                 d}||k    sJ d S r   )r   r   dateutiltztzutcr3   r4   r   r   s       r   $test_encode_time_conversion_dateutilz7TestUltraJSONTests.test_encode_time_conversion_dateutil|  sg    }RR1B1B1D1DEEd##*t~~''***6!!!!!!r   decoded_inputr   c                 J    t          j        |          dk    s
J d            d S )NnullzExpected nullrr   )r7   r   s     r   test_encode_as_nullz&TestUltraJSONTests.test_encode_as_null  s-     |M**f444o44444r   c           	         t          j         ddddddd          }t          |                              d          }t          j        t          j        |d	                    }||j        d
z  k    sJ t          j        t          j        |d	                    }||j        dz  k    sJ t          j        t          j        |d	                    }||j        dz  k    sJ t          j        t          j        |d	                    }||j        k    sJ d}t          j        t          |          5  t          j        |d	           d d d            d S # 1 swxY w Y   d S )N           r   iI nsr   r   i ʚ;msi@B us  z*Invalid value 'foo' for option 'date_unit'r   foo)
r   r   as_unitr3   r5   r4   _valuer   r   r   )r7   valstamp	roundtripr   s        r   test_datetime_unitsz&TestUltraJSONTests.test_datetime_units  s   aRR@@#&&t,,LcS!A!A!ABB	ELE11111LcT!B!B!BCC	ELE11111LcT!B!B!BCC	ELE11111LcT!B!B!BCC	EL((((:]:S111 	/ 	/L....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   7EE"Ec                     d}t          j        |d          }t          j        |          }|t          j        |d          k    sJ |t          j        |          k    sJ d S )Nr   F)r<   r   )r7   	unencodedr   r   s       r   test_encode_to_utf8z&TestUltraJSONTests.test_encode_to_utf8  si    *	l95999l3dj???????djoo%%%%%%r   c                     d}t          j        |          }t          j        t          |                    }||k    sJ d S )Nz{"obj": 31337}r3   r5   r   )r7   r   dec1dec2s       r   test_decode_from_unicodez+TestUltraJSONTests.test_decode_from_unicode  s>    (|M**|C..//t||||||r   c                     G d d          } G d d          } |            } |            |_         ||j         _         t          j        t          d          5  t	          j        |           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZdS )8TestUltraJSONTests.test_encode_recursion_max.<locals>.O2r   N__name__
__module____qualname__memberr   r   r   O2r            FFFr   r  c                       e Zd ZdZdS )8TestUltraJSONTests.test_encode_recursion_max.<locals>.O1r   Nr	  r   r   r   O1r    r  r   r  Maximum recursion level reachedr   )r  r   r   OverflowErrorr3   r4   )r7   r  r  r   s       r   test_encode_recursion_maxz,TestUltraJSONTests.test_encode_recursion_max  s   	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 !rtt&3#]=0QRRR 	( 	(L'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   A==BBc                     d}d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nzfdsa sda v9sa fdsaz0Unexpected character found when decoding 'false'r   r   r   r   r3   r5   )r7   	jibberishr   s      r   test_decode_jibberishz(TestUltraJSONTests.test_decode_jibberish  s    (	@]:S111 	$ 	$L###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   AA	Abroken_json)[{]}c                     d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )NzExpected object or valuer   r  )r7   r  r   s      r   test_decode_broken_jsonz*TestUltraJSONTests.test_decode_broken_json  s     )]:S111 	& 	&L%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&   A  AAtoo_big_charr  r  c                     t          j        t          d          5  t          j        |dz             d d d            d S # 1 swxY w Y   d S )Nz#Reached object decoding depth limitr   i   r  )r7   r"  s     r   test_decode_depth_too_bigz,TestUltraJSONTests.test_decode_depth_too_big  s    ]:-RSSS 	7 	7L5666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   AAA
bad_string)z"TESTINGz
"TESTING\"trufanc                     d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )NzSUnexpected character found when decoding|Unmatched ''"' when when decoding 'string'r   r  )r7   r%  r   s      r   test_decode_bad_stringz)TestUltraJSONTests.test_decode_bad_string  s    : 	 ]:S111 	% 	%L$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%r!  z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                     t          d          D ][}t          j        t          t	          j        |                    5  t          j        |           d d d            n# 1 swxY w Y   \d S )Nr   r   )ranger   r   r   reescaper3   r5   )r7   r  err_msg_s       r   test_decode_broken_json_leakz/TestUltraJSONTests.test_decode_broken_json_leak  s     t 	* 	*Az71C1CDDD * *[)))* * * * * * * * * * * * * * *	* 	*s   A  A$	'A$	invalid_dict)z{{{{31337}}}}z{{{{"key":}}}}z{{{{"key"}}}}c                     d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nz{Key name of object must be 'string' when decoding 'object'|No ':' found when decoding object value|Expected object or valuer   r  )r7   r2  r   s      r   test_decode_invalid_dictz+TestUltraJSONTests.test_decode_invalid_dict  s    ' 	
 ]:S111 	' 	'L&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'r!  numeric_int_as_str31337z-31337c                 T    t          |          t          j        |          k    sJ d S r!   )r   r3   r5   )r7   r5  s     r   test_decode_numeric_intz*TestUltraJSONTests.test_decode_numeric_int
  s/     %&&%,7I*J*JJJJJJJr   c                    d}t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ |t          j        |          k    sJ d}t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ |t          j        |          k    sJ dt          j        d          k    sJ d S )Nz31337   1337 z"  \u0000\r\n "z   
 r   )r7   wrapped_inputrD   alone_inputs       r   test_encode_null_characterz-TestUltraJSONTests.test_encode_null_character  s    )m,,
6 2 22222M222222V 4 44444k**dj000000K000000el6222222#u{?'C'CCCCCCCr   c                 b    d}t          j        |          t          j        |          k    sJ d S )Nz"31337 \u0000 31337"r3   r5   r@   rA   )r7   r;  s     r   test_decode_null_characterz-TestUltraJSONTests.test_decode_null_character   s2    /|M**dj.G.GGGGGGGr   c                     g d}t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ d S )N)    rB  rB  rB  rB  rB  r?   r7   
long_inputrD   s      r    test_encode_list_long_conversionz3TestUltraJSONTests.test_encode_list_long_conversion$  s`    
 
 

 j))TZ//////U\&11111111r   rD  rB  l    c                     t          j        |          }|t          j        |          k    sJ |t          j        |          k    sJ |t          j        |          k    sJ d S r!   r   rC  s      r   test_encode_long_conversionz.TestUltraJSONTests.test_encode_long_conversion2  sh    j))TZ//////J//////U\&11111111r   bigNum                    c                     t          j        |          }t          |          |k    sJ t          j        t
          d          5  t          j        |          |k    sJ 	 d d d            d S # 1 swxY w Y   d S Nz#Value is too big|Value is too smallr   )r3   r4   r   r   r   r   rA   )r7   rH  encodings      r   #test_dumps_ints_larger_than_maxsizez6TestUltraJSONTests.test_dumps_ints_larger_than_maxsize:  s    <''6{{h&&&&]7
 
 
 	3 	3 ;x((F22222		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   A..A25A2int_exp)1337E40z1.337E40z1337E+9z	1.337e+40z1.337E-4c                 ^    t          j        |          t          j        |          k    sJ d S r!   r?  )r7   rO  s     r   test_decode_numeric_int_expz.TestUltraJSONTests.test_decode_numeric_int_expE  s/     |G$$
7(;(;;;;;;;r   c                     d}t          j        t          |          5  t          j        d            d d d            d S # 1 swxY w Y   d S )NzExpected 'str' or 'bytes'r   )r   r   r   r3   rA   r7   r   s     r   test_loads_non_str_bytes_raisesz2TestUltraJSONTests.test_loads_non_str_bytes_raisesK  s    )]9C000 	 	K	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r!  r   )l   M+ l        l        l    c                 R    d| d}t          j        |          d         |k    sJ d S )Nz{"id": r  idr3   r5   )r7   r   docs      r   &test_decode_number_with_32bit_sign_bitz9TestUltraJSONTests.test_decode_number_with_32bit_sign_bitP  s:     !   |C  &#------r   c                     t          d          D ]5}d                                }|dz  dz  dz  }t          j        |           6d S )Nr{      å   r/   )r,  r4   r3   )r7   r0  baseescape_inputs       r   test_encode_big_escapez)TestUltraJSONTests.test_encode_big_escapeW  sV    r 	' 	'A??$$D$;-1LL&&&&	' 	'r   c                     t          d          D ]=}d                                }d}||dz  dz  dz  z   |z   }t          j        |           >d S )Nr{   r\     "r]  r/   )r,  r4   r3   r5   )r7   r0  r^  quoter_  s        r   test_decode_big_escapez)TestUltraJSONTests.test_decode_big_escape^  se    r 	' 	'A??$$DE D4K$$6$:;eCLL&&&&	' 	'r   c                     ddi G fdd          } |            }t          j        |          }t          j        |          }|k    sJ d S )Nkeyr   c                       e Zd Z fdZdS )1TestUltraJSONTests.test_to_dict.<locals>.DictTestc                     S r!   r   )r7   r   s    r   toDictz8TestUltraJSONTests.test_to_dict.<locals>.DictTest.toDictk  s    r   N)r
  r  r  rj  r   s   r   DictTestrh  j  s.              r   rk  rN   )r7   rk  orD   r   r   s        @r   test_to_dictzTestUltraJSONTests.test_to_dictg  sx    EN	 	 	 	 	 	 	 	 	 	 HJJal6""axxxxxxr   c           	      X    G fdd          d}t          j        t          |          5  t          j         d                     d d d            n# 1 swxY w Y   dt          j         d          t
                    k    sJ d }d	t          j         d          |          k    sJ d
 }t          j        t          d          5  t          j         d          |           d d d            n# 1 swxY w Y   d }t          j        t          j         d          |                    dk    sJ d }t          j        t          j        t          j        ddd                              t          j        t          j         d          |                    k    sJ  d           d          g}t          j
        t          j        |t
                              t          j        t          j        |t
                              k    sJ d S )Nc                   >    e Zd ZddZe fd            ZdefdZdS )<TestUltraJSONTests.test_default_handler.<locals>._TestObjectreturnNc                     || _         d S r!   )r   )r7   r   s     r   __init__zETestUltraJSONTests.test_default_handler.<locals>._TestObject.__init__v  s    r   c                      d          S )Nrecursive_attrr   )r7   _TestObjects    r   ru  zKTestUltraJSONTests.test_default_handler.<locals>._TestObject.recursive_attry  s    "{#3444r   c                 *    t          | j                  S r!   )r   r   r7   s    r   __str__zDTestUltraJSONTests.test_default_handler.<locals>._TestObject.__str__}  s    48}}$r   rq  N)r
  r  r  rs  propertyru  r   ry  )rv  s   r   rv  rp  u  si            5 5 5 5 X5% % % % % % %r   rv  r  r   r   z"foo")default_handlerc                     dS )Nfoobarr   r0  s    r   
my_handlerz;TestUltraJSONTests.test_default_handler.<locals>.my_handler  s    8r   z"foobar"c                      t          d          )NI raise for anything)r   r  s    r   my_handler_raiseszBTestUltraJSONTests.test_default_handler.<locals>.my_handler_raises  s    2333r   r  c                     dS )N*   r   r  s    r   my_int_handlerz?TestUltraJSONTests.test_default_handler.<locals>.my_int_handler  s    2r   r  c                 .    t          j         ddd          S )Nr   r/   r0   )r   r  s    r   my_obj_handlerz?TestUltraJSONTests.test_default_handler.<locals>.my_obj_handler  s    $T1a000r   r   r/   r0   bar)default)r   r   r  r3   r4   r   r   r5   r   r@   rA   rY   )r7   r   r  r  r  r  obj_listrv  s          @r   test_default_handlerz'TestUltraJSONTests.test_default_handlert  s-   		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 0]=444 	- 	-LU++,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-%,{{5'9'93OOOOOOO	 	 	 U\K

 
 
 
 
 
 
	4 	4 	4 ]9,BCCC 	P 	PLU++=NOOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P	 	 	 L[[//PPP     	1 	1 	1 |L*4A6677
 
\LU++^LLL
 

 
 
 
  K&&E(:(:;z$*Xs;;;<<L3777A
 A
 
 
 
 
 
 
s#   AAA C??DDc                      G d d          } |dddd          }t          j        t          j        |                    ddddk    sJ d S )	Nc                       e Zd ZddZd ZdS ):TestUltraJSONTests.test_encode_object.<locals>._TestObjectrq  Nc                 >    || _         || _        || _        || _        d S r!   rM   b_cr   )r7   rM   r  r  r   s        r   rs  zCTestUltraJSONTests.test_encode_object.<locals>._TestObject.__init__  s"    r   c                     dS rm   r   rx  s    r   ez<TestUltraJSONTests.test_encode_object.<locals>._TestObject.e  s    qr   rz  )r
  r  r  rs  r  r   r   r   rv  r    s7               r   rv  r,   r/   r0   r   r  )rM   r  r   rh   )r7   rv  test_objects      r   test_encode_objectz%TestUltraJSONTests.test_encode_object  sz    	 	 	 	 	 	 	 	 "kAqA666|EL5566PQ:R:RRRRRRRr   N)Hr
  r  r  r   markskipifr   r;   parametrizerJ   rO   r\   r^   rc   rj   mathpirp   rt   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   
datetime64naninfr   r   r   r  r  r  r   r$  r*  r1  r4  r8  r=  r@  rE  rG  rN  rR  rU  rZ  r`  rd  rm  r  r  r   r   r   r&   r&   7   sH       [D)OPP5 5 QP5n [^dE];;5 5 <;52 [XXX   	 	 	  A A A []VV,<==H H >=H [47(+ H H H
  4 4 45 5 59 9 9 [	
 	
 	
 	E 	E 	EC C C [	KMcd & &	 &0 0 0& & && & && & &" " "8 8 8 [	
 	
 	
 1 1 12 2 22 2 2 [_.A.A.ABB5 5 CB55 5 55 5 5 [	-(-1a00-(-BF2S2ST " "	 "
" " "" " " [#}r}U33RVRVbfWM F F F/ / /(& & &  ( ( ( $ $ $ [	
 	
 	
 & & &
 [^c3Z887 7 987 [	
 	
 	
	 	% %	 	% [	
 	
 	

 
* *
 
*
 [	
 	
 	
 ' ' ' [w1 K K KD D D H H H2 2 2 [\,?AU+VWW2 2 XW2 [X|'<==3 3 >=3 [NNN < < <  
 [U$K$K$KLL. . ML.' ' '' ' '  4
 4
 4
lS S S S Sr   r&   c                       e Zd Zej                            dddg          d             Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zej                            dg d          d             Zd Zd Zd ZdS )TestNumpyJSONTests
bool_inputTFc                 |    t          |          }t          j        t          j        |                    |k    sJ d S r!   )boolr3   r5   r4   )r7   r  r  s      r   	test_boolzTestNumpyJSONTests.test_bool  s8    |ELOO,,111111r   c                     t          j        g dt                    }t          j        t          j        t          j        |                    t                    }t          j        ||           d S )N)TFTTFTFFdtype)r`   arrayr  r3   r5   r4   rV   assert_numpy_array_equal)r7   
bool_arrayrD   s      r   test_bool_arrayz"TestNumpyJSONTests.test_bool_array  sf    X@@@
 
 

 %,u|J'?'?@@MMM
#J77777r   c                     t          j        |          j        } |d          } |t          j        t          j        |                              |k    sJ d S )Nr,   r`   r  typer3   r5   r4   r7   any_int_numpy_dtypeklassrb   s       r   test_intzTestNumpyJSONTests.test_int  sW    ,--2eAhhuU\%,s"3"34455<<<<<<r   c                    t          j        dt                    }|                    |          }t          j        t          j        t          j        |                    |          }t          j	        ||           d S )Nd   r  )
r`   aranger   astyper  r3   r5   r4   rV   r  )r7   r  arr	arr_input
arr_outputs        r   test_int_arrayz!TestNumpyJSONTests.test_int_array  ss    i3'''JJ233	XLi00119L
 
 

 	#Iz:::::r   c                 R   |dv rt           st          j        d           t          j        |          j        }|dk    rt          j        d          j        }nt          j        |          j        } |t          j	        t          j
        |                              |k    sJ d S )N)int64uint64z-Cannot test 64-bit integer on 32-bit platformr  r  )r   r   skipr`   r  r  iinfomaxr3   r5   r4   r  s       r   test_int_maxzTestNumpyJSONTests.test_int_max  s    "555d5KGHHH,--2 (**(7##'CC(.//3CuU\%,s"3"34455<<<<<<r   c                     t          j        |          j        } |d          } |t          j        t          j        |                              |k    sJ d S )NgJY8p@r  r7   float_numpy_dtyper  rb   s       r   
test_floatzTestNumpyJSONTests.test_float  sW    *++0eHoouU\%,s"3"34455<<<<<<r   c                    t          j        dddt                    }|                    |          }t          j        t          j        t          j        |d                    |          }t          j	        ||           d S )Ng      )@gףp=
7g@geX?r  r)   r*   )
r`   r  floatr  r  r3   r5   r4   rV   assert_almost_equal)r7   r  r  float_inputfloat_outputs        r   test_float_arrayz#TestNumpyJSONTests.test_float_array  s|    iffE:::jj!233xLkBGGGHH#
 
 
 	{L99999r   c           
      
   t          j        |          j        } |t          j        |          j        dz            }t          j         |t          j        t          j	        |d                              |           d S )Nr{   r)   r*   )
r`   r  r  finfor  rV   r  r3   r5   r4   r  s       r   test_float_maxz!TestNumpyJSONTests.test_float_max  s~    *++0eBH.//3b899
E%,u|C"EEEFFGG	
 	
 	
 	
 	
r   c           	          t          j        d          }|                    d          }t          j        t          j        t          j        t          j        |                              |           d S )N`   )r/   r/   r/   r/   r0   r/   	r`   r  reshaperV   r  r  r3   r5   r4   r7   r  s     r   test_array_basicz#TestNumpyJSONTests.test_array_basic  sX    immkk,--
#BHU\%,s:K:K-L-L$M$MsSSSSSr   shape))r{   r{   rn   rn   r   )r  r,   c           	          t          j        d          }|                    |          }t          j        t          j        t          j        t          j        |                              |           d S )Nr  r  )r7   r  r  s      r   test_array_reshapedz&TestNumpyJSONTests.test_array_reshaped  sW    innkk%  
#BHU\%,s:K:K-L-L$M$MsSSSSSr   c           
         dg i i g ddddgddig	}t          j        |t                    }t          j        t          j        t          j        |                    t                    }t          j        ||           d S )NrM   r  g33333sX@r  rf  r   r  )r`   r  objectr3   r5   r4   rV   r  )r7   arr_listr  results       r   test_array_listz"TestNumpyJSONTests.test_array_list
  s    #JEN

 hxv...%,u|C'8'899HHH
#FC00000r   c                    t           j        }t          j        ddd|          }|                    d          }t          j        t          j        t          j        |                    |          }t          j	        ||           d S )NgrhY@gX9vi@r,   r  r  )
r`   float32r  r  r  r3   r5   r4   rV   r  )r7   r  r  arr_outs       r   test_array_floatz#TestNumpyJSONTests.test_array_float  ss    
i!5999kk)$$(5<S(9(9::%HHH
sG,,,,,r   c                     t          j        d          }t          j        t          |          5  t          j        t          j        d                     d d d            d S # 1 swxY w Y   d S )Nz:array(1) (0d array) is not JSON serializable at the momentr   r,   )	r-  r.  r   r   r   r3   r4   r`   r  rT  s     r   test_0d_arrayz TestNumpyJSONTests.test_0d_array#  s    iTUU]9C000 	& 	&L!%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   'A$$A(+A(N)r
  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r    s%       [\D%=992 2 :928 8 8= = =; ; ;= = == = =: : :
 
 
T T T [W&E&E&EFFT T GFT1 1 1 - - -& & & & &r   r  c                      e Zd Zd Zd Zd Zd Zd Zd Ze	j
                            dg d          d	             Ze	j
                            d
g dgg          d             Ze	j
                            dddg          d             Ze	j
                            dd d g          d             Zd Zd Ze	j
                            dd d g          d             Ze	j
                            dg d          e	j
                            dddg          d                         Zd Zd  Zd! Ze	j
                            d" ed#$           ed$           ed%d&d&'           ed%d(d)'           edd&*           ed+           edd,           eddd-           ed.d.d.-          g	          d/             Zd0 Zd1S )2TestPandasJSONTestsc                 |   t           j        }t          g dg dgddgg d|          }|i nd|i}|j        |k                                    sJ t          j        t          j        |fi |          }|j        |k                                    sJ |dk    rt          |          }t          di |}nt          |          }|d	k    rg d
|_	        ddg|_
        n*|dk    r
ddg|_
        n|dk    r|                                }|j        |k                                    sJ t          j        ||           d S )Nr,   r/   r0   r   rn      rM   r  xyz)r   columnsr  r$   r   r   )r   r,   r/   r   r,   r   r   r   )r`   r  r   dtypesallr3   r5   r4   r   r  r   	transposerV   assert_frame_equal)r7   r$   r  dfrC   rD   r   s          r   test_dataframez"TestPandasJSONTests.test_dataframe+  sz   YY			"*#OO	
 
 
 %n8V2D	U"'')))))el2????@@	U"''))))) Wf%%C%%%%FFv&&F X"BJ1vBHHy  1vBHHwB	U"'')))))
fb)))))r   c                 b   t          g dg dgddgg d          }||                                d}|i nd|i}t          j        t          j        |fi |          t          j        t          j        |fi |          d}t          j        t          j        |fi |          |k    sJ d S )	Nr  r  rM   r  r  )r   r  )df1df2r$   )r   copyr3   r5   r4   )r7   r$   r  nestedkwargsexps         r   test_dataframe_nestedz)TestPandasJSONTests.test_dataframe_nestedM  s    YY			"3*ooo
 
 
 BGGII..~Hf+= <R : :6 : :;;<R : :6 : :;;
 
 |EL::6::;;sBBBBBBr   c                    t           j        }t          g ddg d|                                          }|j        |k    sJ |i nd|i}t          j        t          j        |fi |          }|j        |k    sJ |dk    rt          |          }t          di |}nt          |          }|dv r%d |_	        |                                }g d|_
        n|d	v rd |_	        g d
|_
        |j        |k    sJ t          j        ||           d S )Nr{   rv      (   2   <   seriesr     r   r   r{   r)   )namer   r  r$   r   )Nr   )678r   1015)r   r   )r   r,   r/   r0   r   rn   r   )r`   r  r	   sort_valuesr  r3   r5   r4   r   r  r   rV   assert_series_equal)r7   r$   r  r   rC   rD   r   s          r   test_serieszTestPandasJSONTests.test_series[  sP   $$$&&&	
 
 

 +-- 	
 w%$n8V2Del1>>>>??w%Wf%%C]]c]]FFF^^F_$$AF''))F666AGG,,,AF(((AGw%
vq)))))r   c                 z   t          g ddg d                                          }||                                d}|i nd|i}t          j        t          j        |fi |          t          j        t          j        |fi |          d}t          j        t          j        |fi |          |k    sJ d S )Nr  r  r  )r  r   )s1s2r$   )r	   r  r  r3   r5   r4   )r7   r$   r   r  r  r  s         r   test_series_nestedz&TestPandasJSONTests.test_series_nested{  s    $$$8;O;O;O
 
 

+-- 	
 **~Hf+= ,u|A888899,u|A888899
 
 |EL::6::;;sBBBBBBr   c                    t          g dd          }t          t          j        t          j        |                    d          }t	          j        ||           t          t          j        t          j        |d                              }t          di |}t	          j        ||           |j        |j        k    sJ t	          j        ||           |j        |j        k    sJ t          t          j        t          j        |d                    d          }t	          j        ||           t          t          j        t          j        |d                    d          }t	          j        ||           t          t          j        t          j        |d                    d          }t	          j        ||           d S )	N)   -      b   +      r   )r  r   )r$   r   r   r   )r   r3   r5   r4   rV   assert_index_equalr   r  )r7   irD   r   s       r   
test_indexzTestPandasJSONTests.test_index  s   ***999 u|ELOO447CCC
a(((%,u|Ag'F'F'FGGHH
a(((v$$$$
a(((v$$$$u|EL8$D$D$DEEGTTT
a(((u|EL9$E$E$EFFWUUU
a(((u|EL7$C$C$CDD7SSS
a(((((r   c                    d}t          t          t          dd                    d           }t          j        ||          }t          t          j        t          j        |                              }t          j	        ||           t          t
          j                            t          |                    |          }t          t          j        t          j        ||                              }|j        j                            t
          j                  }t          |          |_        t          j        ||           d S )Nr   z1/1/2000rv   )periodsfreqr   r   )r   listr   r3   r4   r`   r  r5   rV   r  r	   randomrandnlenr   r   r  r  r  )r7   r   rngr9   r:   ts
idx_valuess          r   test_datetime_indexz'TestPandasJSONTests.test_datetime_index  s   	 DJ!C!C!CDD4PPP,si888g)>)> ? ?@@
c7+++BIOOCHH--S999el2&K&K&KLLMM])00::
%j11
r7+++++r   invalid_arr)z[31337,]z[,31337]z[]]z[,]c                     d}t          j        t          |          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nz[Expected object or value|Trailing data|Unexpected character found when decoding array valuer   r  )r7   r+  r   s      r   test_decode_invalid_arrayz-TestPandasJSONTests.test_decode_invalid_array  s    C 	 ]:S111 	& 	&L%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r!  r  r   c                 T    |t          j        t          |                    k    sJ d S r!   r  r  s     r   test_decode_arrayz%TestPandasJSONTests.test_decode_array  s)    el3s88,,,,,,,,r   extreme_numrB  r   c                 T    |t          j        t          |                    k    sJ d S r!   r  )r7   r0  s     r   test_decode_extreme_numbersz/TestPandasJSONTests.test_decode_extreme_numbers  s+    el3{+;+;<<<<<<<<r   too_extreme_numrI  rJ  c                     t          j        t          d          5  t          j        |           d d d            d S # 1 swxY w Y   d S rL  r  )r7   r3  s     r   test_decode_too_extreme_numbersz3TestPandasJSONTests.test_decode_too_extreme_numbers  s    ]7
 
 
 	* 	* L)))		* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*   >AAc                 :    i t          j        d          k    sJ d S )Nz{}
	 rX  rx  s    r   %test_decode_with_trailing_whitespacesz9TestPandasJSONTests.test_decode_with_trailing_whitespaces  s#    U\),,,,,,,,r   c                     t          j        t          d          5  t          j        d           d d d            d S # 1 swxY w Y   d S )NzTrailing datar   z{}
	 ar  rx  s    r   )test_decode_with_trailing_non_whitespacesz=TestPandasJSONTests.test_decode_with_trailing_non_whitespaces  s    ]:_=== 	% 	%L$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%r6  valuec                     t          j        t          d          5  t          j        |           d d d            d S # 1 swxY w Y   d S rL  )r   r   r   r3   rA   )r7   r;  s     r   test_decode_array_with_big_intz2TestPandasJSONTests.test_decode_array_with_big_int  s    ]7
 
 
 	 	 K		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	r6  float_number)	g3ӭ?gRC?gB4?g
LO?g	j?g[_$?gk	?g}?5^I?g?signr   r,   c                 |    ||z  }t          j        |t          j        t	          |                    d           d S )NgV瞯<)rtol)rV   r  r3   rA   r   )r7   r?  r>  s      r   test_decode_floating_pointz.TestPandasJSONTests.test_decode_floating_point  s?      	
|U[\9J9J-K-KRWXXXXXXr   c                     t                      }t          dd          D ]}|                    |           t          j        |           d S )Nr   i )setr,  addr3   r4   )r7   r   r  s      r   test_encode_big_setz'TestPandasJSONTests.test_encode_big_set  sH    EEq&!! 	 	AEE!HHHH 	Qr   c                 R    dt          j        t                                k    sJ d S )Nz[])r3   r4   rD  rx  s    r   test_encode_empty_setz)TestPandasJSONTests.test_encode_empty_set  s'    u|CEE********r   c                 t    h d}t          j        |          }t          j        |          }|D ]}||v sJ 	d S )N>	   r,   r/   r0   r   rn   r  r  r   r   rN   )r7   r   r   r   r   s        r   test_encode_setz#TestPandasJSONTests.test_encode_set  sQ    '''l1ool3 	 	A66666	 	r   tdin  )days   rn   )hoursminutessecondsrv   r   )rL  nanoseconds)rQ  )microsecondsrQ  )millisecondsrR  rQ  i  c                 r    t          j        |d          }d|                                 d}||k    sJ d S )NT)	iso_datesr   r   )r7   rK  r  r   s       r   test_encode_timedelta_isoz-TestPandasJSONTests.test_encode_timedelta_iso	  sG      bD111(r||~~(((!!!!!!r   c                     t          ddgd          }t          |          }|                                dk    sJ d S )Nz
2022-04-06z
2022-04-07Dr   r"  z{})r   r   to_json)r7   pr  s      r   test_encode_periodindexz+TestPandasJSONTests.test_encode_periodindex  sH    |43???Qzz||t######r   N)r
  r  r  r  r  r  r  r  r*  r   r  r  r-  r/  r2  r5  r8  r:  r=  rB  rF  rH  rJ  r
   rV  r[  r   r   r   r  r  *  s1        *  *  *DC C C* * *@C C C) ) )2, , ," [	
 	
 	
 & & & [UR%M22- - 32- []-@BV,WXX= = YX= [.E]0KLL* * ML*- - -% % % [W%zh=&ABB  CB [
	
 
	
 
	
  [Vb!W--Y Y .- Y  + + +   [I3I2IB1555IBB777I21---I!$$$I1!444I11!DDDI3ScJJJ
	
 " " "$ $ $ $ $r   r  )%r   r   r1   r@   rT   r  r-  r   r   numpyr`   r   r   pandas._libs.json_libsr3   pandas.compatr   pandasr   r   r   r   r   r	   r
   r   r   pandas._testing_testingrV   r   fixturer$   r&   r  r  r   r   r   <module>rd     s         				         ! ! ! ! ! ! ! ! !      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
      - - -  888    @
S @
S @
S @
S @
S @
S @
S @
SFm& m& m& m& m& m& m& m&`x$ x$ x$ x$ x$ x$ x$ x$ x$ x$r   