
     h$o                        d 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
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddl"m#Z# ddl"m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl"m+Z+ ddl"m,Z, ddl-m.Z. dd l-m/Z/ dd!l-m0Z0 dd"l1m2Z2 dd#l3m4Z4 dd$l3m5Z5 dd%l3m6Z6 dd&lm7Z7 dd'l8m9Z9  e            Z:e:j;        e:j<        cZ=Z> e            Z?e?j;        e?j<        cZ@ZA ed(d)*          \  ZBZC ed+d)*          \  ZDZEejF        G                    d,d( e/d(d-d).          g          ejF        G                    d/d e#d)0          g          ejF        G                    d1d2d-g          d3                                     ZHd4 ZId5 ZJd6 ZKejF        G                    d,d( e0d(d-d).          g          ejF        G                    d7di f e$d)0          i f e            d8d-ifg          ejF        G                    d1d2d-g          d9                                     ZLejF        G                    d:g d;          d<             ZMejF        G                    d:g d;          d=             ZNd> ZO G d? d@ee	          ZP G dA dBe
e	          ZQejF        G                    dCeAdDg ieRdEfeAdF e            fdG e!dHI          fgdJdKeRdLfeAdDdF e            fdM eQ            fgieSdNfeAdF e            fdM edHI          fg eQ            dOeSdNfg          dP             ZTejF        G                    dCe>dDg ieRdEfe>dDdF e            fdM eP            fgieSdNfe>dF e            fdM e             fg eP            dOeSdNfg          dQ             ZUejF        G                    dR e+dF ed0          fdG ed0          fgS          e@ddT         eAddT         f e,dF e            fdG e d0          fgS          e=e>fgdUdVgW          dX             ZVdY ZWejF        G                    dZ e+dF e            fdG ed)0          fg e             e0d-d)[          \          g ed-]          R  e,dF e            fdG e d)0          fg e             e0d-d)[          \          e=e>fgdUdVgW          d^             ZXd_ ZYejF        Z                    d`          ejF        G                    dZ e+dF e            fdG ed)0          fg e            O          g ed-]          R  e,dF e            fdG e d)0          fg e            O          e=e>fgdUdVgW          da                         Z[ejF        G                    dbe+edJ ed)0          e@eAfe,edc e            e=e>fg          dd             Z\ejF        G                    dZ e+dF e            fdG e!            fgdef          e@eAf e,dF e            fdG e             fgdef          e=e>fg          dg             Z]ejF        G                    dhee+efee,efg          di             Z^ejF        G                    dj e(d)0           e#d)0          gdkdlgW          dm             Z_dn Z`ejF        G                    dodpdcg          ejF        G                    d1d2d-g          dq                         ZaejF        G                    dr e+dF ed0          fdG ed0          fgS          e?jb        e@eAg dsf e+dF ed0          fdtdG ed0          fgS          e?jb        e@ddT         eAddT         dudvgf e,dF e            fdG e d0          fgS          e:jb        e=e>dwdxgfgg dyW          ejF        G                    d1d-d2g          dz                         Zcd{ ZddS )|z+Test the stacking classifier and regressor.    N)assert_array_equal)BaseEstimator)ClassifierMixin)RegressorMixin)clone)ConvergenceWarning)	load_iris)load_diabetes)load_breast_cancer)make_regression)make_classification)make_multilabel_classification)DummyClassifier)DummyRegressor)LogisticRegression)LinearRegression)Ridge)RidgeClassifier)	LinearSVC)	LinearSVR)SVC)RandomForestClassifier)RandomForestRegressor)KNeighborsClassifier)MLPClassifier)scale)StackingClassifier)StackingRegressor)train_test_split)StratifiedKFold)KFold)CheckingClassifier)assert_allclose)assert_allclose_dense_sparse)ignore_warnings)NotFittedError)Mock   *   )	n_classesrandom_state   cvT)n_splitsshuffler+   final_estimatorr+   passthroughFc                    t          t          t                    t          t          d          \  }}}}dt	                      fdt                      fg}t          ||| |          }|                    ||           |                    |           |	                    |           |
                    ||          dk    sJ |                    |          }	|rdnd}
