
    0PhwY                        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	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZmZ d d
lmZ  ej        ddgddgddgddgddgddggd          Z ej        g d          Z  ej        g d          Z! ej        dgdgdgdgdgdggd          Z" ej        d d gddgddgddgddgddgddgddgddgg	          Z# ej        g d          Z$ ej        g d          Z% ej        dgdgdgdgd gdgdgdgdgg	          Z& ej        dd gdd gdd gdd gd d gdd gdd gdd gdd gg	          Z' ej        g d          Z(ej)         ej*        d           ej+        d          f         Z, ej        g d          Z-g dZ.d Z/ej0        1                    dddg          ej0        1                    dg d          d                          Z2d! Z3d" Z4d# Z5d$ Z6d% Z7d& Z8d' Z9ej0        1                    d( e:d)                    d*             Z;d+ Z<ej0        1                    d,dd-g          ej0        1                    dd-dg          d.                         Z=ej0        1                    d/ej>        ej>        fej?        ej?        fej@        ej?        fejA        ej?        fg          d0             ZBd1 ZCd2 ZDd3 ZEej0        1                    d4g d5          d6             ZFd7 ZGd8 ZHej0        I                    ed9:          d;             ZJd< ZKej0        1                    dg d          d=             ZLd> ZMdS )?    N)linalg)KMeans)
LedoitWolfShrunkCovarianceledoit_wolf)
make_blobs)LinearDiscriminantAnalysisQuadraticDiscriminantAnalysis_cov)StandardScaler)check_random_state)_convert_containerassert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)_IS_WASM      fdtype)r   r   r   r   r   r   )r   r   r   r      r   r   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r   r      )r   r   )r   r   r   r   r   r   r   r   )	)svdN)lsqrN)eigenN)r   auto)r   r   )r   Q?)r    r!   )r    r   )r    r"   c            	         t           D ]} | \  }}t          ||          }|                    t          t                                        t                    }t          |t          d|z             |                    t          t                                        t                    }t          |t          d|z             |                    t                    }t          |d d df         dk    dz   t          d|z             |	                    t                    }t          t          j        |          |ddd|z             |                    t          t                                        t                    }t          j        |t          k              sJ d|z              t          dd          }t          j        t"                    5  |                    t          t                     d d d            n# 1 swxY w Y   t          d	d
t%                                }t          j        t&          d          5  |                    t          t                     d d d            n# 1 swxY w Y   t          dt)                                }t          j        t&          d          5  |                    t          t                     d d d            n# 1 swxY w Y   t          d	t+          dd                    }t          j        t&                    5  |                    t          t                     d d d            d S # 1 swxY w Y   d S )Nsolver	shrinkagez	solver %sr         ?ư>)rtolatolerr_msgr   r!   r   皙?)r%   r&   covariance_estimatorz[covariance_estimator and shrinkage parameters are not None. Only one of the two can be set.match)r%   r-   z.covariance estimator is not supported with svdr   )
n_clustersn_init)solver_shrinkager	   fitXypredictr   X1predict_probapredict_log_probar   npexpy3anypytestraisesNotImplementedErrorr   
ValueErrorr   r   )		test_caser%   r&   clfy_predy_pred1y_proba_pred1y_log_proba_pred1y_pred3s	            h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/tests/test_discriminant_analysis.pytest_lda_predictrJ   H   s    & ; ;	%	()LLLA&&q))61kF&:;;; ''"a..((,,7A{V';<<< ))"--M!!!Q$/#5:A{V?STTT11"55F$%%&(	
 	
 	
 	
 ''!R..((++vgm$$::kF&:::::
$EV
D
D
DC	*	+	+  1               %;K;M;M  C 
.
 
 
   	1               %E

U
U
UC	J
 
 
   	1               %Fa,O,O,O  C 
z	"	"  1                 sH   !HH	H		!I66I:=I:9!K&&K*-K**!MMM	n_classesr%   r   r   r    c                 `   dd}t          j        ddgddgddgg          d          }t          j        ddgddgggt          |          z            } |d	||d
          \  }}t          | dd                               ||          }t          |j        |d           t          |j        |d         d           t          j	        |d                   }g g t          t          |          dz
            D ]}	                    t          j        |||	         |d         z
  d d t           j        f                                                  t          j        d||	         |d         z   t           j        d d f         z  d                              t          j        ddgg          d t          j        fdt          dz
            D                       }
dt          j        |
          z
  }t          ddt          fdt          dz
            D                       z   z            }|t!          j        |          k    sJ t          |                              t          j        |
|g          t           j                 d           d S )Nc                     t          |          t          j         fdt          |          D                       }t          j         fdt          t                              D                       }||fS )zNGenerate a multivariate normal data given some centers and
        covariancesc           
      f    g | ]-\  }}                     ||t                    z             .S )size)multivariate_normallen).0meancovcenters	n_samplesrngs      rI   
<listcomp>zDtest_lda_predict_proba.<locals>.generate_dataset.<locals>.<listcomp>   sM       D# ''c	S\\8Q'RR      c                 <    g | ]}|gt                    z  z  S  )rS   )rT   clazzrW   rX   s     rI   rZ   zDtest_lda_predict_proba.<locals>.generate_dataset.<locals>.<listcomp>   s+    TTTueW	S\\12TTTr[   )r   r:   vstackziphstackrangerS   )rX   rW   covariancesrandom_stater4   r5   rY   s   ``    @rI   generate_datasetz0test_lda_predict_proba.<locals>.generate_dataset   s     !..I     !$Wk!:!:  
 
 ITTTTTc'll@S@STTT
 
 !tr[   r   (   i   
   d   i_ *   )rX   rW   rc   rd   T)r%   store_covariancer&   r,   )r*   r   r         i   c                     t          j        ||         t          j        | ||                   z                                             S N)r:   r;   dotitem)samplecoef	interceptr^   s       rI   discriminant_funcz1test_lda_predict_proba.<locals>.discriminant_func   s8    vi&U)D)DDEEJJLLLr[   c                     g | ]O}t           |          d t          fdt          d z
            D                       z   z            PS )r   c                 ,    g | ]} |          S r]   r]   rT   r^   alpha_k	alpha_k_0rv   rs   s     rI   rZ   z5test_lda_predict_proba.<locals>.<listcomp>.<listcomp>   s:        % .-fgy%PP  r[   )floatsumrb   )rT   r^   rz   r{   rv   rK   rs   s     rI   rZ   z*test_lda_predict_proba.<locals>.<listcomp>   s     	
 	
 	
  !!&'9eDD      ).y1})=)=   	 	
 	
 	
r[   c                 ,    g | ]} |          S r]   r]   ry   s     rI   rZ   z*test_lda_predict_proba.<locals>.<listcomp>   s:        &%fgy%HH  r[   {Gz?rp   )r:   arrayrS   r	   r3   r   means_covariance_r   invrb   appendrq   newaxisr}   r|   r>   approxr8   ra   )r%   rK   re   blob_centers	blob_stdsr4   r5   lda	precisionr^   probprob_ref
prob_ref_2rz   r{   rv   rs   s    `           @@@@rI   test_lda_predict_probar      sN       8aVc2Yb	:;;JYJGLB8b#Y/03|3D3DDEEI9SU  DAq %  	c!Qii 
 CJ48888COYq\::::
 
9Q<((IGIs<((1,-- 	
 	
F9|E2\"5EEqqq"*}UVV	
 	
 	
 	FU+l2.>>
AAANN 	
 	
 	
 	
 XRyk""FM M M 8	
 	
 	
 	
 	
 	
 	
 	
 y1}--	
 	
 	
 D$ 26$<<H 	      !&y1}!5!5   		
 J v}Z000000 &!!29dH-=#>#>rz#JQU     r[   c                     t          j        ddg          } t          |           }d}t          j        t
          |          5  |                    t          t                     d d d            n# 1 swxY w Y   t          ddg          }|                    t          t                     t          j        ddg          } t          j        ddg          }t          |           }t          j	        t                    5  |                    t          t                     d d d            n# 1 swxY w Y   t          |j        |d	           d S )
Nr'   rm   priorszpriors must be non-negativer.   333333??g?r   )r:   r   r	   r>   r?   rA   r3   r4   r5   warnsUserWarningr   priors_)r   rC   msg
prior_norms       rI   test_lda_priorsr      s   XsDk""F
$F
3
3
3C
'C	z	-	-	-  1              
 %S#J
7
7
7CGGAqMMM XsCj!!F4,''J
$F
3
3
3C	k	"	"  1               ck:q99999s$   !A11A58A5!D00D47D4c                     d} d}d}t          || |d          \  }}t          d          }t          d          }t          d          }|                    ||           |                    ||           |                    ||           t          |j        |j        d	           t          |j        |j        d	           t          |j        |j        d	           d S )
Nr   i     rX   
n_featuresrW   rd   r   r%   r   r    r   )r   r	   r3   r   coef_)r   rK   rX   r4   r5   clf_lda_svdclf_lda_lsqrclf_lda_eigens           rI   test_lda_coefsr      s    JII
ITV  DAq -E:::K-V<<<L.g>>>MOOAqQak/1CQGGGk/1DaHHHm1<3EqIIIIIr[   c                  x   t          dd          } |                     t          t                                        t                    }|j        d         dk    sJ t          dd          } |                     t          t                                        t                    }|j        d         dk    sJ t          dd          } |                     t          t                     d}t          j        t          |          5  |                     t                     d d d            d S # 1 swxY w Y   d S )Nr   r   )r%   n_componentsr    r   z$transform not implemented for 'lsqr'r.   )	r	   r3   r4   r5   	transformshaper>   r?   r@   )rC   X_transformedr   s      rI   test_lda_transformr     sJ   
$E
B
B
BCGGAqMM++A..Mq!Q&&&&
$G!
D
D
DCGGAqMM++A..Mq!Q&&&&
$F
C
C
CCGGAqMMM
0C	*#	6	6	6  a                 s   D//D36D3c                  x   t           j                            d          } |                     ddd          }|                     ddd          }t          d	          }|                    ||           t          |j        	                                d
d           |j        j
        dk    s
