
     hd                     B   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 d dlmZ d dlmZ d dlmZ d d	lmZmZmZ ej                            d
eef          d             Zej                            dddg          d             Zd Zej                            dg d          ej                            dddg          d                         Zej                            d edd                    ej                            d edd                    ej                            dddg          ej                            dddg          d                                                 Zej                            ddgd d!g          d"             Zej                            g d#ddd ej         d dgdd$gd%d&gg          fdd ej         g d'           ej         ddgd(d$gd%d&gg          fdd(d ej         d dgdd%gd(d)gd%d&gg          fddd ej         d dgddgd%d&gg          fdd ej         g d'           ej         ddgdd$gd%d&gg          fg          d*             Z!ej                            ddgd d!g          d+             Z"d, Z#d- Z$ej                            dddg          d.             Z%ej                            ddgd d!g          ej                            dg d/          d0                         Z&d1 Z'ej                            ddd)g          ej                            d2d3d4g          ej                            dddg          d5                                     Z(ej                            d6dd7id8fdd9id8fdd:id8fdd;id<fg          d=             Z) ej*                    d>             Z+ej                            d?dd3d4 e,dd          fdd4d4 e,dd          fdd3d3d dgfdd4d3dgfd@d3d4g dAfd@d4d4ddgfd@d3d3d gfd@d4d3g fg          ej                            dBd4ej-        ej.        g          dC                         Z/ ej*                    dD             Z0ej                            d?dd3d4 e,d d%          fdd4d4 e,dd%          fdd3d3g dEfdd4d3g dFfdGd3d4g dHfdGd4d4g dIfdGd3d3d d(gfdGd4d3d(gfdd3d4 e,dd          fdd4d4 e,dd          fdd3d3g dEfdd4d3g dFfd@d3d4g dJfd@d4d4 e,dd          fd@d3d3d d(gfd@d4d3d(gfdKd3d4g dLfdKd4d4g dMfdKd3d3d gfdKd4d3g fg          ej                            dBd4ej-        ej.        g          dN                         Z1dO Z2ej                            g dPdd3d4e3fdd3d4e3fdd3d4ej4        fdd3d4ej5        fdd4d4ej5        fdd4d3ej5        fd(d4d4ej5        fd(d4d3ej5        fg          dQ             Z6ej                            g dPdd3d4e3fdd3d4e3fdd3d4ej4        fdd3d4ej5        fdd4d4ej5        fdd4d3ej5        fg          dR             Z7ej                            dSg dT          ej                            dUg dV          ej                            dWd3d4g          ej                            d2d3d4g          dX                                                 Z8ej                            g dPdd3d4ej4        fdd3d4ej5        fdd4d4ej5        fdd4d3ej5        fg          dY             Z9ej                            g dZg d[          d\             Z:ej                            d2dWgg d]          d^             Z;ej                            g d_g d`          da             Z<db Z=dS )c    N)sparse)random)assert_array_almost_equal)assert_allcloseassert_array_equal)BSpline)LinearRegression)Pipeline)KBinsDiscretizerPolynomialFeaturesSplineTransformerestc                 f   t          j        d                              dd          }d } | |                                 |                    sJ  | | d                              |                    sJ t          j         | d                              |                    sJ dS )	z+Test that output array has the given order.
         c                 4    t          j        | j                  S )N)np	isfortranT)as    g/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/preprocessing/tests/test_polynomial.pyis_c_contiguousz?test_polynomial_and_spline_array_order.<locals>.is_c_contiguous   s    |AC       C)orderFN)r   arangereshapefit_transformr   )r   Xr   s      r   &test_polynomial_and_spline_array_orderr"      s     		"a##A! ! ! ?3355..q1122222?33S>>>77::;;;;;<#44Q778888888r   extrapolationcontinueperiodicc                     t          j        d                              dd          }ddgddgddgddgddgg}t          d	|| 
                              |          }dS )zATest that SplineTransformer accepts integer value knot positions.   r   r   r      r            )degreeknotsr#   N)r   r   r   r   r    )r#   r!   r-   _s       r   %test_spline_transformer_integer_knotsr/      st     		"b!$$AVaVaVb"XBx8E]	 	 	mA AAr   c                     t          j        d                              dd          } t          ddd                              |           }|                                }t          |g d           t          ddd                              |           }|                    d	d