|	j        d	         |
k    sJ |rt          ||	d d d
d f                    |                    d           |                    ||           |                    |           |	                    |           ||                    |           |                    |          }	|rdnd}|	j        d	         |k    sJ |rt          ||	d d d
d f                    d S d S )Nr)   stratifyr+   lrsvc
estimatorsr0   r-   r2   皙?
         dropr6      r(   )r   r   X_irisy_irisr   r   r   fitpredictpredict_probascore	transformshaper#   
set_paramsdecision_function)r-   r0   r2   X_trainX_testy_trainy_testr9   clfX_transexpected_column_countexpected_column_count_drops               `/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/ensemble/tests/test_stacking.pytest_stacking_classifier_irisrU   B   s    (8fvR( ( ($GVWf +--.	0DEJ
'	  C GGGWKKf99VV$$s****mmF##G"-4BB1=44444 1233000NNfNGGGWKKff%%%mmF##G&1!8q=99999 1233000001 1    c                  @   t          d          \  } }t          t          |           ||d          \  }}}}dt                      fdt	          d          fg}t          |d	          }|                    ||           |                    |          }|j        d
         dk    sJ dt                      fdt                      fg}|
                    |           |                    ||           |                    |          }|j        d
         dk    sJ d S )NT
return_X_yr)   r4   r6   rfr1   r(   r9   r-   r=   r,   r7   r9   )r   r   r   r   r   r   rD   rH   rI   r   rJ   )	XyrL   rM   rN   _r9   rP   rQ   s	            rT   :test_stacking_classifier_drop_column_binary_classificationr`   p   s7   ...DAq"2a!ab# # #GVWa 
!##$	%26667J 
q
9
9
9CGGGWmmF##G=q     +--.	0DEJNNjN)))GGGWmmF##G=q      rV   c                     t          t          t                    t          t          d          \  } }}}ddt	          d          fg}t          dd          }t          dt	          d          fg|d	
          }t          ||d	
          }|                    | |           |                    | |           t          |	                    |          |	                    |                     t          |
                    |          |
                    |                     t          |                    |          |                    |                     d S )Nr)   r4   r6   r?   r7   r   r1   r;   n_estimatorsr+      r9   r0   r-   )r   r   rB   rC   r   r   r   rD   r#   rE   rF   rH   )rL   rM   rN   r_   r9   rZ   rP   clf_drops           rT   'test_stacking_classifier_drop_estimatorrh      sR    #3fvR# # #GVWa !5)*C*C*C"DEJ	Rb	A	A	AB
I155567PQ  C "ZPQRRRHGGGWLL'"""CKK'')9)9&)A)ABBBC%%f--x/E/Ef/M/MNNNCMM&))8+=+=f+E+EFFFFFrV   c                  F   t          t          t                    t          d          \  } }}}ddt	          d          fg}t          dd          }t          dt	          d          fg|d	          }t          ||d	          }|                    | |           |                    | |           t          |	                    |          |	                    |                     t          |
                    |          |
                    |                     d S )
