
    _nda                        d dl 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Zd Ze j                            dej        ej        g          e j                            dddg          d                         Zd Z e j                            dddg          d             Z!d Z"d Z#e j                            dg d           d!             Z$d" Z%e j                            dddg          d#             Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/e j                            d-ddg          d.             Z0d/ Z1d0 Z2e j                            d-d1          e j                            d2d1          d3                         Z3d4 Z4e j                            d5dd6g          d7             Z5d8 Z6dS )9    N)sparse)linalg)assert_array_almost_equal)assert_array_equal)assert_allclose)LinearRegression)_deprecate_normalize)_preprocess_data)_rescale_data)make_dataset)make_sparse_uncorrelated)make_regression)	load_iris)StandardScaler)add_dummy_featureư>c                     dgdgg} ddg}t                      }|                    | |           t          |j        dg           t          |j        dg           t          |                    |           ddg           dgg} dg}t                      }|                    | |           t          |j        dg           t          |j        dg           t          |                    |           dg           d S )N      r   )r   fitr   coef_
intercept_predict)XYregs      Dlib/python3.11/site-packages/sklearn/linear_model/tests/test_base.pytest_linear_regressionr       s     qc
A	
AA


CGGAqMMMci!---cnqc222ckk!nnq!f555 A	
A


CGGAqMMMci!---cnqc222ckk!nnqc22222    array_constrfit_interceptTFc                    t           j                            |          }d\  }} | |                    ||f                    }|                    |          }d|                    |          z   }t          |          }	|	                    |||           |	j        }
|	j        }|	j        j	        |j	        d         fk    sJ t          j
        |          }|s|nt          |          }|j        |z  |z  }|j        |z  |z  }t          j        ||          }|st          |
|           d S t          |
|dd                     t          ||d                    d S )N)      )size      ?r!   sample_weightr   r   )nprandomRandomStatenormaluniformr   r   r   r   shapediagr   Tr   solver   )r    r!   global_random_seedrng	n_samples
n_featuresr   yr)   r   coefs1inter1WX_augXwywcoefs2s                    r   %test_linear_regression_sample_weightsr?   8   sp   
 )

 2
3
3C !IzSZZi%<Z==>>A

	
""A#++9+555M 
7
7
7CGGAqG...YF^F9?qwqzm++++ 	A"<AA(9!(<(<E	1u	B	1qB\"b!!F +'''''qrr
+++q	*****r   c                     d} t          j        d          }t          j        d          }t	          d          }t          j        t          |           5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nz7A sparse matrix was passed, but dense data is required.
   Tpositivematch)	r   eyer*   onesr   pytestraises	TypeErrorr   )	error_msgr   r7   r   s       r   .test_raises_value_error_if_positive_and_sparserL   _   s    II
2A
A
D
)
)
)C	y		2	2	2  1                 s   A::A>A>zn_samples, n_features)r      )rM   r   c                 ~   t           j                            d          }|                    | |          }|                    |           }|                    |           dz  dz   }d}d}t	                      }|                    |||           |                    |||           |                    |||           d S )Nr   r   r   r&   g       @)r*   r+   r,   randnr   r   )	r5   r6   r4   r   r7   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r   s	            r   9test_raises_value_error_if_sample_weights_greater_than_1drS   k   s     )


"
"C		)Z((A		)A		),,1A5


C GGAq#$$$GGAq%&&&GGAq%&&&&&r   c                  Z   t          j        ddgddgg          } t          j        g dg dg          }t          j        ddg          }t          d	                              | |          }t                                          | |          }t          d	                              ||          }t                                          ||          }|j        j        |j        j        k    sJ |j        j        |j        j        k    sJ |j        j        |j        j        k    sJ d S )
NgmGB?g\^?gL+K?gfiU?)g&/)¶?g <E/?gMd?)g".Hw?g%|?g0e?r   Fr'   )r*   arrayr   r   r   r/   ndim)X2X3r7   lr2_without_interceptlr2_with_interceptlr3_without_interceptlr3_with_intercepts          r   test_fit_interceptr]   }   s5   	J
+j*-EF	G	GB		-	-	-/S/S/ST
 