g          }t          |g d           dS )z<Test that SplineTransformer generates correct features name.r'   r   r   r+   Tn_knotsr,   include_bias)
x0_sp_0x0_sp_1x0_sp_2x0_sp_3x0_sp_4x1_sp_0x1_sp_1x1_sp_2x1_sp_3x1_sp_4Fr   b)a_sp_0a_sp_1a_sp_2a_sp_3b_sp_0b_sp_1b_sp_2b_sp_3N)r   r   r   r   fitget_feature_names_outr   )r!   spltfeature_namess      r   %test_spline_transformer_feature_namesrK   )   s    
	"b!$$AQqtDDDHHKKD..00M	
 	
 	
    QquEEEII!LLD..Sz::M		
 		
 		
    r   )constantlinearr$   r%   r,   r   r+   c                 j   t          j        d                              dd          }t          ||                               |          }|                    ddg          }t          |          |j        k    sJ |                    |          }|j	        d         t          |          k    sJ dS )	zsTest feature names are correct for different extrapolations and degree.

    Non-regression test for gh-25292.
    r'   r   r   )r,   r#   r   r>   r(   N)
r   r   r   r   rG   rH   lenn_features_out_	transformshape)r#   r,   r!   rI   rJ   X_transs         r   7test_split_transform_feature_names_extrapolation_degreerT   O   s     		"b!$$AF-HHHLLQOOD..Sz::M}!55555nnQG=s=11111111r   r(   r   r2   r-   uniformquantilerL   c                    t          j        ddd          dddf         }t           j        dgg|dddddf         dggf         }|dddddf         }|dk    r|| z   }t          || |d|          }|                    |           ||fD ]9}t          t          j        |                    |          d	          d           :dS )
zTest that B-splines are indeed a decomposition of unity.

    Splines basis functions must sum up to 1 per row, if we stay in between
    boundaries.
    r   r(   d   Nr   r%   T)r2   r,   r-   r3   r#   axis)r   linspacer_r   rG   r   sumrQ   )r,   r2   r-   r#   r!   X_trainX_testrI   s           r   +test_spline_transformer_unity_decompositionr`   b   s     	Aq#qqq$w'AeaSE1SSqS!!!V9se+,Gqt!tQQQwZF
""F"#  D 	HHWv > >t~~a00q9991====> >r   bias	interceptTFFTc           	      h   t          j        ddd          dddf         }t          j        |dddf                   dz   }t          dt	          dd| d	
          fdt          |          fg          }|                    ||           t          |                    |          |d           dS )z7Test that B-splines fit a sinusodial curve pretty well.r   r   rX   Nr   spline   r+   rL   r2   r,   r3   r#   olsfit_interceptstepsMbP?rtol)	r   r[   sinr
   r   r	   rG   r   predict)ra   rb   r!   ypipes        r   )test_spline_transformer_linear_regressionru      s     	Ar34(A
qAw!A !!%",	   $9===>
  D 	HHQNNNDLLOOQT222222r   )r-   r2   sample_weightexpected_knots         )r   r   r(   r(   r   r+   r(      r   c           
          t          j        ddgddgddgddgddgddgddgg          }t          j        || ||	          }t	          ||           d S )
Nr   r   r+   r{   ry   r   rx   rz   )r!   r-   r2   rv   )r   arrayr   _get_base_knot_positionsr   )r-   r2   rv   rw   r!   
base_knotss         r   /test_spline_transformer_get_base_knot_positionsr      sv    2 	1a&1a&1a&1a&1a&1a&1b'JKKA";
5'  J J/////r   c           	         d }t          j        ddd          dddf         }t          dt          dd| d	
          fdt	          |          fg          }|                    | ||dddf                              t          j        ddd          dddf         }|                    |          }t          | ||dddf                   dd           t          |dd         |dd         d           dS )z5Test that B-splines fit a periodic curve pretty well.c                     t          j        dt           j        z  | z            t          j        dt           j        z  | z            z
  dz   S )Nr   rx   r+   )r   rq   pi)xs    r   fz=test_spline_transformer_periodic_linear_regression.<locals>.f   s:    va"%i!m$$rva"%i!m'<'<<q@@r   r   r(   e   Nrf   r'   r+   r%   rh   ri   rj   rl   r   i-  g{Gz?)atolrp   rX      rn   ro   )r   r[   r
   r   r	   rG   rr   r   )ra   rb   r   r!   rt   X_predictionss          r   2test_spline_transformer_periodic_linear_regressionr      sB   A A A 	Aq#qqq$w'A !!%",	   $9===>
  D 	HHQ!AAAqD'

 
