U
    _»{jßY  ã                   @   sÖ  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 ejd
dgddgdd
gddgddgddggdd�Ze ddddddg¡Ze ddddddg¡Zejd
gdgdgdgdgdggdd�Ze 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 dddddddddg	¡Z!e dddddddddg	¡Z"e dgd
gdgdgd gdgdgdgdgg	¡Z#e 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 dddddddddg	¡Z%ej&e 'd¡e (d¡f Z)e d d d d d dddg¡Z*dddddddddg	Z+dd„ Z,ej- .dddg¡ej- .d d!d"d#g¡d$d%„ ƒƒZ/d&d'„ Z0d(d)„ Z1d*d+„ Z2d,d-„ Z3d.d/„ Z4d0d1„ Z5d2d3„ Z6ej- .d4e7d5ƒ¡d6d7„ ƒZ8d8d9„ Z9ej- .d:dd;g¡ej- .dd;dg¡d<d=„ ƒƒZ:ej- .d>ej;ej;fej<ej<fej=ej<fej>ej<fg¡d?d@„ ƒZ?dAdB„ Z@dCdD„ ZAdEdF„ ZBej- .dGdHdIdJg¡dKdL„ ƒZCdMdN„ ZDdOdP„ ZEdQdR„ ZFdSdT„ ZGej- .d d!d"d#g¡dUdV„ ƒZHdWdX„ ZIdS )Yé    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éþÿÿÿéÿÿÿÿé   é   Úf©Údtypeé   éýÿÿÿé   )r   r   )ÚsvdN)ÚlsqrN)ÚeigenN)r   Úauto)r   r   )r   ç…ëQ¸…Û?)r   r   )r   r   )r   r    c            	   	   C   s´  t D ]Ü} | \}}t||d�}| tt¡ t¡}t|td| ƒ | tt¡ t¡}t|td| ƒ | t¡}t|d d …df dkd td| ƒ | 	t¡}t
t |¡|ddd| d� | tt¡ t¡}t |tk¡std| ƒ‚qtddd�}t t¡� | tt¡ W 5 Q R X td	d
tƒ d�}tjtdd�� | tt¡ W 5 Q R X tdtƒ d�}tjtdd�� | tt¡ W 5 Q R X td	tddd�d�}t t¡� | tt¡ W 5 Q R X 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   )Z
n_clustersZn_init)Úsolver_shrinkager   ÚfitÚXÚyÚpredictr   ÚX1Úpredict_probaÚpredict_log_probar   ÚnpÚexpÚy3ÚanyÚAssertionErrorÚpytestÚraisesÚNotImplementedErrorr   Ú
ValueErrorr   r   )	Z	test_caser"   r#   ÚclfÚy_predÚy_pred1Úy_proba_pred1Úy_log_proba_pred1Úy_pred3© rD   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/tests/test_discriminant_analysis.pyÚtest_lda_predictE   sX    
$
û	  ÿý ÿ 
ÿrF   Ú	n_classesr"   r   r   r   c              
      sâ  ddd„}t  ddgddgddgg¡d ˆ… }t  ddgdd	gggt|ƒ ¡}|d
||dd�\}}t| dd d� ||¡}t|j|dd� t|j|d dd� t 	|d ¡}g ‰ g ‰t
t|ƒd ƒD ]d}	ˆ  t  |||	 |d  d d …t jf ¡¡ ˆ t  d||	 |d  t jd d …f  ˆ d ¡¡ qÂt  ddgg¡‰dd„ ‰t  ‡ ‡‡‡‡fdd„t
ˆd ƒD ƒ¡}
dt  |
¡ }tddt‡ ‡‡‡fdd„t
ˆd ƒD ƒƒ  ƒ}|t |¡k�sºt‚t| ˆ¡t  |
|g¡t j dd� d S )Nc                    sT   t |ƒ‰t ‡ ‡‡fdd„tˆ |ƒD ƒ¡}t ‡ ‡fdd„ttˆ ƒƒD ƒ¡}||fS )zNGenerate a multivariate normal data given some centers and
        covariancesc                    s(   g | ] \}}ˆj ||ˆtˆ ƒ d �‘qS )©Úsize)Zmultivariate_normalÚlen)Ú.0ZmeanÚcov©ÚcentersÚ	n_samplesÚrngrD   rE   Ú
