a
    �ù»j\  ã                   @   s   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d�Ze g d¢¡Z e g d¢¡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 g d¢¡Z$e g d¢¡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 g d¢¡Z(ej)e *d¡e +d¡f Z,e g d¢¡Z-g d¢Z.dd„ Z/ej0 1dddg¡ej0 1dg d ¢¡d!d"„ ƒƒZ2d#d$„ Z3d%d&„ Z4d'd(„ Z5d)d*„ Z6d+d,„ Z7d-d.„ Z8d/d0„ Z9ej0 1d1e:d2ƒ¡d3d4„ ƒZ;d5d6„ Z<ej0 1d7dd8g¡ej0 1dd8dg¡d9d:„ ƒƒZ=ej0 1d;ej>ej>fej?ej?fej@ej?fejAej?fg¡d<d=„ ƒZBd>d?„ ZCd@dA„ ZDdBdC„ ZEej0 1dDg dE¢¡dFdG„ ƒZFdHdI„ ZGdJdK„ ZHej0jIedLdM�dNdO„ ƒZJdPdQ„ ZKej0 1dg d ¢¡dRdS„ ƒZLdTdU„ ZMdS )Vé    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            	      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J d| ƒ‚qtddd�}t t¡� | tt¡ W d   ƒ n1 �s0    Y  td	d
tƒ d�}tjtdd�� | tt¡ W d   ƒ n1 �sh0    Y  tdtƒ d�}tjtdd�� | tt¡ W d   ƒ n1 �s²0    Y  td	tddd�d�}t t¡� | tt¡ W d   ƒ n1 �sþ0    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   )Z
n_clustersZn_init)Úsolver_shrinkager   ÚfitÚXÚyÚpredictr   ÚX1Úpredict_probaÚpredict_log_probar   ÚnpÚexpÚy3ÚanyÚpytestÚraisesÚNotImplementedErrorr   Ú
ValueErrorr   r   )	Z	test_caser#   r$   ÚclfÚy_predÚy_pred1Úy_proba_pred1Úy_log_proba_pred1Úy_pred3© rD   úNE:\soccer\ml_env\Lib\site-packages\sklearn/tests/test_discriminant_analysis.pyÚtest_lda_predictH   sP    
$
û	,ÿý,ÿ,ÿ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ºJ ‚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)Ú.0Ú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   )rK   ©rL   Úclazz)rP   rQ   rD   rE   rS   •   ó    )r   r6   ÚvstackÚzipÚhstackÚrangerK   )rQ   rP   ÚcovariancesÚrandom_stater0   r1   rD   rO   rE   Úgenerate_datasetŠ   s    þÿÿz0test_lda_predict_proba.<locals>.generate_datasetr   éöÿÿÿé(   iâÿÿÿé   é
   éd   i�_ é*   )rQ   rP   r[   r\   T)r#   Ústore_covariancer$   r*   )r(   r   r   ç      à¿iêÿÿÿé   c                 S   s"   t  || t  | || ¡ ¡ ¡ S )N)r6   r7   ÚdotÚitem)ÚsampleZcoefZ	interceptrU   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   rT   ©Úalpha_kÚ	alpha_k_0rj   ri   rD   rE   rS   Ã   s   ÿz5test_lda_predict_proba.<locals>.<listcomp>.<listcomp>)ÚfloatÚsumrZ   rT   ©rl   rm   rj   rG   ri   rD   rE   rS   ½   s   ô