RC	 	 D	)B,,r""KK2aaad84dCCCCK#&CG(<4HHHHHHr   c                  x   t          j        ddd          dddf         } d}t          |ddgdgd	gg
          }|                    |           }t          j        d	dgdd	gd	dgdd	gg          }t          t          j        dd          ||d          } || dddf                   }t          ||           dS )z@Test that the backport of extrapolate="periodic" works correctlyg      @r   Nr   r%   g                    ?r,   r#   r-   r{   r   )r   r[   r   r    r}   r   r   r   )r!   r,   transformerXtcoefsplXspls          r   0test_spline_transformer_periodic_spline_backportr      s    
BR  D)AF $Zu7M  K 
	"	"1	%	%B 8c3Z#sc3Z#sDEED
")B""D&*
=
=C3qAw<<DBr   c            
      J   t          j        ddd          dddf         } t          dddgdgd	gd
gdgdgg          }t          dddgd	gd
gdgdgdgg          }|                    |           }|                    |           }t	          ||ddg df                    dS )zT
    Test if shifted knots result in the same transformation up to permutation.
    r   r   r   Nr+   r%   r   r         @      @      @       @r   g      "@)r{   r   r(   r   r+   )r   r[   r   r    r   )r!   transformer_1transformer_2Xt_1Xt_2s        r   4test_spline_transformer_periodic_splines_periodicityr      s     	Ar34(A% usecUSEC53%8  M & usecUSEC53%8  M &&q))D&&q))DD$qqq///1233333r   c           
      j   t          j        ddd          dddf         }t          | ddgdgdgd	gd
gdgg          }|                    |          }|                                |                                z
  t          |          z  }d|z  }|}t          d| dz             D ]I}t          j        |d          }t          j	        |                                          |k     sJ ||z  }Jt          j        |d          }t          j	        |                                          dk    sJ dS )z?Test that spline transformation is smooth at first / last knot.r   r   i'  Nr%   r   r   r   r   r   r   r   r(   r   rY   )
r   r[   r   r    maxminrO   rangediffabs)	r,   r!   r   r   deltatoldXtdr   s	            r   3test_spline_transformer_periodic_splines_smoothnessr      sF    	BF##AAAtG,A# usecUSEC53%8  K
 
	"	"1	%	%BUUWWquuww#a&&(E
u*C
C 1fqj!!  ws###vd||!!C''''Ul
 73QD6$<<!!!!!!r   )r(   r   r+   r{   r   c           	         t          j        ddd          dddf         }|                                }t          dt	          d|| d          gd	t          |
          gg          }|                    ||           t          |                    dgdgg          ddg           t          dt	          d|| d          gd	t          |
          gg          }|                    ||           t          |                    dgdgg          ddg           t	          d|| d          }|                    |           t          j
        t                    5  |                    dgg           ddd           n# 1 swxY w Y   t          j
        t                    5  |                    dgg           ddd           dS # 1 swxY w Y   dS )z1Test that B-spline extrapolation works correctly.r   r(   rX   Nrf   r{   rL   rh   ri   rj   ir   rM   error)r   r[   squeezer
   r   r	   rG   r   rr   pytestraises
ValueErrorrQ   )ra   rb   r,   r!   rs   rt   rI   s          r   %test_spline_transformer_extrapolationr   '  s   
 	B34(A			A  !!!%",	   $9===>	
 D 	HHQNNNDLL3%!..Q888  !!!%"*	   $9===>	
 D 	HHQNNNDLL3%!..a999 &t7  D 	HHQKKK	z	"	"    w                             	z	"	"  u                 s$   F  FF$G		GGc                  f   t           j                            d          } |                     d                              dd          }d}|dz   }t          |ddd          }|                    |          }t          |d	d
          }|                    |          }t          ||d           dS )zCTest that a B-spline of degree=0 is equivalent to KBinsDiscretizer.i| r   r(   r   r   rV   T)r2   r,   r-   r3   zonehot-dense)n_binsencodestrategygvIh%<=ro   N)	r   r   RandomStaterandnr   r   r    r   r   )rngr!   r   r2   rI   splineskbdkbinss           r   'test_spline_transformer_kbindiscretizerr   ^  s    
)