J d            t          d	          }|                    ||           t          |j        	                                d
d           |j        j
        dk    s
J d            t          |j        |j                   d S )Nr   rj   )rg      )locscalerQ   r   )rg   rP   r    r         ?)r   z/Unexpected length for explained_variance_ratio_r   )r:   randomRandomStatenormalrandintr	   r3   r   explained_variance_ratio_r}   r   r   )stater4   r5   r   r   s        rI   !test_lda_explained_variance_ratior   '  s\    I!!!$$E#H55Aa''A.g>>>Ma?CCEEsANNN28 =   8   -E:::KOOAq=AACCS!LLL06 ;   8   -}/V    r[   c            	         t          j        g dg dg dg dg          } t          j        g dg dg dg dg d	g d
g          }| d d t           j        d d f         |t           j        d d d d f         z                       d          }t          j        t          j        | j        d                   |j        d                   }t          d                              ||          }|	                    |           }|d         |d         z
  }|d         |d         z
  }|t          j
        t          j        |dz                      z  }|t          j
        t          j        |dz                      z  }t          t          j        |	                    |          j                  t          j        d                     t          t          j        t          j        |d d         ddg                    d           t          t          j        t          j        |d d         ddg                    d           d S )N)r   r   r   )r   r   r   )r   r   r   )r   r      )r,   r   r   )皙r   r   )r   r,   r   )r   r   r   )r   r   r,   )r   r   r   )r   r   r   r   r   r   r   r   r   )r:   r   r   reshaperepeataranger   r	   r3   r   sqrtr}   r   rV   Teyeabsrq   )meansscatterr4   r5   rC   means_transformedd1d2s           rI   test_lda_orthogonalityr   D  s    Hjjj)))ZZZCDDE hKKLLKKLLKKLL	
	 	G 
