
    0PhW                        d dl Z d dlmZ d dlZd dlZd dlmZ d dl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mZmZmZmZmZmZmZmZmZmZmZm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* ej+        ,                    d	 ej-        g d
          g d
g          d             Z.d Z/e%d             Z0e%d             Z1ej+        ,                    dddg          d             Z2ej+        ,                    d e                       ej+        ,                    dddd dg dfdddddgfddgd dg d
fg dddddgfdd gd dg d!fg d"ddd#d$gfddgd dg d%fg d&ddd'd(gfg d
g d
gd dg dfg d)g d*gddddgfd+dd dg d,fdddd-d.gfddgd dg d
fg dddd/d0gfdd gd dg d1fg d"ddd2d3gfddgd dg d4fg d&ddd0d5gfg d
g d
gd dg d6fg d)g d*gddd7d8gfg          d9                         Z3ej+        ,                    d: e d;                    d<             Z4ej+        ,                    d: e d;                    ej+        ,                    d=dddge5d>fd ddgge6e5fd?fd g d@e6d?fd dAdge7dBff          dC                         Z8dD Z9e%dE             Z:e%ej+        ,                    dFg dG          ej+        ,                    dHddej;        gedfddIej;         gedIfej<        ej<        geej<        fg d
ej;        ej;        ej;        gg dJg eed K          g dLfg d
ej;        ej;        ej;        gg dJg eedK          dMej;        dNgfddej;        gedfddej;        gedfej<         ej<         geej<         fg d
ej;        ej;        ej;        gg dJg eed K          g dOfg d
ej;        ej;        ej;        gg dJg eedK          dPej;        dQgfddej;        gedfddIej;         gedRfej<         ej<         geej<         fg d
ej;        ej;        ej;        gg dJg eed K          g dfg d
ej;        ej;        ej;        gg dJg eedK          dSej;        dTgfg          dU                                     Z=ej+        ,                    dV e                       dW             Z>e%ej+        ,                    dFdXdYg          dZ                         Z?d[ Z@ G d\ d]e
          ZAe%ej+        ,                    d^dYd_ fdd` fdXda fg          db                         ZBe%dc             ZCdd ZDde ZEej+        ,                    dV e                       df             ZFej+        ,                    dV e                       dg             ZGej+        ,                    dh e                       ej+        ,                    diddg          ej+        ,                    djddg          ej+        ,                    dkg dl          ej+        ,                    dmg dn          do                                                             ZHdp ZIej+        ,                    d e                       ej+        ,                    dqe(          ej+        ,                    drg ds          ej+        ,                    dtg du          dv                                                 ZJej+        ,                    d e                       ej+        ,                    dwddg          dx                         ZKej+        ,                    dqe(          ej+        ,                    dyddg          dz                         ZLdS ){    N)partial)assert_allclose)config_context)BaseEstimator)_asarray_with_order_atol_for_type_average_convert_to_numpy_count_nonzero _estimator_with_converted_arrays_fill_or_add_to_diagonal_is_numpy_namespace_isin_max_precision_float_dtype_nanmax_nanmean_nanmin_NumPyAPIWrapper_raveldeviceget_namespaceget_namespace_and_deviceindexing_dtypesupported_float_dtypes)yield_namespace_device_dtype_combinations)SkipTest_array_api_for_testsassert_array_equal'skip_if_array_api_compat_not_configured)	_IS_32BITCSR_CONTAINERS
np_versionparse_versionX         c                 `    t          |           \  }}t          |t                    sJ |rJ dS )z.Check that get_namespace returns NumPy wrapperN)r   
isinstancer   )r$   xp_outis_array_api_compliants      b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_defaultr.   *   s@     &31%5%5"F"f./////%%%%%%    c                  D   t          j        g d          } t          |           \  }}|                    ddd          }t	          |dgdz             t          j        t          d          5  |                    dd	           d
d
d
           d
S # 1 swxY w Y   d
S )z;Check expected behavior with device and creation functions.r%   
          @cpu)