&
&C		#sA&&AFqjG$  D   ##G
&*
U
U
UCa  E GU//////r   r3   TFc                     t          | ||          }t          j        ddd          dddf         }|                    |           |                    |          j        d         |j        k    sJ dS )z8Test that transform results in n_features_out_ features.r1   r   r(   r   N)r   r   r[   rG   rQ   rR   rP   )r2   r3   r,   rI   r!   s        r   &test_spline_transformer_n_features_outr   r  su    
 WV,WWWD
Aq"aaag&AHHQKKK>>!"1%)=======r   zparams, err_msg)r   r   z&degree=\(min_degree, max_degree\) must)r   g      ?r+   r   )r(   r   r+   z'int or tuple \(min_degree, max_degree\)c                     dgdgg}t          j        t          |          5  t          di |                     |           ddd           dS # 1 swxY w Y   dS )zBTest that we raise errors for invalid input in PolynomialFeatures.r(   r   matchN )r   r   r   r   rG   )paramserr_msgr!   s      r   )test_polynomial_features_input_validationr   ~  s     qc
A	z	1	1	1 , ,$$V$$((+++, , , , , , , , , , , , , , , , , ,s    AAAc                      t          j        d          d d t           j        f         } t          j        t          j        |           | | dz  | dz  g          }| |fS )Nry   r   r+   )r   r   newaxishstack	ones_like)r!   Ps     r   single_feature_degree3r     sO    
	!QQQ
]#A
	2<??Aq!tQT233Aa4Kr   z/degree, include_bias, interaction_only, indicesr   r+   )r   r   r+   sparse_Xc                 T   | \  }}|r ||          }t          |||                              |          }|                    |          }	|r|	                                }	t	          |	|dd|f                    |j        dk    r|j        j        |j        |j        fk    sJ dS dS )z9Test PolynomialFeatures on single feature up to degree 3.r,   r3   interaction_onlyNr   	r   rG   rQ   toarrayr   n_output_features_powers_rR   n_features_in_)
r   r,   r3   r   indicesr   r!   r   tfouts
             r   $test_polynomial_features_one_featurer     s    4 "DAq HQKK	LCS
 
 
	c!ff  ,,q//C kkmmC111g:'''	q  zB$92;L#MMMMM ! MMr   c                     t          j        d                              d          } | d d d df         }| d d dd f         }t          j        |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  |dz  |dz  z  g
          }| |fS )Nry   r   r(   r   r   r+   )r   r   r   r   )r!   x1x2r   s       r   two_features_degree3r     s    
	!V$$A	
111bqb5B	
111abb5B
	EBEMEBEMEBEMEBEMEBEMEBEMEBEMEBEMEBEMEBEM	
	 	A a4Kr   )r   r(   r   r{   )r(   r   r{   )r   r   )r   r+   r{   r   )r+   r{   r   )r   r+   r{   r   ry      rx   	   r+   r+   )r   ry   r   rx   r   )ry   r   rx   r   c                 T   | \  }}|r ||          }t          |||                              |          }|                    |          }	|r|	                                }	t	          |	|dd|f                    |j        dk    r|j        j        |j        |j        fk    sJ dS dS )z5Test PolynomialFeatures on 2 features up to degree 3.r   Nr   r   )
r   r,   r3   r   r   r   r!   r   r   r   s
             r   %test_polynomial_features_two_featuresr     s    L  DAq HQKK	LCS
 
 
	c!ff  ,,q//C kkmmC111g:'''	q  zB$92;L#MMMMM ! MMr   c                     t          j        d                              dd          } t          dd                              |           }|                                }t          g d|           t          |          |                    |           j	        d         k    sJ t          dd	                              |           }|                    g d
          }t          g d|           t          |          |                    |           j	        d         k    sJ t          dd	                              |           }|                    g d
          }t          g d|           t          |          |                    |           j	        d         k    sJ t          ddd                              |           }|                    g d
          }t          ddg|           t          |          |                    |           j	        d         k    sJ t          dd                              |           }|                    g d          }t          g d|           d S )N   r   r+   r   Tr,   r3   )
1x0r   r   zx0^2zx0 x1zx0 x2zx1^2zx1 x2zx2^2r(   F)r   r>   c)r   r>   r   a^2a ba cb^2b cc^2a^3a^2 ba^2 ca b^2a b ca c^2b^3b^2 cb c^2c^3r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )F40D   ☮   א)r   r   r   r   )
r   r   r   r   rG   rH   r   rO   rQ   rR   )r!   polyrJ   s      r   test_polynomial_feature_namesr    s   
	"b!$$AQT:::>>qAAD..00MRRR   }!2!2!8!;;;;;QU;;;??BBD..??M	
 	
 	