Nr)   r1   rb   svrr   r;   rc   re   rf   )r   r   
X_diabetes
y_diabetesr   r   r   rD   r#   rE   rH   )rL   rM   rN   r_   r9   rZ   regreg_drops           rT   &test_stacking_regressor_drop_estimatorro      s%    #3j:B# # #GVWa !5)*C*C*C"DEJ	BR	@	@	@B
I155567PQ  C !JqQQQHGGGWLL'"""CKK'')9)9&)A)ABBBCMM&))8+=+=f+E+EFFFFFrV   zfinal_estimator, predict_params
return_stdc                     t          t          t                    t          d          \  }}}}dt	                      fdt                      fg}t          ||| |          }	|	                    ||            |	j        |fi |}
|rdnd}|rt          |
          |k    sJ |	
                    |          }|rdnd}|j        d         |k    sJ |rt          ||d d d	d f                    |	                    d
           |	                    ||           |	                    |           |	
                    |          }|rdnd}|j        d         |k    sJ |rt          ||d d d	d f                    d S d S )Nr)   r1   r6   rj   r8   r,   r=      r?   r@      )r   r   rk   rl   r   r   r   rD   rE   lenrH   rI   r#   rJ   )r-   r0   predict_paramsr2   rL   rM   rN   r_   r9   rm   resultexpected_result_lengthrQ   rR   rS   s                  rT    test_stacking_regressor_diabetesry      s    #3j:B# # #GVWa )++,uikk.BCJ
'	  C GGGWS[22>22F"07QQa 56{{44444mmF##G"-4BB1=44444 2344 0111NNfNGGGWKKmmF##G'2!9=99999 2344 0111112 2rV   fmt)csccsrcooc                    t          t          j        t          t                                                  |           t          d          \  }}}}dt                      fdt                      fg}t          dd          }t          ||dd	          }|                    ||           |                    |          }t          ||d d d
d f                    t          j        |          sJ |j        |j        k    sJ d S )Nr)   r1   r6   rj   r;   rc   re   Tr8   rs   )r   sparse
coo_matrixr   rk   asformatrl   r   r   r   r   rD   rH   r$   issparseformat	rz   rL   rM   rN   r_   r9   rZ   rP   rQ   s	            rT   *test_stacking_regressor_sparse_passthroughr      s    #3%
++,,55c::JUW# # #GVWa )++,uikk.BCJ	BR	@	@	@B
raT  C GGGWmmF##G CDD)9:::?7#####=GN******rV   c                    t          t          j        t          t                                                  |           t          d          \  }}}}dt                      fdt                      fg}t          dd          }t          ||dd	          }|                    ||           |                    |          }t          ||d d d
d f                    t          j        |          sJ |j        |j        k    sJ d S )Nr)   r1   r6   r7   r;   rc   re   Tr8   r>   )r   r   r   r   rB   r   rC   r   r   r   r   rD   rH   r$   r   r   r   s	            rT   +test_stacking_classifier_sparse_passthroughr      s    #3%--((11#66R# # #GVWa +--.	0DEJ	Rb	A	A	AB
raT  C GGGWmmF##G BCC999?7#####=GN******rV   c                  8   t          t          d d                   t          d d         }} dt                      fdt	                      fg}t          |          }|                    | |           |                    |           }|j        d         dk    sJ d S )Nd   r6   rZ   r\   r=   r,   )	r   rB   rC   r   r   r   rD   rH   rI   )X_y_r9   rP   X_metas        rT   )test_stacking_classifier_drop_binary_probr     s    
 6$3$<  &#,B+--.7M7O7O0PQJ


3
3
3CGGBOOO]]2F<?arV   c                       e Zd Zd Zd ZdS )NoWeightRegressorc                 ^    t                      | _        | j                            ||          S N)r   rm   rD   selfr]   r^   s      rT   rD   zNoWeightRegressor.fit  s%    !##x||Aq!!!rV   c                 @    t          j        |j        d                   S )Nr   )nponesrI   )r   r]   s     rT   rE   zNoWeightRegressor.predict  s    wqwqz"""rV   N)__name__
__module____qualname__rD   rE    rV   rT   r   r     s2        " " "# # # # #rV   r   c                       e Zd Zd ZdS )NoWeightClassifierc                 b    t          d          | _        | j                            ||          S )N
stratified)strategy)r   rP   rD   r   s      rT   rD   zNoWeightClassifier.fit  s*    "L999x||Aq!!!rV   N)r   r   r   rD   r   rV   rT   r   r     s#        " " " " "rV   r   zy, params, type_err, msg_errr9   zInvalid 'estimators' attribute,r6   svmiP  max_iterrF   )r9   stack_methodz+does not implement the method predict_probacorzdoes not support sample weightr9   r0   c           	         t          j        ||          5  t          di |ddi}|                    t	          t
                    | t          j        t
          j        d                              d d d            d S # 1 swxY w Y   d S Nmatchr-   r(   r   sample_weightr   )	pytestraisesr   rD   r   rB   r   r   rI   )r^   paramstype_errmsg_errrP   s        rT   test_stacking_classifier_errorr   !  s    T 