B 	!QA,5AAAEEb!LL)++//A66,5AAAEEb!LL)++//A66#)-B-H-NNNNN#)-B-H-NNNNN &+/D/J/OOOOOOOr   c                      d} d}t          j        t          |          5  t          | d           d d d            d S # 1 swxY w Y   d S )Nwrongz Leave 'normalize' to its defaultrD   	estimator)rH   rI   
ValueErrorr	   )	normalizerK   s     r   test_error_on_wrong_normalizerc      s    I2I	z	3	3	3 5 5Y4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   >AArb   )TF
deprecatedc                    | dk    rd}d }g }n9| }t           }dg}| s|                    d           n|                    d           |Vt          j                    5  t          j        dt                      t          | d          }d d d            n# 1 swxY w Y   nYt          j        |          5 t          | d          }d d d            n# 1 swxY w Y   t          fd|D                       sJ ||k    sJ d S )	Nrd   Fz1.4zdefault valuezStandardScaler(errorr`   c                 H    g | ]}|t          d          j                  v S )r   )strmessage).0warningrecords     r   
<listcomp>z,test_deprecate_normalize.<locals>.<listcomp>   s-    QQQ'Gs6!9#4555QQQr   )	FutureWarningappendwarningscatch_warningssimplefilterr	   rH   warnsall)rb   outputexpectedwarning_msg
_normalizerl   s        @r   test_deprecate_normalizery      s    L   g 	2////0111$&& 	F 	F!'=999-iEEJ	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F \(## 	Fv-iEEJ	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	FQQQQ[QQQRRRRRs$   +BBB4CCCc                    t           j                            |           }d}t          j        ||          }|                    |          }||z  }t                      }|                    ||                                           t          ||j
        |j        z              t          |                    |          |                                z
  d           d S )Nd   r   )r*   r+   r,   r   rF   randr   r   ravelr   r   r   r   )r3   r4   nr   betar7   olss          r   test_linear_regression_sparser      s    
)

 2
3
3CA
1aA88A;;D	DA


CGGAqwwyydCI$>???ckk!nnqwwyy8!<<<<<r   c                     t           j                            d          }d}d}|                    ||          }d||dk     <   t	          j        |          }|                    |          }t          |           }t          di |}t          di |}	|	                    ||           |		                    ||           |j
        t          j        |	j
                  k    sJ t          |j        |	j                   d S )Nr      r           g?r'    )r*   r+   r,   rO   r   
csr_matrixr|   dictr   r   r   rH   approxr   r   )
r!   r4   r5   r6   r   Xcsrr7   params	clf_dense
clf_sparses
             r   )test_linear_regression_sparse_equal_denser      s     )


"
"CIJ		)Z((AAa#gJQDA...F **6**I!++F++JMM!QNN46=1F#G#GGGGGIOZ%566666r   c                      t           j                            d          } t          |           \  }}t          j        ||f          j        }|j        d         }t                      }|                    ||           |j	        j        d|fk    sJ |
                    |          }|                    ||           |
                    |          }t          t          j        ||f          j        |d           d S )Nr   random_stater   r   rM   decimal)r*   r+   r,   r   vstackr1   r/   r   r   r   r   r   )r4   r   r7   r   r6   r   Y_predy_preds           r   'test_linear_regression_multiple_outcomer      s    
)


"
"C,,,DAq
	1a&AJ


CGGQOOO9?q*o----[[^^FGGAqMMM[[^^Fbi(899;VQOOOOOOr   c                 L   t           j                            |           }t          |          \  }}t	          j        |          }t          j        ||f          j        }|j        d         }t                      }|
                    ||           |j        j        d|fk    sJ |                    |          }|
                    ||                                           |                    |          }t          t          j        ||f          j        |d           d S )Nr   r   r   rM   r   )r*   r+   r,   r   r   
coo_matrixr   r1   r/   r   r   r   r   r}   r   	r3   r4   r   r7   r   r6   r   r   r   s	            r   .test_linear_regression_sparse_multiple_outcomer      s    
)

 2
3
3C#555DAq!A
	1a&AJ