* 	-  0 }!2!2!8!;;;;;V%@@@DDQGGD..??M	
 	
 	
$ 	'  * }!2!2!8!;;;;;D4  	c!ff 	 ..??MW~}555}!2!2!8!;;;;; QT:::>>qAAD../Q/Q/QRRM>>>NNNNNr   )degr3   r   dtypec                    t           j                            d          }|                    ddd          }t	          j        |          }t          | ||          }|                    |                    |                    }|                    |                    |                    }	t          |t          j                  sJ |j
        |	j
        k    sJ t          |j        |	           d S )Nr   r   rX   r   r3   r   )r   r   r   randintr   
csc_matrixr   r    astype
isinstancer  r   A)
r  r3   r   r  r   r!   X_cscr   Xt_cscXt_denses
             r   test_polynomial_features_csc_Xr  T  s     )


"
"CAq(##Aa  E
,9I  C u||E2233F  %11Hff/00000<8>))))fh11111r   c                    t           j                            d          }|                    ddd          }t	          j        |          }t          | ||          }|                    |                    |                    }|                    |                    |d                    }	t          |t          j                  sJ |j
        |	j
        k    sJ t          |j        |	           d S )Nr   r   r  r  F)copy)r   r   r   r  r   
csr_matrixr   r    r	  r
  r  r   r  )
r  r3   r   r  r   r!   X_csrr   Xt_csrr  s
             r   test_polynomial_features_csr_Xr  q  s     )


"
"CAq(##Aa  E
,9I  C u||E2233F  %e!<!<==Hff/00000<8>))))fh11111r   
n_features)r(   r{   r   zmin_degree, max_degree))r   r(   )r   r   )r(   r+   )r   r{   )r+   r{   r   c                    t          j        dgdg| dz
  gff          }t          |||          }|                    |           |j        }t          j        | d|||          }|t          d |D                       k    sJ dS )z?
    Test that n_output_features_ is calculated correctly.
    r(   r   )r,   r   r3   )r  
min_degree
max_degreer   r3   c                     g | ]}d S )r(   r   ).0r.   s     r   
<listcomp>z)test_num_combinations.<locals>.<listcomp>  s    000Aa000r   N)r   r  r   rG   r   _combinationsr]   )	r  r  r  r   r3   r   r   
num_comboscomboss	            r   test_num_combinationsr     s      	A3!zA~&6 7899A
)!  C
 GGAJJJ'J-)!  F 0000011111111r   c                    t          dddd                                          }|                                }t          | ||          }|                    |                    |                    }|                    |                    |                    }t          |t          j                  sJ |j	        |j	        k    sJ t          |j        |           d S )N  r         ?r   random_stater  )sparse_randomtocsrr   r   r    r	  r
  r   r  r  r   r  )	r  r3   r   r  r  r!   r   r  r  s	            r   %test_polynomial_features_csr_X_floatsr(    s     $Ca888>>@@EA
,9I  C u||E2233F  %11Hff/00000<8>))))fh11111r   )zero_row_indexr  r   ))r   r   T)r(   r   Tr   r   T)r   r+   T)r(   r+   T)r   r+   T)r   r   F)r(   r   Fr   r   F)r   r+   F)r(   r+   F)r   r+   Fc                    t          dddd                                          }d|| d d f<   |                                }t          |d|          }|                    |          }|                    |          }t          |t          j                  sJ |j        |j        k    sJ t          |j
        |           d S )	Nr+   r   r   r   r$  r   Fr  r&  r'  r   r   r    r
  r   r  r  r   r  )r)  r  r   r  r!   r   r  r  s           r   'test_polynomial_features_csr_X_zero_rowr.    s    $ !R1555;;==E"E.!!!