fill_valuer   zUnsupported devicematchcudar   N)	numpyasarrayr   fullr   pytestraises
ValueErrorzeros)r$   r+   _
full_arrays       r-   *test_get_namespace_ndarray_creation_devicerB   2   s    iii  Aa  IFARC>>JJ
+++	z)=	>	>	> ( (R'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   0BBBc                  f   t          j        d          } t          | j                  t          d          k     rt          j        d           t          j        g dg          }t          d          5  t          |          \  }}|sJ || j        u sJ 	 ddd           dS # 1 swxY w Y   dS )	z%Test get_namespace on NumPy ndarrays.array_api_compatz1.9zZarray_api_compat was temporarily reporting NumPy as API compliant and this test would fail)reasonr%   Tarray_api_dispatchN)	r<   importorskipr#   __version__skipr9   r:   r   r   )rD   X_npr+   r,   s       r-   (test_get_namespace_ndarray_with_dispatchrL   >   s    *+=>>%122]55I5III'	
 	
 	
 	

 =)))%%D	4	0	0	0 0 0)6t)<)<&&%%%% )//////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   6"B&&B*-B*c                    t          j        d          }t          j        g dg          }|                    |          }t	          d          5  t          |          \  }}|sJ t          j        t                    5  t          ||          \  }}ddd           n# 1 swxY w Y   d }|                     d|           t          j
                            d          d	k    sJ t          j        t          d
          5  t          |           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z'Test get_namespace for ArrayAPI arrays.array_api_strictr%   TrF   Nc                     | dk    rdS d S )NSCIPY_ARRAY_API0 )keys    r-   mock_getenvz1test_get_namespace_array_api.<locals>.mock_getenva   s    '''s ('r/   zos.environ.getrP   1z#scipy's own support is not enabled.r5   )r<   rH   r9   r:   r   r   r=   	TypeErrorsetattrosenvirongetRuntimeError)monkeypatchxprK   X_xpr+   r,   rT   s          r-   test_get_namespace_array_apir_   S   s$    
	/	0	0B=)))%%D::dD	4	0	0	0    )6t)<)<&&%%%%]9%% 	G 	G-:4-F-F*F*	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G	 	 	 	,k:::z~~/00C7777]7
 
 
 	  	  $		  	  	  	  	  	  	  	  	  	  	  	  	  	  	                                    s[   0D9B!D9!B%	%D9(B%	)AD9D!D9!D%	%D9(D%	)D99D= D=	array_apir9   rN   c                     t          j        |           }|                    g d          }t          |d|          }t	          j        |          }|j        d         sJ dS )z=Test _asarray_with_order passes along order for NumPy arrays.)g333333?g333333@gffffff@F)orderr]   F_CONTIGUOUSN)r<   rH   r:   r   r9   flags)r`   r]   r$   X_newX_new_nps        r-   test_asarray_with_orderrh   n   se     
	Y	'	'B


???##A444E}U##H>.))))))r/   z$array_namespace, device_, dtype_namez"weights, axis, normalize, expected)NNT      @T)g      @ri         @r&   r'      F)TTF      ?rj   皙?g?)g?g@g@)rm   皙?rn   g      ?g      @r(      rk   )r&   r&   r'   g      @g      @)r&   r'   r&   )r'   r'   r'   )NNF   )rk      	         r(   rs   )皙??g?gffffff?gffffff@)rs      ru   rq   )rk               c                 b   t          | |          }t          j        g dg dg|          }|                    ||          }|-t          j        ||          }|                    ||          }t          d          5  t	          ||||          }	d d d            n# 1 swxY w Y   t
          t          d          k     st
          t          d	          k    r"t          |          t          |	          k    sJ t          |	|          }	t          |	|t          |          
           d S )Nr%   rp   rk   rt   dtyper8   TrF   )axisweights	normalize2.0.02.1.0)atol)r   r9   r:   r   r	   r"   r#   r   r
   r   r   )
array_namespacedevice_
dtype_namer   r   r   expectedr]   array_inresults
             r-   test_averager   z   s   F 
ow	7	7B}iii3:FFFHzz(7z33H-z:::**WW*55	4	0	0	0 U U(w)TTTU U U U U U U U U U U U U U U M'****jM'<R<R.R.R h6&>>1111vr**FFH>*+E+EFFFFFFs   B##B'*B'z#array_namespace, device, dtype_name)include_numpy_namespacesc                     t          | |          }t          j        ddg|          dt          j        ddg|          z  z   }|j        j        }t          ||          st          j        |  d|            |                    ||          }d	}t          d
          5  t          j	        t          |          5  t          |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr'   r   r   y              ?rp   r(   z does not support r8   z;Complex floating point values are not supported by average.TrF   r5   )r   r9   r:   r   namehasattrr<   rJ   r   r=   NotImplementedErrorr	   )r   r   r   r]   r   complex_type_nameerr_msgs          r-   $test_average_raises_with_wrong_dtyper      s   
 
ov	6	6B}aV:666em	
Aj? ? ? : H !+2()) OMM:KMMNNNzz(6z22HKG$/// )999  		                                s6   #C3?CC3C	C3"C	#C33C7:C7zaxis, weights, error, error_msgzAxis must be specifiedr   )r&   r'   r(   rp   z(Weights sum to zero, can't be normalizedc                    t          | |          }t          j        g dg dg|          }|                    ||          }t          j        ||          }|                    ||          }t          d          5  t	          j        ||          5  t          |||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr%   r~   r   r8   TrF   r5   )r   r   )r   r9   r:   r   r<   r=   r	   )	r   r   r   r   r   error	error_msgr]   r   s	            r-   +test_average_raises_with_invalid_parametersr      sf   @ 
ov	6	6B}iii3:FFFHzz(6z22HmG:666Gjjj00G	4	0	0	0 7 7&-Y2W2W2W 7 7g66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s6   CB7+C7B;	;C>B;	?CCCc                  J    t                      J t          d d          J d S )Nr   r8   rR   r/   r-   test_device_none_if_no_inputr      s.    88$'''''r/   c                      G d d           G fdd          } t          j        t                    5  t           | d          j                   d d d            n# 1 swxY w Y   t	           | d           | d                    J d}t          d	
          5  t          j        t          |          5  t	           | d           | d                     d d d            n# 1 swxY w Y    | d          } | d          }|j        t	          |          k    sJ |j        t	          ||          k    sJ |j        t	          |||          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                   &    e Zd Zd Zd Zd Zd ZdS )&test_device_inspection.<locals>.Devicec                     || _         d S Nr   )selfr   s     r-   __init__z/test_device_inspection.<locals>.Device.__init__   s    DIIIr/   c                 "    | j         |j         k    S r   r   )r   r   s     r-   __eq__z-test_device_inspection.<locals>.Device.__eq__  s    9++r/   c                      t          d          )NzDevice object is not hashable)rV   r   s    r-   __hash__z/test_device_inspection.<locals>.Device.__hash__  s    ;<<<r/   c                     | j         S r   r   r   s    r-   __str__z.test_device_inspection.<locals>.Device.__str__  s
    9r/   N)__name__
__module____qualname__r   r   r   r   rR   r/   r-   Devicer      sP        	 	 		, 	, 	,	= 	= 	=	 	 	 	 	r/   r   c                       e Zd Z fdZdS )%test_device_inspection.<locals>.Arrayc                 (     |          | _         d S r   r8   )r   device_namer   s     r-   r   z.test_device_inspection.<locals>.Array.__init__  s     &--DKKKr/   N)r   r   r   r   )r   s   r-   Arrayr   
  s.        	. 	. 	. 	. 	. 	. 	.r/   r   r   r3   mygpuz.Input arrays use different devices: cpu, mygpuTrF   r5   )r<   r=   rV   hashr   r   r>   )r   r   array1array2r   s       @r-   test_device_inspectionr      s          . . . . . . . . . . 
y	!	! % %UU8__#$$$% % % % % % % % % % % % % % % %%,,g//777 ?G	4	0	0	0 
? 
?]:W555 	1 	155<<w000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 xx}v....}vv 6 66666}vvv > >>>>>>
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
?sH   A!!A%(A%"E->#C-!E--C1	1E-4C1	5A*E--E14E1library)r9   rN   torchzX,reduction,expected)rp   rk         @)r         ?r2         @r         @)r         @r   r   r   g      r2   r   c                     t          j        |           }t          d          5   ||                    |                    }ddd           n# 1 swxY w Y   t	          ||          }t          ||           dS )z-Check NaN reductions like _nanmin and _nanmaxTrF   N)r<   rH   r   r:   r
   r   )r   r$   	reductionr   r]   r   s         r-   test_nan_reductionsr   .  s    ` 
	W	%	%B	4	0	0	0 * *2::a==))* * * * * * * * * * * * * * * vr**FFH%%%%%s   AAAznamespace, _device, _dtypec                    t          | |          }g dg dg dg dg}|                    ||          }t          d          5  t          |          }d d d            n# 1 swxY w Y   t	          ||          }t          j        |d	          }t          ||           t          |          r!t          j        |          j	        d
         sJ d S d S )Nr%   r~   )rr   r{   rs   )r1      rx   r8   TrF   C)rc   C_CONTIGUOUS)