þÿÿþÿz*test_lda_predict_proba.<locals>.<listcomp>c                    s   g | ]}ˆˆˆ ˆ|ƒ‘qS rD   rD   rT   rk   rD   rE   rS   ×   s   ÿç{®Gáz„?)N)r6   ÚarrayrK   r   r/   r   Úmeans_Úcovariance_r   ÚinvrZ   Úappendrg   Únewaxisro   rn   r:   Zapproxr4   rY   )r#   rG   r]   Zblob_centersZ	blob_stdsr0   r1   ÚldaÚ	precisionrU   ZprobZprob_refZ
prob_ref_2rD   rp   rE   Útest_lda_predict_proba‡   sb    
$ ÿ
ÿþ$ÿ þÿ
óÿ
þÿÿþÿÿrz   c                  C   sÞ   t  ddg¡} t| d�}d}tjt|d�� | tt¡ W d   ƒ n1 sL0    Y  tddgd�}| tt¡ t  ddg¡} t  ddg¡}t| d�}t 	t
¡� | tt¡ W d   ƒ n1 sÂ0    Y  t|j|d	ƒ d S )
Nr%   re   ©Úpriorszpriors must be non-negativer,   ç333333ã?çÍÌÌÌÌÌÜ?gš™™™™™á?r   )r6   rr   r   r:   r;   r=   r/   r0   r1   ÚwarnsÚUserWarningr   Úpriors_)r|   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è  é   ©rQ   Ú
n_featuresrP   r\   r   ©r#   r   r   r   )r   r   r/   r   Úcoef_)r†   rG   rQ   r0   r1   Ú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s0J ‚t ddd�} |  tt¡ t¡}|jd dks`J ‚t ddd�} |  tt¡ d}tjt|d�� |  t¡ W d   ƒ n1 sª0    Y  d S )Nr   r   )r#   Ún_componentsr   r   z$transform not implemented for 'lsqr'r,   )	r   r/   r0   r1   Ú	transformÚshaper:   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shJ dƒ‚tdd	�}| ||¡ t|j 	¡ d
dƒ |jj
dks¤J dƒ‚t|j|jƒ d S )Nr   rb   )r_   é   )ÚlocÚscalerJ   r   )r_   rI   r   r‡   ç      ð?)r   z/Unexpected length for explained_variance_ratio_r   )r6   ÚrandomÚRandomStateÚnormalÚrandintr   r/   r   Úexplained_variance_ratio_ro   rŽ   r   )Ústater0   r1   rŠ   r‰   rD   rD   rE   Ú!test_lda_explained_variance_ratio'  s$    
þ
þÿrš   c               	   C   sz  t  g d¢g d¢g d¢g d¢g¡} t  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   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 )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“   )r6   rr   rw   ÚreshapeÚrepeatÚarangerŽ   r   r/   r�   Úsqrtro   r   rN   ÚTÚeyeÚabsrg   )ZmeansZscatterr0   r1   r>   Zmeans_transformedZd1Zd2rD   rD   rE   Útest_lda_orthogonalityD  s*    "úÿ6
$r¤   c                  C   sª   d} t j d¡}| dd| df¡g d¢ }| dd| df¡g d¢ }t  ||f¡g d¢ }dg|  dg|   }d	D ]2}t|d
�}| ||¡ ||¡dksrJ d| ƒ‚qrd S )Nrb   iÒ  r   r   r   )r^   r   r   )ra   r   r   )r   rb   i'  rH   r‡   r“   zusing covariance: %s)r6   r”   r•   ÚuniformrW   r   r/   Zscore)ÚnrR   Úx1Zx2Úxr1   r#   r>   rD   rD   rE   Útest_lda_scalingm  s    
r©   c                  C   sÎ   dD ]d} t | d� tt¡}t|dƒs(J ‚t | dd� tt¡}t|dƒsJJ ‚t|jt ddgddgg¡ƒ qt d	d� tt¡}t|dƒrŠJ ‚t | dd� tt¡}t|dƒs¬J ‚t|jt ddgddgg¡ƒ d S )
N)r   r   r‡   rt   T)r#   rd   g¦µil¯Û?g€aùómÁ¶?g	^á?r   )	r   r/   ÚX6Úy6Úhasattrr   rt   r6   rr   )r#   r>   rD   rD   rE   Útest_lda_store_covariance~  s"    ÿÿÿr­   Úseedra   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 )Nrb   ra   r   rI   Tr%   r   ©rd   r$   r#   )r$   ©rd   r+   r#   )r6   r”   r•   Úrandr—   r   r   r/   r   rs   rt   )r®   rR   r0   r1   Ú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_r6   rw   rt   )Úselfr0   Ú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   rb   ra   r   )rb   rI   Tr    r   r¯   r°   )
r6   r”   r•   r±   r—   r   r/   r   rs   rt   )r»   rR   r0   r1   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 ]L}t|d�}d}	t	j
t|	d�� | ||¡ W d   ƒ qŠ1 sÌ0    Y  qŠd S )Nr   ra   r   )rŒ   z#n_components cannot be larger than r,   )r   Zrandnr6   ZtilerZ   Úminr   r/   Úmaxr:   r;   r=   )
rG   r†   rR   rQ   r0   r1   Zmax_componentsrŒ   rx   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J ‚qd S )Nr"   )r.   r   r/   r0   Úastyper1   rˆ   r   )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/   r0   rÀ   r6   Úfloat32r1   Ú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¦J ‚t t¡� |  tt¡ W d   ƒ n1 sÒ0    Y  d S )Nr   r%   r   )r	   r/   rª   r«   r2   r   ÚX7r4   r5   r   r6   r7   Úy7r9   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snJ ‚d S )Nr   g»½×Ùß|Û=r   r{   )r	   r/   rª   r«   r2   r6   ro   rr   )r>   r?   Zn_posÚnegZn_pos2rD   rD   rE   Útest_qda_priors  s    rË   Úpriors_type)ÚlistÚtuplerr   c                 C   sF   ddg}t tddg| ƒd� tt¡}t|jtjƒs6J ‚t	|j|ƒ dS )z$Check that priors accept array-like.r%   r{   N)
r	   r   r/   rª   r«   Ú
isinstancer�   r6   Zndarrayr   )rÌ   r|   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sNJ ‚dS )zCCheck that altering `priors` without `fit` doesn't change `priors_`r%   r{   gš™™™™™É?r   N)	r6   rr   r	   r/   r0   r1   r   r�   r|   )r|   ZqdarD   rD   rE   Útest_qda_prior_copy7  s
    rÑ   c                  C   s„   t ƒ  tt¡} t| dƒrJ ‚t dd� tt¡} t| dƒs<J ‚t| jd t ddgddgg¡ƒ t| jd t dd	gd	d