A
SuGW
X
X
XCu%%F  ##Hff/00000<8>))))fh11111r   ))TTrc   rd   )FFc                 v   t          dddd                                          }|                                }t          d| |          }|                    |          }|                    |          }t          |t          j                  sJ |j        |j        k    sJ t          |j
        |           d S )Nr"  r   r#  r   r$  r{   r  r-  )r3   r   r  r!   r   r  r  s          r   'test_polynomial_features_csr_X_degree_4r0    s    
 $Ca888>>@@EA
	7G  C u%%F  ##Hff/00000<8>))))fh11111r   )r  dimr   )
)r   r(   Tr*  )r+   r(   T)r+   r   T)r+   r+   T)r   r(   Fr+  )r+   r(   F)r+   r   F)r+   r+   Fc                 t   t          d|dd                                          }|                                }t          | |          }|                    |          }|                    |          }t          |t          j                  sJ |j        |j        k    sJ t          |j
        |           d S )Nr"  r#  r   r$  )r   r-  )r  r1  r   r  r!   r   r  r  s           r   (test_polynomial_features_csr_X_dim_edgesr3    s      $Sq999??AAEA
S3C
D
D
DCu%%F  ##Hff/00000<8>))))fh11111r   c                     t          j        d          } t          dd          }d}t          j        t
          |          5  |                    |            ddd           n# 1 swxY w Y   t          dd          }d	}t          j        t
          |          5  |                    |            ddd           n# 1 swxY w Y   | t          j        |           t          j	        |           fD ]}t          dd
          }|                    |          }t          j
        |          r|                                }t          |t          j        | j        d         df                     dS )zCheck that PolynomialFeatures raises error when degree=0 and include_bias=False,
    and output a single constant column when include_bias=True
    )r   r   r   Fr   zWSetting degree to zero and include_bias to False would result in an empty output array.r   N)r   r   zoSetting both min_degree and max_degree to zero and include_bias to False would result in an empty output array.Tr(   )r   onesr   r   r   r   r    r   r  r  issparser   r   rR   )r!   r   r   _Xoutputs        r   1test_polynomial_features_behaviour_on_zero_degreer9    s    	AQU;;;D	"  
z	1	1	1  1               V%@@@D	8  
z	1	1	1  1               &#A&&(9!(<(<= = =!>>>##B''?6"" 	&^^%%F627AGAJ?#;#;<<<<= =s$   A%%A),A)C  CC)>numpyr   r   scipyr   scipy.sparser   r&  sklearn.utils._testingr   numpy.testingr   r   scipy.interpolater   sklearn.linear_modelr	   sklearn.pipeliner
   sklearn.preprocessingr   r   r   markparametrizer"   r/   rK   rT   r   r`   ru   r}   r   r   r   r   r   r   r   r   r   fixturer   slicer  r  r   r   r   r  intfloat32float64r  r  r   r(  r.  r0  r3  r9  r   r   r   <module>rJ     s              0 0 0 0 0 0 < < < < < < = = = = = = = = % % % % % % 1 1 1 1 1 1 % % % % % %          !35F GHH	9 	9 IH	9 :z*BCC  DC# # #L 222  Aq6**2 2 +*	 
2 55A;;//EE!QKK009j"9:::z*BCC> > DC ;: 10 0/>4 &+.0NOO3 3 PO3, ;;;	AtXRX1v1v2w&?@@ABH***++BHq!fq!fq"g.//		
 
AtXRX1v1v2wB&HIIJ	QhbhAAB'@AABBH***++BHq!fq!fq"g.//		
 (	0 	0) (	0 &+.0NOOI I POI<  $4 4 40 Aq6**#" #" +*#"L &+.0NOO???332 2 43 PO2j0 0 0( QG,,$77Aq6**> > +* 87 -,> 
G	GH
H	HI
F	FG
I	 JK	 , , ,    5	
D%tT**+	
E5%%4..)	
D$A	
E4!	uiii(	1v&	taS!	b!	  
Fv01 N N	  "N.   * 5	
D%q!%	
E5%%1++&	
D$%	
E4#	ulll+	yyy)	taV$	qc"	
D%tT**+	
E5%%4..)	
D$%	
E4#	u6667	uuQ~~.	taV$	qc"	uooo.	|||,	taS!	b!) 2 
Fv01 N N	 3 :N.IO IO IOX 888	
D%	
D%	
D%$	
D%$	
E5"*%	
E4$	
E5"*%	
E4$	 2 2 2  888	
D%	
D%	
D%$	
D%$	
E5"*%	
E4$
 
2 2
 
2  yyy11FFF  +dE];;$772 2 87 <;  212: 888	
D%$	
D%$	
E5"*%	
E4$	 2 2 2 111   "2 2# "2  '(@@@ 2 2	 2 &&&   
2 
2 
2= = = = =r   