CGGAqMMM9?q*o----[[^^FGGAqwwyy[[^^Fbi(899;VQOOOOOOr   c                     dgdgg} ddg}t          d          }|                    | |           t          |j        dg           t          |j        dg           t          |                    |           ddg           dgg} dg}t          d          }|                    | |           t          |j        dg           t          |j        dg           t          |                    |           dg           d S )Nr   r   TrB   r   )r   r   r   r   r   r   r   )r   r7   r   s      r   test_linear_regression_positiver      s    
qc
A	
AA
D
)
)
)CGGAqMMMci!---cnqc222ckk!nnq!f555 A	
A
D
)
)
)CGGAqMMMCIs###CNQC(((CKKNNQC(((((r   c                 b   t           j                            |           }t          |          \  }}t          j        ||f          j        }|j        d         }t          d          }|                    ||           |j	        j        d|fk    sJ t          j
        |j	        dk              sJ |                    |          }|                    ||                                           |                    |          }t          t          j        ||f          j        |           d S )Nr   r   TrB   r   r   )r*   r+   r,   r   r   r1   r/   r   r   r   rt   r   r}   r   r   s	            r   0test_linear_regression_positive_multiple_outcomer     s   
)

 2
3
3C#555DAq
	1a&AJ
D
)
)
)CGGAqMMM9?q*o----6#)s"#####[[^^FGGAqwwyy[[^^FBIvv.//16:::::r   c                 V   t           j                            |           }t          |          \  }}t	          d          }|                    ||           t	          d          }|                    ||           t          j        |j        |j        z
  dz            dk    sJ d S )Nr   TrB   Fr   gMbP?)r*   r+   r,   r   r   r   meanr   )r3   r4   r   r7   r   regns         r   .test_linear_regression_positive_vs_nonpositiver      s    
)

 2
3
3C#555DAq
D
)
)
)CGGAqMMMU+++DHHQNNN7CI
*q011D888888r   c                    t           j                            |           }d}d}|                    ||          }|d d df         d|d d df         z  z   d|d d df         z  z   d|d d df         z  z   }t	          d	          }|                    ||           t	          d
	          }|                    ||           t          j        |j        |j        z
  dz            dk     sJ d S )Nr      r   r   r   rM   g      ?TrB   Fr   )r*   r+   r,   r|   r   r   r   r   )r3   r4   r5   r6   r   r7   r   r   s           r   <test_linear_regression_positive_vs_nonpositive_when_positiver   -  s     )

 2
3
3CIJJ''A	!!!Q$!a1g+AaaadG+cAaaadGm;A
D
)
)
)CGGAqMMMU+++DHHQNNN7CI
*q011D888888r   c                     t          j        d          } |                     dt          j                            d          i          }t          dd          D ]\}t          j                            d          }d|d d<   |dk    r| j                            |d          }||t          |          <   ]d	}t                      }t          j        t          |
          5  |                    |j        d d ddf         |j        d d df                    d d d            n# 1 swxY w Y   | j                            |d         d          |d<   t          |d          sJ t!          j                    5  t!          j        dt                     |                    |j        d d ddf         |j        d d df                    d d d            d S # 1 swxY w Y   d S )Npandas0rA   r   r   r      )
fill_valuez+pandas.DataFrame with sparse columns found.rD   r   rM   r   rf   )rH   importorskip	DataFramer*   r+   rO   rangearraysSparseArrayrh   r   rs   UserWarningr   ilochasattrrp   rq   rr   )pddfcolarrmsgr   s         r   2test_linear_regression_pd_sparse_dataframe_warningr   >  sE   		X	&	&B 
sBIOOB//0	1	1BQ{{  ioob!!BQB!88)'''::C3s88
7C


C	k	-	-	- 0 01Q3A///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i##BsG#::BsG2x     		 	"	" 0 0g{3331Q3A///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s%   !7D$$D(+D(9AGGGc                 f   t           j                            |           }d}d}|                    ||          }|                    |          }t          j        |d          }t          j        |d          t          j        |j        d                   z  }t          j        |d          }t          ||dd          \  }	}
}}}t          |t          j
        |                     t          |d           t          |t          j        |                     t          |	|           t          |