gg¡ƒ d S )Nrt   T)rd   r   gffffffæ?r~   r   gÚÁQUUÕ?gÚÁQUUÕ¿g“vWUUå?)	r	   r/   rª   r«   r¬   r   rt   r6   rr   )r>   rD   rD   rE   Útest_qda_store_covarianceD  s    "þrÒ   zcno floating point exceptions, see https://github.com/numpy/numpy/pull/21895#issuecomment-1311525881)Úreasonc                  C   sL  d} t ƒ }tjtj| d�� | tt¡}W d   ƒ n1 s<0    Y  | t¡}t	 
|tk¡sbJ ‚t dd�}t ¡ � t d¡ W d   ƒ n1 s”0    Y  | tt¡ | t¡}t|tƒ t ƒ }tjtj| d�� | tt¡ W d   ƒ n1 sö0    Y  t dd�}tjtj| d�� | tt¡ W d   ƒ n1 �s>0    Y  d S )Nz2The covariance matrix of class .+ is not full rankr,   rq   )Z	reg_paramÚerrorg333333Ó?)r	   r:   r   r   ZLinAlgWarningr/   ÚX2r«   r2   r6   r9   ÚwarningsÚcatch_warningsÚsimplefilterr   ÚX5Úy5)r‚   r>   r?   rD   rD   rE   Útest_qda_regularizationU  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 )	Nrb   r›   r   rc   r…   r   Z	empiricalr    )	r   r6   rg   rŸ   rŽ   r�   r
   r   r¡   )r¨   r1   Zc_eZc_srD   rD   rE   Útest_covariance~  s    0

rÜ   c                 C   sl   t  ddgddgg¡}t  ddg¡}t| d�}tjtdd�� | ||¡ W d  ƒ n1 s^0    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)r6   rr   r   r:   r;   r=   r/   )r#   r0   r1   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   )rL   Úi©Zclass_name_lowerrD   rE   rS      s   ÿz.test_get_feature_names_out.<locals>.<listcomp>r   r   N)r   r/   r0   r1   Zget_feature_names_outÚlowerr6   rr   rZ   r˜   rŽ   Úobjectr   )ZestZ	names_outZexpected_names_outrD   rá   rE   Útest_get_feature_names_out˜  s    
þûrä   )NrÖ   Únumpyr6   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   Zsklearn.utils.fixesr   rr   r0   r1   r8   r3   rª   r«   rÇ   rÆ   rÕ   rÈ   Zc_rŸ   ZzerosrÙ   rÚ   r.   rF   ÚmarkZparametrizerz   rƒ   r‹   r�   rš   r¤   r©   r­   rZ   r´   r¼   r¿   rÃ   rÄ   Zint32Zint64rÂ   rÅ   rÉ   rË   rÐ   rÑ   rÒ   ZxfailrÛ   rÜ   rß   rä   rD   rD   rD   rE   Ú<module>   s’   2þ8ÿ.8ÿ?^)




üþ	


ý
"