r   r:   r   r   r
   r9   ravelr   r   re   )	namespace_device_dtyper]   arrayarray_xpr   r   s           r-   
test_ravelr   g  s,    
i	1	1BYY			999lll;Ezz%z00H	4	0	0	0 " "!!" " " " " " " " " " " " " " " vr**F{5,,,HHf%%%2 ;}V$$*>::::; ;::s   A""A&)A&cupyr   c                 n   t          j        |           }| dk    rL|j        j                                        st          j        d           |                    g dd          }n|                    g d          }t          ||          }t          j        g d          }t          ||           dS )z0Check convert_to_numpy for GPU backed libraries.r   ztest requires cudar   r7   r8   r]   N)
r<   rH   backendsr7   is_builtrJ   r:   r
   r9   r   )r   r]   X_gpuX_cpuexpected_outputs        r-   test_convert_to_numpy_gpur   {  s     
	W	%	%B'{((** 	.K,---

???6
::

???++e+++EmOOO44OE?+++++r/   c                      t          j        d          } |                     g dd          }t          ||           }t	          j        g d          }t          ||           dS )z.Check convert_to_numpy for PyTorch CPU arrays.r   r   r3   r8   r   N)r<   rH   r:   r
   r9   r   )r   X_torchr   r   s       r-   test_convert_to_numpy_cpur     sf    ((EmmOOOEm::Gg%000EmOOO44OE?+++++r/   c                       e Zd ZddZdS )SimpleEstimatorNc                 8    || _         |j        d         | _        | S )Nr   )X_shapen_features_)r   r$   ys      r-   fitzSimpleEstimator.fit  s    71:r/   r   )r   r   r   r   rR   r/   r-   r   r     s(             r/   r   zarray_namespace, converterc                 N    |                                                                  S r   )r3   r9   r   s    r-   <lambda>r     s    		 1 1 3 3 r/   c                 *    t          j        |           S r   )r9   r:   r   s    r-   r   r     s    5=+?+? r/   c                 *    |                                  S r   )rZ   r   s    r-   r   r     s    uyy{{ r/   c                    t          j        |           }|                    ddgg          }t                                          |          }t          ||          }t          |j        t          j	                  sJ dS )z(Convert estimator attributes to ndarray.rw   rj   N)