qqq"*aaa	 72:qqq!!!+;#<	<EEgNNA
	")EKN++W]1-=>>A %E
2
2
2
6
6q!
<
<Ce,,	1	 1! 4	4B	1	 1! 4	4B"'"&Q--
 
  B"'"&Q--
 
  B s}}W55788"&))DDD rvb!fq!f5566<<< rvb!fq!f5566<<<<<r[   c                     d} t           j                            d          }|                    dd| df          g dz   }|                    dd| df          g dz   }t          j        ||f          g dz  }dg| z  dg| z  z   }d	D ]M}t          |
          }|                    ||                              ||          dk    sJ d|z              Nd S )Nrj   i  r   r   r   )rf   r   r   )ri   r   r   )r   rj   i'  rL   r   r   zusing covariance: %s)r:   r   r   uniformr_   r	   r3   score)nrY   x1x2xr5   r%   rC   s           rI   test_lda_scalingr   m  s    A
)


%
%C 
RQF	#	#kkk	1B	RQF	#	#jjj	0B
	2r(ooo-A	qA37A* Q Q(777wwq!}}""1a((C///1G&1P////Q Qr[   c            	         dD ]} t          |                               t          t                    }t	          |d          sJ t          | d                              t          t                    }t	          |d          sJ t          |j        t          j        ddgddgg                     t          d	                              t          t                    }t	          |d          rJ t          | d                              t          t                    }t	          |d          sJ t          |j        t          j        ddgddgg                     d S )
N)r   r    r   r   T)r%   rl   gil?gam?g	^?r   )	r	   r3   X6y6hasattrr   r   r:   r   )r%   rC   s     rI   test_lda_store_covariancer   ~  sp    $ 
 