xw	/	/	/ J J 00600a000fqQ0H0HIIIJ J J J J J J J J J J J J J J J J J   ABBBc           	         t          j        ||          5  t          di |ddi}|                    t	          t
                    | t          j        t
          j        d                              d d d            d S # 1 swxY w Y   d S r   )	r   r   r   rD   r   rk   r   r   rI   )r^   r   r   r   rm   s        rT   test_stacking_regressor_errorr   P  s    , 
xw	/	/	/ R R//&//Q///j!!1BGJ<LQ<O4P4PQQQR R R R R R R R R R R R R R R R R Rr   zestimator, X, yr\   r   r   r   )idsc                 J   t          |           }|                    t          dt          j                            d                               t          |           }|                    d           |                    t          dt          j                            d                               t          |                    ||                              |          d d dd f         |                    ||                              |                     d S )NTr   r/   r+   r-   r?   r@   r=   )	r   rJ   r!   r   randomRandomStater#   rD   rH   )	estimatorr]   r^   estimator_fullestimator_drops        rT   test_stacking_randomnessr   k  s"   : 9%%NBI,A,A!,D,DEEE     9%%N(((BI,A,A!,D,DEEE     1a  **1--aaae41a  **1--    rV   c                      t          dt          d          fdt          d          fg          } |                     t          t
                     d S )Nr6   i'  r   r   r\   )r   r   r   rD   rB   rC   )rP   s    rT   )test_stacking_classifier_stratify_defaultr     s^    
%v6667Iv.../
  C GGFFrV   zstacker, X, yr   rf   rX   c                    t          |          dz  }t          j        dg|z  dgt          |          |z
  z  z             }t          |||d          \  }}}}}	}t	          t
                    5  |                     ||           d d d            n# 1 swxY w Y   |                     |          }
t	          t
                    5  |                     ||t          j        |j	                             d d d            n# 1 swxY w Y   |                     |          }t          |
|           t	          t
                    5  |                     |||	           d d d            n# 1 swxY w Y   |                     |          }t          j        |
|z
                                            dk    sJ d S )	Nr,   g?g?r)   r1   )categoryr   r   )ru   r   arrayr   r%   r   rD   rE   r   rI   r#   abssum)stackerr]   r^   n_half_samplestotal_sample_weightrL   rM   rN   r_   sample_weight_trainy_pred_no_weighty_pred_unit_weighty_pred_biaseds                rT    test_stacking_with_sample_weightr     s   B VVq[N(	##a&&>*A!BB  ;K	1!; ; ;7GVWa!4a 
"4	5	5	5 & &GW%%%& & & & & & & & & & & & & & &v..	"4	5	5	5 L LGWBGGM4J4JKKKL L L L L L L L L L L L L L L 00$&8999	"4	5	5	5 I IGW4GHHHI I I I I I I I I I I I I I IOOF++M6"]2337799A======s6   1BBB	0DD	D	
E//E36E3c                      t          dt          d          fgt          d                    } |                     t          t          t          j        t          j        d                              d S )Nr6   T)expected_sample_weightr   r   r   )r   r"   rD   rB   rC   r   r   rI   )r   s    rT   0test_stacking_classifier_sample_weight_fit_paramr     sk     -TJJJKL*$GGG  G KKbgfl1o.F.FKGGGGGrV   z-ignore::sklearn.exceptions.ConvergenceWarningc                    t          |           }t          |           }|                    d           |                    d           |                    ||           |                    ||           t          |j        |j                  D ]\  }}t          |j        |j                    t          j        t          d          5  t          |j
        j        |j
        j                   d d d            d S # 1 swxY w Y   d S )Nr(   r   re   z	Not equalr   )r   rJ   rD   zipestimators_r#   coef_r   r   AssertionErrorfinal_estimator_)r   r]   r^   stacker_cv_3stacker_cv_5est_cv_3est_cv_5s          rT   test_stacking_cv_influencer     sP   B >>L>>Lq!!!q!!!QQ ",":L<TUU 8 8(7777 