r<   rH   r:   r   r   r   r*   r   r9   ndarray)r   	converterr]   r$   estnew_ests         r-   !test_convert_estimator_to_ndarrayr     ss     
	_	-	-B


S#J<  A





"
"C.sI>>Ggj%-0000000r/   c                      t          j        d          t          j        ddgg          } t	                                          |           }t          |fd          }t          |j        d          sJ dS )z0Convert estimator attributes to ArrayAPI arrays.rN   rw   rj   c                 .                         |           S r   )r:   )r   r]   s    r-   r   z5test_convert_estimator_to_array_api.<locals>.<lambda>  s    "**UBSBS r/   __array_namespace__N)	r<   rH   r9   r:   r   r   r   r   r   )rK   r   r   r]   s      @r-   #test_convert_estimator_to_array_apir     s|     
	/	0	0B=3*&&D





%
%C.s4S4S4S4STTG7:45555555r/   c                     t                      } |                     g dg dg          }|                     |dd          }|j        |u sJ |                     |dd          }|j        |j        usJ t	          j        t          d	          5  |                     |d
           ddd           dS # 1 swxY w Y   dS )zDCheck reshape behavior with copy and is strict with non-tuple shape.r%   ro   )r   F)copy)rt   r&   Tzshape must be a tupler5   r   N)r   r:   reshapebaser<   r=   rV   )r]   r$   	X_no_copyX_copys       r-   test_reshape_behaviorr     s   			B


IIIyyy)**A