<listcomp>Œ   s   ÿzDtest_lda_predict_proba.<locals>.generate_dataset.<locals>.<listcomp>c                    s   g | ]}|gˆt ˆ ƒ  ‘qS rD   )rJ   ©rK   Úclazz)rN   rO   rD   rE   rQ   ’   s     )r   r5   ÚvstackÚzipÚhstackÚrangerJ   )rO   rN   ÚcovariancesÚrandom_stater/   r0   rD   rM   rE   Úgenerate_dataset‡   s    þÿÿz0test_lda_predict_proba.<locals>.generate_datasetr   éöÿÿÿé(   iâÿÿÿé   é
   éd   i�_ é*   )rO   rN   rX   rY   T)r"   Ústore_covariancer#   r)   )r'   r   r   ç      à¿iêÿÿÿé   c                 S   s"   t  || t  | || ¡ ¡ ¡ S )N)r5   r6   ÚdotÚitem)ÚsampleZcoefZ	interceptrS   rD   rD   rE   Údiscriminant_func¶   s    z1test_lda_predict_proba.<locals>.discriminant_funcc              
      sF   g | ]>}t ˆˆˆ ˆ|ƒd t‡ ‡‡‡fdd„tˆd  ƒD ƒƒ  ƒ‘qS )r   c                    s   g | ]}ˆˆˆ ˆ|ƒ‘qS rD   rD   rR   ©Úalpha_kÚ	alpha_k_0rg   rf   rD   rE   rQ   À   s   ÿz5test_lda_predict_proba.<locals>.<listcomp>.<listcomp>)ÚfloatÚsumrW   rR   ©ri   rj   rg   rG   rf   rD   rE   rQ   º   s   ô
þÿÿþÿz*test_lda_predict_proba.<locals>.<listcomp>c                    s   g | ]}ˆˆˆ ˆ|ƒ‘qS rD   rD   rR   rh   rD   rE   rQ   Ô   s   ÿç{®Gáz„?)N)r5   ÚarrayrJ   r   r.   r   Úmeans_Úcovariance_r   ÚinvrW   Úappendrd   Únewaxisrl   rk   r:   Zapproxr9   r3   rV   )r"   rG   rZ   Zblob_centersZ	blob_stdsr/   r0   ÚldaÚ	precisionrS   ZprobZprob_refZ
prob_ref_2rD   rm   rE   Útest_lda_predict_proba„   sr    
$    ÿ
  ÿ þ$ÿ þÿ
óÿ
þÿÿþÿ  ÿrw   c               	   C   s¶   t  ddg¡} t| d�}d}tjt|d�� | tt¡ W 5 Q R X tddgd�}| tt¡ t  ddg¡} t  ddg¡}t| d�}t 	t
¡� | tt¡ W 5 Q R X t|j|d	ƒ d S )
Nr$   rb   ©Úpriorszpriors must be non-negativer+   ç333333ã?çÍÌÌÌÌÌÜ?gš™™™™™á?r   )r5   ro   r   r:   r;   r=   r.   r/   r0   ÚwarnsÚUserWarningr   Úpriors_)ry   r>   ÚmsgZ
prior_normrD   rD   rE   Útest_lda_priorsä   s    

r€   c                  C   s–   d} d}d}t || |dd�\}}tdd�}tdd�}tdd�}| ||¡ | ||¡ | ||¡ t|j|jd	ƒ t|j|jd	ƒ t|j|jd	ƒ d S )
Nr   iè  é   ©rO   Ú
n_featuresrN   rY   r   ©r"   r   r   r   )r   r   r.   r   Úcoef_)rƒ   rG   rO   r/   r0   Úclf_lda_svdZclf_lda_lsqrÚclf_lda_eigenrD   rD   rE   Útest_lda_coefsý   s$       ÿ



