a
    hwY                     @   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j01dddgej01dg d d!d" Z2d#d$ Z3d%d& Z4d'd( Z5d)d* Z6d+d, Z7d-d. Z8d/d0 Z9ej01d1e:d2d3d4 Z;d5d6 Z<ej01d7dd8gej01dd8dgd9d: Z=ej01d;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j01dDg dEdFdG ZFdHdI ZGdJdK ZHej0jIedLdMdNdO ZJdPdQ ZKej01d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 s0    Y  td	tdddd}tt |tt W d    n1 s0    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   d/var/www/html/assistant/venv/lib/python3.9/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  qt 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sJ 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   {Gz?)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 s0    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 s0    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sJ 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rJ t | ddtt}t|dsJ t|jtddgddgg d S )
N)r   r   r   rt   T)r#   rd   gil?gam?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    q1 s0    Y  qd 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sJ tt | tt W d    n1 s0    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տgv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 s0    Y  |tt |t}t|t t  }tjtj| d |tt W d    n1 s0    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?^)




	


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