(777;;BCCsM***** )NNNRR
 
 sM*****!ORX(';h=Q&RSS	
 	
 	
 	

 %E
2
2
2
6
6r2
>
>CsM***** %FT
J
J
J
N
NrSU
V
VC3&&&&&Hh#7(H9M"NOO    r[   seedri   c                    t           j                            |           }|                    dd          }|                    dd          }t          ddd          }t          dt          d	          d
          }|                    ||           |                    ||           t          |j	        |j	                   t          |j
        |j
                   d S )Nrj   ri   r   rP   Tr'   r   rl   r&   r%   )r&   rl   r-   r%   )r:   r   r   randr   r	   r   r3   r   r   r   )r   rY   r4   r5   c1c2s         rI   test_lda_shrinkager     s     )


%
%CbAAS""A	#TSQW	X	X	XB	#-<<<
 
 
B
 FF1aLLLFF1aLLLBIry)))BNBN33333r[   c                      G d d          } t           j                            d          }|                    dd          }|                    dd          }t          d	d
d          }t          d	 |             d          }|                    ||           |                    ||           t          |j        |j                   t          |j	        |j	                   d S )Nc                       e Zd Zd ZdS )3test_lda_ledoitwolf.<locals>.StandardizedLedoitWolfc                     t                      }|                    |          }t          |          d         }|j        d d t          j        f         |z  |j        t          j        d d f         z  }|| _        d S )Nr   )r   fit_transformr   scale_r:   r   r   )selfr4   scX_scss        rI   r3   z7test_lda_ledoitwolf.<locals>.StandardizedLedoitWolf.fit  sq    !!B##A&&DD!!!$A	!!!RZ-(1,ryQQQ/GGA Dr[   N)__name__
__module____qualname__r3   r]   r[   rI   StandardizedLedoitWolfr     s#        	! 	! 	! 	! 	!r[   r   r   rj   ri   r   )rj   rP   Tr!   r   r   r   )
r:   r   r   r   r   r	   r3   r   r   r   )r   rY   r4   r5   r   r   s         rI   test_lda_ledoitwolfr     s    ! ! ! ! ! ! ! ! )


"
"CbAAF##A	#
 
 
B 
$3355
 
 
B
 FF1aLLLFF1aLLLBIry)))BNBN33333r[   r   r   c                 .   t          d          }d}|                    ||          }t          j        t	          |           || z  dz             d |         }t          || dz
            }|dz
  d |fD ](}t          |          }|                    ||           )|dz   t          || dz
            dz   fD ]]}t          |          }d}	t          j
        t          |	          5  |                    ||           d d d            n# 1 swxY w Y   ^d S )Nr   ri   r   )r   z#n_components cannot be larger than r.   )r   randnr:   tilerb   minr	   r3   maxr>   r?   rA   )
rK   r   rY   rX   r4   r5   max_componentsr   r   r   s
             rI   test_lda_dimension_warningr     sq    Q