|           t          ||dd          \  }	}
}}}t          ||           t          ||           t          |t          j        |                     t          |	||z
             t          |
||z
             t          ||dd          \  }	}
}}}t          ||           t          ||           t          ||           t          |	||z
  |z             t          |
||z
             d S )Nr   r   r   axisFr!   rb   T)r*   r+   r,   r|   r   stdsqrtr/   r
   r   zerosrG   )r3   r4   r5   r6   r   r7   expected_X_meanexpected_X_scaleexpected_y_meanXtytX_meany_meanX_scales                 r   test_preprocess_datar   Z  sE   
)

 2
3
3CIJJ''AAgaa(((Ovaa(((27171:+>+>>gaa(((O&6	1EU' ' '#BFFG fbhz&:&:;;;fa(((grwz':':;;;b!$$$b!$$$&6	1DE' ' '#BFFG fo666fo666grwz':':;;;b!o"5666b!o"5666&6	1DD' ' '#BFFG fo666fo666g'7888b1#6:J"JKKKb!o"566666r   c                    t           j                            |           }d}d}d}|                    ||          }|                    ||          }t          j        |d          }|t          j        |          g}|D ]}t          ||dd          \  }	}
}	}}	t          |t          j	        |                     t          |
|           t          ||dd          \  }	}
}	}}	t          ||           t          |
||z
             t          ||dd          \  }	}
}	}}	t          ||           t          |
||z
             d S )	Nr   rM   r   r   r   Fr   T)
r*   r+   r,   r|   r   r   
csc_matrixr
   r   r   )r3   r4   r5   r6   	n_outputsr   r7   r   args_r   r   s               r    test_preprocess_data_multioutputr     sz   
)

 2
3
3CIJIJ''AI&&Agaa(((Ov ##$D 2 2.q
 
 
2q&! 	"&"(9*=*=>>>!"a(((.q
 
 
2q&! 	"&/:::!"a&j111.q!4SWXXX2q&!!&/:::!"a&j11112 2r   	is_sparsec                    t           j                            |          }d}d}|                    ||          }d||dk     <   |d d dfxx         dz  cc<   d|d d df<   d|d d d	f<   |                    |          }|                    |          }t          j        |d|
          }t          j        |d|
          }	t          j        ||d          }
t          j        ||
z
  dz  |d          }|dt          j        |j                  j        z  k     }t          |g d           t          j	        |          t          j	        |
                                          z  }d||<   | rt          j        |          }t          ||dd|          \  }}}}}t          ||           t          ||	           t          |t          j        |                     | r5t          |                                |                                           nt          |||z
             t          |||	z
             t          ||dd|          \  }}}}}t          ||           t          ||	           t          ||           | r8t          |                                |                                |z             nt          |||z
  |z             | rt#          d                              ||          }t          |                    |                                          d d d df         t          j	        |
                                          z  |                                d d d df                    t          |                    |                                          d d dd f         |                                d d dd f                    nt#          d                              ||          }t          |j        |           t          |                    |          t          j	        |
                                          z  |           t          |||	z
             d S )Nr   r   r         ?r   rA   r&   r   rM   )r   weights)r   r   )r   r   r   r   r   TF)r!   rb   r)   )	with_meanr(   )r*   r+   r,   r|   averagefinfodtypeepsr   r   sumr   r   r
   r   rG   toarrayr   r   	transformmean_)r   r3   r4   r5   r6   r   r7   r)   r   r   X_sample_weight_avgX_sample_weight_varconstant_maskr   r   r   r   r   r   scalers                       r   test_preprocess_data_weightedr     s   
)

 2