~[	9	9	9 
 
)/1N1T	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   %C>>DDz7Stacker, Estimator, stack_method, final_estimator, X, yrE   c                 ^   t          ||dd          \  }}}}	d |                                ||          fd |                                ||          fg}
|
D ]G\  }}t                      |_        t          ||          }t	          ||t          |                     H | |
d|          }|                    ||	           |j        d	 |
D             k    sJ t          d
 |j        D                       sJ |j        D ]'}t          ||          }|                    |           (dS )z2Check the behaviour of stacking when `cv='prefit'`r)   g      ?)r+   	test_sized0d1)side_effectprefit)r9   r-   r0   c                     g | ]\  }}|S r   r   ).0r_   r   s      rT   
<listcomp>z(test_stacking_prefit.<locals>.<listcomp>H  s    "L"L"LI9"L"L"LrV   c              3   6   K   | ]}|j         j        d k    V  dS )r   N)rD   
call_count)r   r   s     rT   	<genexpr>z'test_stacking_prefit.<locals>.<genexpr>J  s,      RRy}'1,RRRRRRrV   N)r   rD   r'   getattrsetattrr   allassert_called_with)Stacker	Estimatorr   r0   r]   r^   X_train1X_train2y_train1y_train2r9   r_   r   
stack_funcr   stack_func_mocks                   rT   test_stacking_prefitr     s|   . .>	12. . .*Hh( 
yy{{x223	yy{{x223J # G G9	Y55
	<*)E)E)EFFFFg(O  G KK(###"L"L"L"L"LLLLLRRg>QRRRRRRRR ( 5 5	!)\::**844445 5rV   r   r[   c                     t          j        t                    5  |                     ||           d d d            d S # 1 swxY w Y   d S r   )r   r   r&   rD   )r   r]   r^   s      rT   test_stacking_prefit_errorr   R  s    6 
~	&	&  Aq                 s   >AAz!make_dataset, Stacking, Estimatorc                     G d d|          } | dd          \  }} |d |            fg          }|j          d}t          j        t          |	          5  |j         d d d            n# 1 swxY w Y   |                    ||           d
}t          j        t          |	          5  |j         d d d            d S # 1 swxY w Y   d S )Nc                   "     e Zd ZdZ fdZ xZS )8test_stacking_without_n_features_in.<locals>.MyEstimatorz Estimator without n_features_in_c                 P    t                                          ||           | `d S r   )superrD   n_features_in_)r   r]   r^   	__class__s      rT   rD   z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit  s'    GGKK1###rV   )r   r   r   __doc__rD   __classcell__)r   s   @rT   MyEstimatorr   |  s>        ..	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$rV   r   r   r   )r+   	n_samplesr6   r\   z' object has no attribute n_features_in_r   z6'MyEstimator' object has no attribute 'n_features_in_')r   r   r   AttributeErrorr   rD   )make_datasetStackingr   r   r]   r^   r   msgs           rT   #test_stacking_without_n_features_inr  q  s   $ $ $ $ $i $ $ $ <Q#666DAqhD++--#8"9:::G
G
G
GC	~S	1	1	1                 KK1
BC	~S	1	1	1                   s$   A//A36A3-CC	Cr   r   r   c                    t          t          t          t          d          \  }}}}d}d| fg}t          |t	                      d                              ||          }|                    |          }|j        |j        d         |fk    sJ t          t          j
        |                    d	          d
                    rJ |                    |          }	|	j        |j        k    sJ dS )zCheck the behaviour for the multilabel classification case and the
    `predict_proba` stacking method.

    Estimators are not consistent with the output arrays and we need to ensure that
    we handle all cases.
    r)   r4   r(   estrF   r9   r0   r   r   r=   )axisg      ?N)r   X_multilabely_multilabelr   r   rD   rH   rI   anyr   iscloser   rE   )