CI		)Z((A 	i  )y"81"<==jyjIAY]33N'!+T>B  (lCCC1'!+SY]-K-Ka-OP  
 )lCCC3]:S111 	 	GGAqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   &D		D	D	zdata_type, expected_typec                     t           D ]n\  }}t          ||          }|                    t                              |           t
                              |                      |j        j        |k    sJ od S )Nr$   )r2   r	   r3   r4   astyper5   r   r   )	data_typeexpected_typer%   r&   rC   s        rI   test_lda_dtype_matchr     sx     . 0 0	()LLL##QXXi%8%8999y-/////0 0r[   c                     t           D ]\  } }t          | |          }|                    t                              t
          j                  t                              t
          j                             t          | |          }|                    t                              t
          j                  t                              t
          j                             d}t          |j
        |j
        |           d S )Nr$   r(   )r)   )r2   r	   r3   r4   r   r:   float32r5   float64r   r   )r%   r&   clf_32clf_64r)   s        rI   ,test_lda_numeric_consistency_float32_float64r     s    - ? ?	+6YOOO

188BJ''"*)=)=>>>+6YOOO

188BJ''"*)=)=>>> fl>>>>>? ?r[   c                     t                      } |                     t          t                                        t                    }t          |t                     |                     t          t                                        t                    }t          |t                     |                     t                    }t          |d d df         dk    dz   t                     |                     t                    }t          t          j        |          |d           |                     t          t                                        t                    }t          j        |t          k              sJ t          j        t                     5  |                     t          t"                     d d d            d S # 1 swxY w Y   d S )Nr   r'   r   )r
   r3   r   r   r6   r   X7r8   r9   r   r:   r;   y7r=   r>   r?   rA   y4)rC   rD   rE   rF   rG   rH   s         rI   test_qdar     s    (
)
)CWWR__$$R((Fvr""" ggb"oo%%b))Gw### %%b))Maaad+c1Q6;;;--b11bf%677JJJggb"oo%%b))G6'R-      
z	"	"  B                 s   !GGGc                     t                      } |                     t          t                                        t                    }t          j        |dk              }d}t          t          j        |d|z
  g                    } |                     t          t                                        t                    }t          j        |dk              }||k    sJ d S )Nr   g|=r   r   )r
   r3   r   r   r6   r:   r}   r   )rC   rD   n_posnegn_pos2s        rI   test_qda_priorsr    s    
'
)
)CWWR__$$R((FF6Q;E
C
'rxa#g/G/G
H
H
HCWWR__$$R((FVFaK  FE>>>>>>r[   priors_type)listtupler   c                     ddg}t          t          ddg|                                         t          t                    }t          |j        t          j                  sJ t          |j        |           dS )z$Check that priors accept array-like.r'   r   N)
r
   r   r3   r   r   
isinstancer   r:   ndarrayr   )r  r   rC   s      rI   test_qda_prior_typer  ,  sv     3ZF
'!3*k::  	c"bkk  ck2:.....s{F+++++r[   c                     t          j        ddg          } t          |                               t          t
                    }t          |j        |j                   d| d<   |j        d         |j        d         k    sJ dS )zCCheck that altering `priors` without `fit` doesn't change `priors_`r'   r   g?r   N)	r:   r   r
   r3   r4   r5   r   r   r   )r   qdas     rI   test_qda_prior_copyr  7  sy    XsCj!!F
'v
6
6
6
:
:1a
@
@C s{CJ/// F1I;q>SZ]******r[   c                     t                                          t          t                    } t	          | d          rJ t          d                              t          t                    } t	          | d          sJ t          | j        d         t          j        ddgddgg                     t          | j        d         t          j        dd	gd	d
gg                     d S )Nr   T)rl   r   gffffff?r   r   gQUU?gQUUտgvWUU?)	r
   r3   r   r   r   r   r   r:   r   )rC   s    rI   test_qda_store_covariancer  D  s    
'
)
)
-
-b"
5
5CsM***** (
>
>
>
B
B2r
J
JC3&&&&&coa0"(S$K$PS;U2V2VWWW
:{+k:-FGHH    r[   zcno floating point exceptions, see https://github.com/numpy/numpy/pull/21895#issuecomment-1311525881)reasonc                  "   d} t                      }t          j        t          j        |           5  |                    t          t                    }d d d            n# 1 swxY w Y   |                    t                    }t          j
        |t          k              sJ t          d          }t          j                    5  t          j        d           d d d            n# 1 swxY w Y   |                    t          t                     |                    t                    }t          |t                     t                      }t          j        t          j        |           5  |                    t          t                      d d d            n# 1 swxY w Y   t          d          }t          j        t          j        |           5  |                    t          t                      d d d            d S # 1 swxY w Y   d S )Nz2The covariance matrix of class .+ is not full rankr.   r   )	reg_paramerrorg333333?)r
   r>   r   r   LinAlgWarningr3   X2r   r6   r:   r=   warningscatch_warningssimplefilterr   X5y5)r   rC   rD   s      rI   test_qda_regularizationr  U  s    @C
'
)
)C	f*#	6	6	6 ! !R! ! ! ! ! ! ! ! ! ! ! ! ! ! ! [[__F6&B, ($
7
7
7C		 	"	" ' 'g&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' 'GGBOOO[[__Fvr""" (
)
)C	f*#	6	6	6  B               (#
6
6
6C	f*#	6	6	6  B                 sG   !AA"%A"C&&C*-C*.!FF"F!HHHc                     t          dddd          \  } }t          j        | t          j        | j        d         dz                                | j        d         | j        d                             } t          | d          }t          ||j                   t          | d          }t          ||j                   d S )	Nrj   r   r   rk   r   r   	empiricalr!   )	r   r:   rq   r   r   r   r   r   r   )r   r5   c_ec_ss       rI   test_covariancer"  ~  s    12NNNDAq 	q")AGAJ!O,,44QWQZLLMMA
q+

CSU###
q&//CSU#####r[   c                    t          j        ddgddgg          }t          j        ddg          }t          |           }t          j        t
          d          5  |                    ||           ddd           dS # 1 swxY w Y   dS )	zg
    Tests that if the number of samples equals the number
    of classes, a ValueError is raised.
    r'   r   abr   z"The number of samples must be morer.   N)r:   r   r	   r>   r?   rA   r3   )r%   r4   r5   rC   s       rI   =test_raises_value_error_on_same_number_of_classes_and_samplesr&    s     	3*sCj)**A
#sA
$F
3
3
3C	z)M	N	N	N  1                 s   B  BBc                  X   t                                          t          t                    } |                                 }d                                t          j        fdt          | j	        j
        d                   D             t                    }t          ||           dS )z6Check get_feature_names_out uses class name as prefix.r	   c                     g | ]} | 	S r]   r]   )rT   iclass_name_lowers     rI   rZ   z.test_get_feature_names_out.<locals>.<listcomp>  s4     	
 	
 	
  $$$	
 	
 	