3
3CIJ
 	J''AAa#gJ aaadGGGrMGGG AaaadG AaaadGAHHY''MjMBBBOjMBBBO*QAFFF*	
 	 Q&A   ("rx/@/@/D*DDM}lll333w233bgm>O>O>Q>Q6R6RR '(]# !a   '7		#' ' '#BFFG fo666fo666grwz':':;;; ;!"**,,		<<<<!"a/&9:::b!o"5666 '7		#' ' '#BFFG fo666fo666g'7888 P!"**,,		>N0NOOOO!"q?':>N&NOOO  
%00044Qm4TT 	"Q''))!!!RaR%027=;L;L;N;N3O3OOJJLLBQB	
 	
 	
 	"Q''))!!!QRR%0"**,,qqq!""u2E	
 	
 	
 	
  $///33A]3SS!&,777!Q"'-*;*;*=*=">">>	
 	
 	
 b!o"566666r   c                 d   t           j                            |           }d}d}t          j        ||d|          }|                                }|                    |          }|                                }t          j        |d          t          j        |j	        d                   z  }t          ||dd          \  }}	}
}}t          |
t          j        |                     t          |d           t          |t          j        |                     t          |j        |           t          |	|           t          ||d	d          \  }}	}
}}t          |
t          j        |d                     t          |t          j        |d                     t          |t          j        |                     t          |j        |           t          |	|t          j        |d          z
             t          ||d	d	          \  }}	}
}}t          |
t          j        |d                     t          |t          j        |d                     t          ||           t          |j        ||z             t          |	|t          j        |d          z
             d S )
Nr   r   r   )densityr   r   r   Fr   T)r*   r+   r,   r   r|   tolilr   r   r   r/   r
   r   r   rG   Ar   )r3   r4   r5   r6   r   r7   XAr   r   r   r   r   r   s                r   #test_sparse_preprocess_data_offsetsr     s   
)

 2
3
3CIJIz3SIIIA			AA	
Bvbq)))BGAGAJ,?,??&6	1EU' ' '#BFFG fbhz&:&:;;;fa(((grwz':':;;;bdB'''b!$$$&6	1DE' ' '#BFFG fbgbq&9&9&9:::fbgaa&8&8&8999grwz':':;;;bdB'''b!bgaa&8&8&8"8999&6	1DD' ' '#BFFG fbgbq&9&9&9:::fbgaa&8&8&8999g'7888bdB)9$9:::b!bgaa&8&8&8"899999r   c                      t                      \  } }d| | dk     <   t          j        |           }t          ||d          \  }}}}}|                                dk    sJ d S )Nr         @Tcsr)r   r   r   r
   	getformat)r   r7   r   csr_r   s        r   test_csr_preprocess_datar   +  sk    DAqAa#gJ

A

C'Q55D!Q1>>u$$$$$$r   TFto_copyc                    t                      \  }}d||dk     <   | rt          j        |          }t          ||d|d          \  }}}}}|r%| r#t	          j        |j        |j                  rJ d S |rt	          j        ||          rJ d S | r#t	          j        |j        |j                  sJ d S t	          j        ||          sJ d S )Nr   r   TF)copycheck_input)r   r   r   r
   r*   may_share_memorydata)r   r   r   r7   X_y_r   s          r   #test_preprocess_copy_data_no_checksr   4  s     DAqAa#gJ !a  &q!TUSSSOBAq! *9 *&rw7777777	 *&r1-------	 *"27AF3333333"2q)))))))r   c                 v   t           j                            |           }d}d}|                    ||          }|                    |          }t          j        |t           j                  }t          j        |t           j                  }t          j        |t           j                  }t          j        |t           j                  }	dD ]}
dD ]}t          |||
|          \  }}}}}t          ||	|
|          \  }}}}}t          ||	|
|          \  }}}}}t          |||
|          \  }}}}}|j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |j        t           j        k    sJ |	j        t           j        k    sJ t          ||           t          ||           t          ||           t          ||           t          ||           d S )Nr   r   r   r   r   )
r*   r+   r,   r|   asarrayfloat32float64r
   r   r   ) r3   r4   r5   r6   r   r7   X_32y_32X_64y_64r!   rb   Xt_32yt_32	X_mean_32	y_mean_32
X_scale_32Xt_64yt_64	X_mean_64	y_mean_64
X_scale_64Xt_3264yt_3264X_mean_3264y_mean_3264X_scale_3264Xt_6432yt_6432X_mean_6432y_mean_6432X_scale_6432s                                    r   test_dtype_preprocess_datar  I  s   
)

 2