r   rL   rM   rN   rO   	n_outputsr9   r   rQ   y_preds
             rT   1test_stacking_classifier_multilabel_predict_probar    s   $ (8l\( ( ($GVWf I)$%J ,..$   
c'7	  ''G=V\!_i888882:gkkqk1137788888__V$$F<6<''''''rV   c                     t          t          t          t          d          \  } }}}d}dt                      fg}t	          |t                      d                              | |          }|                    |          }|j        |j        d         |fk    sJ |	                    |          }|j        |j        k    sJ dS )	zCheck the behaviour for the multilabel classification case and the
    `decision_function` stacking method. Only `RidgeClassifier` supports this
    case.
    r)   r4   r(   r  rK   r	  r   N)
r   r  r  r   r   r   rD   rH   rI   rE   )	rL   rM   rN   rO   r  r9   r   rQ   r  s	            rT   5test_stacking_classifier_multilabel_decision_functionr    s    
 (8l\( ( ($GVWf I/++,-J ,..(   
c'7	  ''G=V\!_i88888__V$$F<6<''''''rV   r   autoc                    t          t          t          t          d          \  }}}}|                                }d}dt	          d          fdt          d          fdt                      fg}t                      }	t          ||	||           	                    ||          }
t          ||           |
                    |          }|j        |j        k    sJ | d	k    rg d
}ndgt          |          z  }|
j        |k    sJ |t          |          z  }|r||j        d         z  }|
                    |          }|j        |j        d         |fk    sJ t          |
j        t#          j        ddg          g|z             dS )zCheck the behaviour for the multilabel classification case for stack methods
    supported for all estimators or automatically picked up.
    r)   r4   r(   mlpr1   rZ   ridge)r9   r0   r2   r   r  )rF   rF   rK   rE   r=   r   N)r   r  r  copyr   r   r   r   r   rD   r   rE   rI   ru   stack_method_rH   classes_r   r   )r   r2   rL   rM   rN   rO   y_train_before_fitr  r9   r0   rP   r  expected_stack_methodsn_features_X_transrQ   s                  rT   0test_stacking_classifier_multilabel_auto_predictr    s    (8l\( ( ($GVWf !I 
2.../	%26667	/##$J
 +,,O
'!	  
 
c'7  )7333[[  F<6<''''v!X!X!X"+s:!> 66666"S__4 /gmA..mmF##G=V\!_.@AAAAAs|bh1v&6&6%7)%CDDDDDrV   z,stacker, feature_names, X, y, expected_names)stackingclassifier_lr0stackingclassifier_lr1stackingclassifier_lr2stackingclassifier_svm0stackingclassifier_svm1stackingclassifier_svm2)otherr?   stackingclassifier_lrstackingclassifier_svmstackingregressor_lrstackingregressor_svm)StackingClassifier_multiclassStackingClassifier_binaryr   c                     |                      |           |                     t          |          |           |rt          j        ||f          }|                     |          }t          ||           dS )z/Check get_feature_names_out works for stacking.)r2   N)rJ   rD   r   r   concatenateget_feature_names_outr   )r   feature_namesr]   r^   expected_namesr2   	names_outs          rT   test_get_feature_names_outr2     s|    D ;///KKa! I(GHH--m<<Iy.11111rV   c                  d   t          t          t                    t          t          d          \  } }}}t	          dt                      fg          }|                    | |           |                    |           |                    |           |	                    ||          dk    sJ dS )zNCheck that a regressor can be used as the first layer in `StackingClassifier`.r)   r4   r  r\   r:   N)
r   r   rB   rC   r   r   rD   rE   rF   rG   )rL   rM   rN   rO   rP   s        rT   'test_stacking_classifier_base_regressorr4  L  s    '7fvR( ( ($GVWf '577);(<
=
=
=CGGGWKKf99VV$$s******rV   )er   r   numpyr   numpy.testingr   scipy.sparser   sklearn.baser   r   r   r   sklearn.exceptionsr   sklearn.datasetsr	   r
   r   r   r   r   sklearn.dummyr   r   sklearn.linear_modelr   r   r   r   sklearn.svmr   r   r   sklearn.ensembler   r   sklearn.neighborsr   sklearn.neural_networkr   sklearn.preprocessingr   r   r   sklearn.model_selectionr   r    r!   sklearn.utils._mockingr"   sklearn.utils._testingr#   r$   r%   r&   unittest.mockr'   diabetesdatatargetrk   rl   irisrB   rC   r  r  X_binaryy_binarymarkparametrizerU   r`   rh   ro   ry   r   r   r   r   r   
ValueError	TypeErrorr   r   r   r   r   r   filterwarningsr   r   r   r  r  r  r  r/  r2  r4  r   rV   rT   <module>rQ     s   1 1
      , , , , , ,       & & & & & & ( ( ( ( ( ( ' ' ' ' ' '       1 1 1 1 1 1 & & & & & & * * * * * * / / / / / / , , , , , , 0 0 0 0 0 0 ; ; ; ; ; ; ) ) ) ) ) ) ( ( ( ( ( ( 3 3 3 3 3 3 1 1 1 1 1 1 & & & & & & 0 0 0 0 0 0 ! ! ! ! ! ! ! ! ! ! ! !       3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 ' ' ' ' ' ' / / / / / / . . . . . . 4 4 4 4 4 4 3 3 3 3 3 3 ) ) ) ) ) ) 5 5 5 5 5 5 2 2 2 2 2 2 ? ? ? ? ? ? 2 2 2 2 2 2 - - - - - -      =??! 
Jy{{DK;;b   l )(12FFF ( 1ooq$RHHH
I  44"EEEF  66$1 $1 76  $1N! ! !6G G G(G G G& 55!TPR#S#S#STUU%	r
		B	/	/	/4			L$/0  66!2 !2 76  VU!2H  5 5 566+ + 76+"  5 5 566+ + 76+"     # # # # # # # #" " " " "- " " " "	,#Z1RS --//0CC0001 !0  9	
 --//0..001 ,
	
  --//0IIv6667 $6#5#7#7  ,	
3%( (RJ JS( (RJ "	lB'5VWT#3#3#5#56@Q@Q@S@S8TUV,		
  $&6&6&8&89E99;;;OP#4#4#6#6  ,	
 *R R+ *R  --1===>II15556   4C4L4C4L		
 ++--.II15556   		
, 
231   4 5 4(
 
 
  --//0II26667 !3 2 4 45B777  
	
  4000
	
 
	
 ++--.II26667 !1 0 2 25B777   	
2 
237   :> >; :>:H H H KLL --//0II26667 !3 2 4 4  		
  4000		
 		
 ++--.II26667 !1 0 2 2   
	
. 
233   6
 
7  ML8
2 = B///	
 	
 *5 5+ *5>  !#5#5#7#785##%%.I   	
 ++--.IIKK(    
	
 0 1 0 '	02DE	+-=>   4  	2&&& 	B/// 
23  
 
( (
 
(8( ( (0 &))<==66*E *E 76 >=*EZ 2 --1===>II15556     	
( --1===>%II15556   4C4L4C4L'(	
" ++--.II15556   "&'	
I3h	 	 	m  ; ;x u662 2 76y; ;z2	+ 	+ 	+ 	+ 	+rV   