r[   r   r   N)r	   r3   r4   r5   get_feature_names_outlowerr:   r   rb   r   r   objectr   )est	names_outexpected_names_outr*  s      @rI   test_get_feature_names_outr1    s     %
&
&
*
*1a
0
0C))++I399;;	
 	
 	
 	
38>qABB	
 	
 	
    y"455555r[   )Nr  numpyr:   r>   scipyr   sklearn.clusterr   sklearn.covariancer   r   r   sklearn.datasetsr   sklearn.discriminant_analysisr	   r
   r   sklearn.preprocessingr   sklearn.utilsr   sklearn.utils._testingr   r   r   r   r   sklearn.utils.fixesr   r   r4   r5   r<   r7   r   r   r   r   r  r   c_r   zerosr  r  r2   rJ   markparametrizer   r   r   r   r   r   r   r   rb   r   r   r   r   r   int32int64r   r   r   r  r  r  r  xfailr  r"  r&  r1  r]   r[   rI   <module>rC     s<               " " " " " " H H H H H H H H H H ' ' ' ' ' '         
 1 0 0 0 0 0 , , , , , ,              ) ( ( ( ( ( BHr2hR2r(QFQFQFC3OOOBH  RX   !! RXTB4"sQC!%
   RXVb"XBx"bB8aVaVaVaQRVT  RX)))**RX)))** RXtbTB4"sQC!qcA3?@@ RX!Wr1gAwQ!Q!Q!Q!Q!QP 
 RX)))** U929Q<<&)))*RX&&&''
 
 
 < < <~ q!f--#;#;#;<<[ [ =< .-[|: : :2J J J,  "  :&= &= &=RQ Q Q"  < r++4 4 ,+4$4 4 4< 1v..q!f--  .- /.2 	RZ 	RZ 	2:	2:	 0 0 0	? 	? 	?  6
 
 
 (B(B(BCC, , DC,
+ 
+ 
+  " 	M     D
$ 
$ 
$ #;#;#;<<	 	 =<	6 6 6 6 6r[   