1e%
00I>QZZ6Z--F;af$$$$	y(?	@	@	@  


1b                 s   B44B8;B8c                     t                      } |                     | j        | j                  sJ |                     | j        d          sJ |                     | j        d          sJ |                     | j        d          rJ t          |           D ]}|                     |d          sJ |                     | j        d          sJ |                     | j        d          rJ |                     | j        d          sJ |                     | j        d          rJ |                     | j	        d          sJ |                     | j
        d          rJ |                     | j
        d          sJ |                     | j        d          sJ |                     | j        d          sJ |                     | j        d          rJ |                     | j        d          rJ |                     | j        d          sJ |                     | j        d          sJ t          j        t           d          5  |                     | j        d	          sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S )z2Test isdtype implementation from _NumPyAPIWrapper.zreal floatingboolzsigned integerzunsigned integernumericzcomplex floatingzUnrecognized data typer5   unknownN)r   isdtypefloat32float64int32r   r   int16uint32uint16int64int8	complex64
complex128r<   r=   r>   )r]   r   s     r-   $test_get_namespace_array_api_isdtyper
    s   			B::bj"*-----::bj/22222::bj/22222zz"(O44444'++ 2 2zz%111111::bgv&&&&&zz"*f-----::bh 011111zz")%566666::bi!344444zz"($677777::bh	*****::bj),,,,,::bi+++++zz"*&899999zz"'#566666::bl$677777::bm%788888	z)A	B	B	B / /zz"(I....../ / / / / / / / / / / / / / / / / /s   I22I69I6c                     t          | |          }t          rt          |          |j        k    sJ d S t          |          |j        k    sJ d S r   )r   r    r   r  r  )r   r   r   r]   s       r-   test_indexing_dtyper    s]     
i	1	1B .b!!RX------b!!RX------r/   c                 z    t          | |          }|dk    r|j        n|j        }t          ||          |k    sJ d S )Nmps)r   r   r  r   )r   r   r   r]   expected_dtypes        r-   test_max_precision_float_dtyper    sK     
i	1	1B#*e#3#3RZZN%b'22nDDDDDDr/   zarray_namespace, device, _invertassume_uniqueelement_size)rt   r1   ry   	int_dtype)r  r  r  uint8c                 @   t          | |          }|dz  }dt          j        |                              |df                              |          z  }	t          j        t          j        d          |          }
|                    |	|          }|                    |
|          }t          j        |	|
||          }t          d          5  t          |||||          }d d d            n# 1 swxY w Y   t          t          ||	          |           d S )
Nr'   ry   r   r8   )elementtest_elementsr  r  TrF   )r  r  r]   r  r  r   )r   r9   aranger   astyper   r:   isinr   r   r   r
   )r   r   r@   r  r  r  r  r]   rr  r  
element_xptest_elements_xpr   r   s                  r-   	test_isinr    sm    
ov	6	6BA%,|,,44aV<<CCINNNGKR 0 0	BBBMGF33Jzz-z??z##	  H 
4	0	0	0 
 
*'
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 (B777BBBBBs   C44C8;C8c                     t          j        d          } t          j        d          }|                     dd          }t          j        d          }t	          |          \  }}}|t          |          d         u sJ |rJ |J t          d          5  t	          |          \  }}}||u sJ |sJ ||j        k    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr   zarray_api_compat.torchr(   r3   r8   r   TrF   )r<   rH   r  r9   r   r   r   r   )r   xp_torchsome_torch_tensorsome_numpy_arrayr   is_array_apir   s          r-   test_get_namespace_and_devicer%  '  sS   ((E"#;<<HQu55|A '??P&Q&Q#I|V&677:::::>>> 
4	0	0	0 2 2*BCT*U*U'	<H$$$$*111111	2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   +CCCcsr_containerr   )r   r&   Nr   r   sample_weight_type)Nintfloatc                    ddl m} t          | |          }t          j        g dg dg dg dg dg          }|dk    rt          j        g d	          }	n!|d
k    rt          j        g d|          }	nd }	 | ||          ||	          }
|                    ||          }t          d          5  t          |||	||          }d d d            n# 1 swxY w Y   t          t          ||          |
           t          t          d          k     st          t          d          k    r$t          |          t          |          k    sJ d S d S )Nr   )count_nonzero)r   r(   r   )r'   r   r   )r   r   r   )rs   r{   rr   )rp   r   rk   r(  )r&   r'   r'   r(   r&   r)  )g      ?rl   rv   g	@g333333@r   )r   sample_weightr8   TrF   )r   r,  r]   r   r   r   r   )sklearn.utils.sparsefuncsr+  r   r9   r   r:   r   r   r   r
   r"   r#   r   )r   r   r   r&  r   r'  sparse_count_nonzeror]   r   r,  r   r   r   s                r-   test_count_nonzeror/  @  s    POOOOO	ow	7	7BKJJJ			999iiiPQQEU""ooo66	w	&	&&?&?&?zRRR##e4}  H zz%z00H	4	0	0	0 
 