rˆ   c               	   C   s¤   t ddd�} |  tt¡ t¡}|jd dks0t‚t ddd�} |  tt¡ t¡}|jd dks`t‚t ddd�} |  tt¡ d}tjt	|d�� |  t¡ W 5 Q R X d S )Nr   r   )r"   Ún_componentsr   r   z$transform not implemented for 'lsqr'r+   )
r   r.   r/   r0   Ú	transformÚshaper9   r:   r;   r<   )r>   ZX_transformedr   rD   rD   rE   Útest_lda_transform  s    rŒ   c                  C   s¶   t j d¡} | jdddd�}| jdddd�}tdd	�}| ||¡ t|j 	¡ d
dƒ |jj
dkshtdƒ‚tdd	�}| ||¡ t|j 	¡ d
dƒ |jj
dks¤tdƒ‚t|j|jƒ d S )Nr   r_   )r\   é   )ÚlocÚscalerI   r   )r\   rH   r   r„   ç      ð?)r   z/Unexpected length for explained_variance_ratio_r   )r5   ÚrandomÚRandomStateÚnormalÚrandintr   r.   r   Úexplained_variance_ratio_rl   r‹   r9   r   )Ústater/   r0   r‡   r†   rD   rD   rE   Ú!test_lda_explained_variance_ratio$  s&    
þ
þ ÿr—   c               
   C   sŽ  t  dddgdddgdddgdddgg¡} t  dddgdddgdddgdddgdddgdddgg¡}| d d …t jd d …f |t jd d …d d …f   d¡}t  t  | jd ¡|jd ¡}td	d
� ||¡}| 	| ¡}|d |d  }|d |d  }|t  
t  |d ¡¡ }|t  
t  |d ¡¡ }tt  | 	|¡j¡t  d¡ƒ tt  t  |d d… ddg¡¡dƒ tt  t  |d d… ddg¡¡dƒ d S )Nr   r   r   r   é   r)   gš™™™™™¹¿)r   r   r   r„   r   r   r�   )r5   ro   rt   ÚreshapeÚrepeatÚaranger‹   r   r.   rŠ   Úsqrtrl   r   rL   ÚTÚeyeÚabsrd   )ZmeansZscatterr/   r0   r>   Zmeans_transformedZd1Zd2rD   rD   rE   Útest_lda_orthogonalityA  s*    *úÿ6
$r    c                  C   s°   d} t j d¡}| dd| df¡dddg }| dd| df¡dddg }t  ||f¡ddd	g }dg|  dg|   }d
D ]2}t|d�}| ||¡ ||¡dksxtd| ƒ‚qxd S )Nr_   iÒ  r   r   r   r[   r   r^   i'  )r   r   r   r„   r�   zusing covariance: %s)	r5   r‘   r’   ÚuniformrT   r   r.   Zscorer9   )ÚnrP   Úx1Zx2Úxr0   r"   r>   rD   rD   rE   Útest_lda_scalingj  s    
r¥   c                  C   sÎ   dD ]d} t | d� tt¡}t|dƒs(t‚t | dd� tt¡}t|dƒsJt‚t|jt 	ddgddgg¡ƒ qt d	d� tt¡}t|dƒrŠt‚t | dd� tt¡}t|dƒs¬t‚t|jt 	ddgddgg¡ƒ d S )
N)r   r   r„   rq   T)r"   ra   g¦µil¯Û?g€aùómÁ¶?g	^á?r   )
r   r.   ÚX6Úy6Úhasattrr9   r   rq   r5   ro   )r"   r>   rD   rD   rE   Útest_lda_store_covariance{  s(     ÿ ÿ ÿr©   Úseedr^   c                 C   s€   t j | ¡}| dd¡}|jddd�}tdddd�}tdtdd	�dd
�}| ||¡ | ||¡ t|j	|j	ƒ t|j
|j
ƒ d S )Nr_   r^   r   rH   Tr$   r   ©ra   r#   r"   )r#   ©ra   r*   r"   )r5   r‘   r’   Úrandr”   r   r   r.   r   rp   rq   )rª   rP   r/   r0   Úc1Úc2rD   rD   rE   Útest_lda_shrinkage™  s    ýr°   c                  C   sŠ   G dd„ dƒ} t j d¡}| dd¡}|jddd�}td	d
dd�}td	| ƒ dd�}| ||¡ | ||¡ t|j|jƒ t|j	|j	ƒ d S )Nc                   @   s   e Zd Zdd„ ZdS )z3test_lda_ledoitwolf.<locals>.StandardizedLedoitWolfc                 S   sR   t ƒ }| |¡}t|ƒd }|jd d …tjf | |jtjd d …f  }|| _d S )Nr   )r   Zfit_transformr   Zscale_r5   rt   rq   )Úselfr/   ÚscZX_scÚsrD   rD   rE   r.   ±  s
    
,z7test_lda_ledoitwolf.<locals>.StandardizedLedoitWolf.fitN)Ú__name__Ú
__module__Ú__qualname__r.   rD   rD   rD   rE   ÚStandardizedLedoitWolf°  s   r·   r   r_   r^   r   )r_   rH   Tr   r   r«   r¬   )
r5   r‘   r’   r­   r”   r   r.   r   rp   rq   )r·   rP   r/   r0   r®   r¯   rD   rD   rE   Útest_lda_ledoitwolf¬  s$    	  ÿýr¸   rƒ   r˜   c           
   
   C   sÈ   t dƒ}d}| ||¡}t t| ƒ||  d ¡d |… }t|| d ƒ}|d d |fD ]}t|d�}| ||¡ qT|d t|| d ƒd fD ]8}t|d�}d}	t	j
t|	d�� | ||¡ W 5 Q R X qŠd S )Nr   r^   r   )r‰   z#n_components cannot be larger than r+   )r   Zrandnr5   ZtilerW   Úminr   r.   Úmaxr:   r;   r=   )
rG   rƒ   rP   rO   r/   r0   Zmax_componentsr‰   ru   r   rD   rD   rE   Útest_lda_dimension_warningÊ  s     

r»   zdata_type, expected_typec                 C   sF   t D ]<\}}t||d�}| t | ¡t | ¡¡ |jj|kst‚qd S )Nr!   )	r-   r   r.   r/   Úastyper0   r…   r   r9   )Z	data_typeÚexpected_typer"   r#   r>   rD   rD   rE   Útest_lda_dtype_matchå  s    
r¾   c                  C   sx   t D ]n\} }t| |d�}| t tj¡t tj¡¡ t| |d�}| t tj¡t tj¡¡ d}t	|j
|j
|d� qd S )Nr!   r%   )r&   )r-   r   r.   r/   r¼   r5   Úfloat32r0   Úfloat64r   r…   )r"   r#   Zclf_32Zclf_64r&   rD   rD   rE   Ú,test_lda_numeric_consistency_float32_float64õ  s    rÁ   c               	   C   sÌ   t ƒ } |  tt¡ t¡}t|tƒ |  tt¡ t¡}t|tƒ |  t¡}t|d d …df dkd tƒ |  t¡}t	t
 |¡|dƒ |  tt¡ t¡}t
 |tk¡s¦t‚t t¡� |  tt¡ W 5 Q R X d S )Nr   r$   r   )r	   r.   r¦   r§   r1   r   ÚX7r3   r4   r   r5   r6   Úy7r8   r9   r:   r;   r=   Úy4)r>   r?   r@   rA   rB   rC   rD   rD   rE   Útest_qda  s    



rÅ   c                  C   sr   t ƒ } |  tt¡ t¡}t |dk¡}d}t t |d| g¡d�} |  tt¡ t¡}t |dk¡}||ksnt‚d S )Nr   g»½×Ùß|Û=r   rx   )	r	   r.   r¦   r§   r1   r5   rl   ro   r9   )r>   r?   Zn_posÚnegZn_pos2rD   rD   rE   Útest_qda_priors  s    rÇ   Úpriors_typeÚlistÚtuplero   c                 C   sF   ddg}t tddg| ƒd� tt¡}t|jtjƒs6t	‚t
|j|ƒ dS )z$Check that priors accept array-like.r$   rx   N)r	   r   r.   r¦   r§   Ú
isinstancer~   r5   Zndarrayr9   r   )rÈ   ry   r>   rD   rD   rE   Útest_qda_prior_type)  s    ÿ þrÌ   c                  C   sR   t  ddg¡} t| d� tt¡}t|j|jƒ d| d< |jd |jd ksNt	‚dS )zCCheck that altering `priors` without `fit` doesn't change `priors_`r$   rx   gš™™™™™É?r   N)
r5   ro   r	   r.   r/   r0   r   r~   ry   r9   )ry   ZqdarD   rD   rE   Útest_qda_prior_copy4  s
    rÍ   c                  C   s„   t ƒ  tt¡} t| dƒrt‚t dd� tt¡} t| dƒs<t‚t| jd t 	ddgddgg¡ƒ t| jd t 	dd	gd	d
gg¡ƒ d S )Nrq   T)ra   r   gffffffæ?r{   r   gÚÁQUUÕ?gÚÁQUUÕ¿g“vWUUå?)
r	   r.   r¦   r§   r¨   r9   r   rq   r5   ro   )r>   rD   rD   rE   Útest_qda_store_covarianceA  s    "þrÎ   c               	   C   sò   d} t ƒ }tjt| d�� | tt¡}W 5 Q R X tjtdd�� | t¡}W 5 Q R X t	 
|tk¡sft‚t dd�}tjt| d�� | tt¡ W 5 Q R X | t¡}t|tƒ t dd�}tjt| d�� | tt¡ W 5 Q R X | t¡}t|tƒ d S )NzVariables are collinearr+   zdivide by zerorn   )Z	reg_paramr)   )r	   r:   r|   r}   r.   ÚX2r§   ÚRuntimeWarningr1   r5   r8   r9   r   ÚX5Úy5)Zcollinear_msgr>   r?   Zy_pred5rD   rD   rE   Útest_qda_regularizationR  s"    




rÓ   c                  C   st   t ddddd�\} }t | t | jd d ¡ | jd | jd ¡¡} t| dƒ}t||jƒ t| dƒ}t||jƒ d S )	Nr_   r˜   r   r`   r‚   r   Z	empiricalr   )	r   r5   rd   r›   r‹   r™   r
   r   r�   )r¤   r0   Zc_eZc_srD   rD   rE   Útest_covariancev  s    0