3
3CIJJ''AA:arz***D:arz***D:arz***D:arz***D& @> @>& ?	> ?	>I=M+#	> > >:E5)Y
 >N+#	> > >:E5)Y
 HX+#	H H HDGWk; HX+#	H H HDGWk; ;"*,,,,;"*,,,,?bj0000?bj0000#rz1111;"*,,,,;"*,,,,?bj0000?bj0000#rz1111=BJ....=BJ....$
2222$
2222%3333=BJ....=BJ....$
2222$
2222%3333:++++:++++:++++:++++%eU333%eU333%i;;;%i;;;%j*====?	>@> @>r   	n_targetsr   c                    t           j                            |          }d}d}d|                    |          z   }|                    ||          }| |                    |          }n|                    ||           }t	          |||          \  }}	}
||
d d t           j        f         z  }| ||
z  }n||
d d t           j        f         z  }t          ||           t          |	|           d S )Nr   r   r&   )r*   r+   r,   r|   r   newaxisr   )r  r3   r4   r5   r6   r)   r   r7   
rescaled_X
rescaled_ysqrt_swrescaled_X2rescaled_y2s                r   test_rescale_data_denser    s    
)

 2
3
3CIJ#((9---MJ''AHHYHHY	**&3Aq-&H&H#J
Ggaaam,,K'k'!!!RZ-00j+666j+66666r   c                     t                      } | j                            t          j                  }| j                            t          j                  }t          j        |          }t          j        |j	        t          j                  }| j                            t          j
                  }| j                            t          j
                  }t          j        |          }t          j        |j	        t          j
                  }t          |||          \  }	}
t          |||          \  }}
|	                                \  }}}
}
|                                \  }}}
}
|\  }}
}
|\  }}
}
|j        t          j        k    sJ |j        t          j
        k    sJ t          ||t                     t          |||          \  }}
t          |||          \  }}
|                                \  }}}
}
|                                \  }}}
}
|\  }}
}
|\  }}
}
|j        t          j        k    sJ |j        t          j
        k    sJ t          ||t                     t          ||t                     t!          ||           t!          ||           t!          ||           t!          ||           d S )Nr   )rtol)r   r   astyper*   r   targetr   r   aranger%   r   r   _next_pyr   r   r  r   )irisr   r   X_csr_32sample_weight_32r   r   X_csr_64sample_weight_64
dataset_32r   
dataset_64xi_32yi_32xi_64yi_64
xi_data_32
xi_data_64datasetcsr_32datasetcsr_64xicsr_32yicsr_32xicsr_64yicsr_64xicsr_data_32xicsr_data_64s                             r   test_fused_types_make_datasetr9    s   ;;D9BJ''D;bj))D &&Hy"*===9BJ''D;bj))D &&Hy"*=== !t-=>>MJ t-=>>MJ#,,..E5!Q#,,..E5!QJ1J1rz))))rz))))E5t,,,, $Hd4DEEM1#Hd4DEEM1,5577Hh1,5577Hh1"M1a"M1a"*,,,,"*,,,,M=t<<<<HhT2222z=111z=111uh'''uh'''''r   )7rH   rp   numpyr*   scipyr   r   sklearn.utils._testingr   r   r   sklearn.linear_modelr   sklearn.linear_model._baser	   r
   r   r   sklearn.datasetsr   r   r   sklearn.preprocessingr   r   r  r   markparametrizerU   r   r?   rL   rS   r]   rc   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r9  r   r   r   <module>rC     s
                     < < < < < < 5 5 5 5 5 5 2 2 2 2 2 2 1 1 1 1 1 1 ; ; ; ; ; ; 7 7 7 7 7 7 4 4 4 4 4 4 3 3 3 3 3 3 5 5 5 5 5 5 , , , , , , & & & & & & 0 0 0 0 0 0 3 3 3 3 3 33 3 30 "(F4E)FGG4-88"+ "+ 98 HG"+J	 	 	 0662BCC' ' DC'"P P P&5 5 5 &A&A&ABB    CB 6= = = 4-887 7 987$P P P"P P P") ) ).; ; ;"
9 
9 
99 9 9"0 0 08#7 #7 #7L2 2 28 udm44e7 e7 54e7P#: #: #:L% % % m44M22* * 32 54*&L> L> L>^ tQi007 7 107**( *( *( *( *(r   