4}G
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 %f444h???M'****jM'<R<R.R.R h6&>>111111 /S.Rs   6CCCwrapc                 $   t          | |          }t          j        dt          j                  }|                    |          }t          |d|d|           t          j        |d|           t          t          ||          |           d S )N)rk   rp   r   r&   F)valuer]   	add_valuer0  )valr0  r   )	r   r9   r?   r  r:   r   fill_diagonalr   r
   )r   r   r   r0  r]   array_npr   s          r-   test_fill_or_add_to_diagonalr7  e  s    
 
ow	7	7B{6555Hzz(##HXQ2TRRRR	ad3333(b9998DDDDDr/   dispatchc                     | t          j        dgg                     | t          j        dgg                    }}	 t          |          5  t          ||          J t          |t          j        dg                    J t	          ||          d         J t	          |t          j        dg                    d         J 	 d d d            d S # 1 swxY w Y   d S # t
          $ r t          d          w xY w)Nr&   r'   rF   z!array_api_compat is not installed)r9   r   r   r   r   ImportErrorr   )r&  r8  abs       r-   test_sparse_devicer=  r  sr    =qcU++,,mmEK!<N<N.O.OqA<x888 	L 	L!Q<<'''!U[!--..666+Aq11!4<<<+Au{A3/?/?@@CKKKK		L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L
  < < <:;;;<s1    C& A;CC& CC&  C!C& &D )MrX   	functoolsr   r9   r<   numpy.testingr   sklearn._configr   sklearn.baser   sklearn.utils._array_apir   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr    r!   r"   r#   markparametrizer:   r.   rB   rL   r_   rh   r   r   rV   r>   ZeroDivisionErrorr   r   r   naninfr   r   r   r   r   r   r   r   r
  r  r  r  r%  r/  r7  r=  rR   r/   r-   <module>rJ     s   				         ) ) ) ) ) ) * * * * * * & & & & & &                                             .            U T T T T T T T T T T T }u}YYY77CDD& & ED&	( 	( 	( )0 0 )(0( )    )( 4 w0B&CDD* * ED* *,U,U,W,W  ( 	 	q$(	q$A
4+			aSz2
sQooo.	!TD$<0
QD)))$	AtdD\*
))YYY	D///:
))YYY	D1a&1	q%#	q%!R!
5))),			aA/
sQ/	!US#J/
QE;;;'	Auq"g&
))YYY	E;;;7
))YYY	EAr731 :G G;  @G, )--uMMM  	 * )--tLLL  % F$		
 VH#	
 LL		
 
RG&(RS) 27 73 	 :7( ( ( ),? ,? )(,?d )$J$J$JKK
Q		GQ'
R%)	gr*
)UY	%)4YYEIuy9;;;GGG!$$$OO	
 YYEIuy9;;;GGG!$$$%)S!	

 Q		GQ'
Q		GQ'9*uyj	!7UYJ7YYEIuy9;;;GGG!$$$OO	
 YYEIuy9;;;GGG!$$$%)S!	

 Q		Hc*
R%)	h-9*uyj	!8eiZ8YYEIuy9;;;GGH1%%%OO	
 YYEIuy9;;;GGH1%%%%)S!	
G(+ +X& &Y+ + LK )(\&  "K"K"M"M ; ; ;" )VW$566, , 76 )(, , , ,    m    ) 	334	??@	**+ 1 1  )(1 )6 6 )(6   /  /  /F  "K"K"M"M . . .  "K"K"M"M E E E  "K"K"M"M  D%=114-8855&J&J&JKKC C LK 65 98 21 C62 2 22 *,U,U,W,W  .99!5!5!566-/E/E/EFF2 2 GF 76 :9 2> *,U,U,W,W  $//E E 0/ E .99dE]33	< 	< 43 :9	< 	< 	<r/   