rÔ   c              	   C   sX   t  ddgddgg¡}t  ddg¡}t| d�}tjtdd�� | ||¡ W 5 Q R X dS )	zg
    Tests that if the number of samples equals the number
    of classes, a ValueError is raised.
    r$   rz   ÚaÚbr„   z"The number of samples must be morer+   N)r5   ro   r   r:   r;   r=   r.   )r"   r/   r0   r>   rD   rD   rE   Ú=test_raises_value_error_on_same_number_of_classes_and_samplesƒ  s
    
r×   c                     sT   t ƒ  tt¡} |  ¡ }d ¡ ‰ tj‡ fdd„t| j	j
d ƒD ƒtd�}t||ƒ dS )z6Check get_feature_names_out uses class name as prefix.r   c                    s   g | ]}ˆ › |› �‘qS rD   rD   )rK   Úi©Zclass_name_lowerrD   rE   rQ   ˜  s   ÿz.test_get_feature_names_out.<locals>.<listcomp>r   r   N)r   r.   r/   r0   Zget_feature_names_outÚlowerr5   ro   rW   r•   r‹   Úobjectr   )ZestZ	names_outZexpected_names_outrD   rÙ   rE   Útest_get_feature_names_out�  s    
þûrÜ   )JÚnumpyr5   r:   Zscipyr   Zsklearn.clusterr   Zsklearn.covariancer   r   r   Zsklearn.datasetsr   Zsklearn.discriminant_analysisr   r	   r
   Zsklearn.preprocessingr   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r   r   r   ro   r/   r0   r7   r2   r¦   r§   rÃ   rÂ   rÏ   rÄ   Zc_r›   ZzerosrÑ   rÒ   r-   rF   ÚmarkZparametrizerw   r€   rˆ   rŒ   r—   r    r¥   r©   rW   r°   r¸   r»   r¿   rÀ   Zint32Zint64r¾   rÁ   rÅ   rÇ   rÌ   rÍ   rÎ   rÓ   rÔ   r×   rÜ   rD   rD   rD   rE   Ú<module>   s˜   	2þ8ÿ.8ÿ÷?^)




üþ	


$
