o
    iX                     @   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 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j./dddgej./dg dd d! Z0d"d# Z1d$d% Z2d&d' Z3d(d) Z4d*d+ Z5d,d- Z6d.d/ Z7ej./d0e8d1d2d3 Z9d4d5 Z:ej./d6dd7gej./dd7dgd8d9 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@d=d> ZAd?d@ ZBdAdB ZCej./dCg dDdEdF ZDdGdH ZEdIdJ ZFdKdL ZGdMdN ZHej./dg ddOdP ZIdQdR ZJdS )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      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 ]n} | \}}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spJ d| qtddd}tt |tt W d    n1 sw   Y  td	d
t d}tjtdd |tt W d    n1 sw   Y  tdt d}tjtdd |tt W d    n1 sw   Y  td	tdddd}tt |tt W d    d S 1 sw   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 rC   w/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/tests/test_discriminant_analysis.pytest_lda_predictG   sX   
$
	"rE   	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 ]2}	 t |||	 |d  d d t jf  t d||	 |d  t jd d f   d  qat 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rngrC   rD   
<listcomp>   s    zDtest_lda_predict_proba.<locals>.generate_dataset.<locals>.<listcomp>c                    s   g | ]}|gt    qS rC   )rJ   rK   clazz)rO   rP   rC   rD   rR      s    )r   r5   vstackziphstackrangerJ   )rP   rO   covariancesrandom_stater/   r0   rC   rN   rD   generate_dataset   s   z0test_lda_predict_proba.<locals>.generate_datasetr   (   i   
   d   i_ *   )rP   rO   rY   rZ   T)r"   store_covariancer#   r)   )r'   r   r         i   c                 S   s"   t || t | ||   S N)r5   r6   dotitem)sampleZcoefZ	interceptrT   rC   rC   rD   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                       g | ]	} |qS rC   rC   rS   alpha_k	alpha_k_0ri   rh   rC   rD   rR          z5test_lda_predict_proba.<locals>.<listcomp>.<listcomp>)floatsumrX   rS   rl   rm   ri   rF   rh   rC   rD   rR      s    
z*test_lda_predict_proba.<locals>.<listcomp>c                    rj   rC   rC   rS   rk   rC   rD   rR      rn   {Gz?re   )r5   arrayrJ   r   r.   r   means_covariance_r   invrX   appendrf   newaxisrp   ro   r9   Zapproxr3   rW   )r"   rF   r[   Zblob_centersZ	blob_stdsr/   r0   lda	precisionrT   ZprobZprob_refZ
prob_ref_2rC   rq   rD   test_lda_predict_proba   sb   
$ 
$ 


r{   c                  C   s   t ddg} t| d}d}tjt|d |tt W d    n1 s&w   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 saw   Y  t|j|d	 d S )
Nr$   rc   priorszpriors must be non-negativer+   333333??g?r   )r5   rs   r   r9   r:   r<   r.   r/   r0   warnsUserWarningr   priors_)r}   r=   msgZ
prior_normrC   rC   rD   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     rP   
n_featuresrO   rZ   r   r"   r   r   r   )r   r   r.   r   coef_)r   rF   rP   r/   r0   clf_lda_svdZclf_lda_lsqrclf_lda_eigenrC   rC   rD   test_lda_coefs   s   



r   c                  C   s   t ddd} | ttt}|jd dksJ t ddd} | ttt}|jd dks0J t ddd} | tt d}tjt|d | t W d    d S 1 sVw   Y  d S )Nr   r   )r"   n_componentsr   r   z$transform not implemented for 'lsqr'r+   )	r   r.   r/   r0   	transformshaper9   r:   r;   )r=   ZX_transformedr   rC   rC   rD   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s4J dtdd	}||| t|j	 d
d |jj
dksRJ 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_rp   r   r   )stater/   r0   r   r   rC   rC   rD   !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   )r5   rs   rx   reshaperepeataranger   r   r.   r   sqrtrp   r   rM   Teyeabsrf   )ZmeansZscatterr/   r0   r=   Zmeans_transformedZd1Zd2rC   rC   rD   test_lda_orthogonalityC  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 ]}t|d
}|||||dksRJ d| q9d S )Nr`   i  r   r   r   )r\   r   r   )r_   r   r   )r   r`   i'  rG   r   r   zusing covariance: %s)r5   r   r   uniformrU   r   r.   Zscore)nrQ   x1Zx2xr0   r"   r=   rC   rC   rD   test_lda_scalingl  s   
&r   c                  C   s   dD ]2} t | dtt}t|dsJ t | ddtt}t|ds%J t|jtddgddgg qt d	dtt}t|drEJ t | ddtt}t|dsVJ t|jtddgddgg d S )
N)r   r   r   ru   T)r"   rb   gil?gam?g	^?r   )	r   r.   X6y6hasattrr   ru   r5   rs   )r"   r=   rC   rC   rD   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   rb   r#   r"   )r#   rb   r*   r"   )r5   r   r   randr   r   r   r.   r   rt   ru   )r   rQ   r/   r0   c1c2rC   rC   rD   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   rx   ru   )selfr/   scZX_scsrC   rC   rD   r.     s
   
,
z7test_lda_ledoitwolf.<locals>.StandardizedLedoitWolf.fitN)__name__
__module____qualname__r.   rC   rC   rC   rD   StandardizedLedoitWolf  s    r   r   r`   r_   r   )r`   rH   Tr   r   r   r   )
r5   r   r   r   r   r   r.   r   rt   ru   )r   rQ   r/   r0   r   r   rC   rC   rD   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}||| q*|d t|| d d fD ]&}t|d}d}	t	j
t|	d ||| W d    n1 sfw   Y  qEd S )Nr   r_   r   )r   z#n_components cannot be larger than r+   )r   Zrandnr5   ZtilerX   minr   r.   maxr9   r:   r<   )
rF   r   rQ   rP   r/   r0   Zmax_componentsr   ry   r   rC   rC   rD   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.   r/   astyper0   r   r   )Z	data_typeexpected_typer"   r#   r=   rC   rC   rD   test_lda_dtype_match  s
   
r   c                  C   sx   t D ]7\} }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&   rC   rC   rD   ,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sSJ tt | tt W d    d S 1 sjw   Y  d S )Nr   r$   r   )r	   r.   r   r   r1   r   X7r3   r4   r   r5   r6   y7r8   r9   r:   r<   y4)r=   r>   r?   r@   rA   rB   rC   rC   rD   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s7J d S )Nr   g|=r   r|   )r	   r.   r   r   r1   r5   rp   rs   )r=   r>   Zn_posnegZn_pos2rC   rC   rD   test_qda_priors  s   r   priors_type)listtuplers   c                 C   sF   ddg}t tddg| dtt}t|jtjsJ t	|j| dS )z$Check that priors accept array-like.r$   r|   N)
r	   r   r.   r   r   
isinstancer   r5   Zndarrayr   )r   r}   r=   rC   rC   rD   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s'J dS )zCCheck that altering `priors` without `fit` doesn't change `priors_`r$   r|   g?r   N)	r5   rs   r	   r.   r/   r0   r   r   r}   )r}   ZqdarC   rC   rD   test_qda_prior_copy6  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 )Nru   T)rb   r   gffffff?r   r   gQUU?gQUUտgvWUU?)	r	   r.   r   r   r   r   ru   r5   rs   )r=   rC   rC   rD   test_qda_store_covarianceC  s   "r   c                  C   sL  d} t  }tjtj| d |tt}W d    n1 sw   Y  |t}t	
|tks1J t dd}t  td W d    n1 sJw   Y  |tt |t}t|t t  }tjtj| d |tt W d    n1 s{w   Y  t dd}tjtj| d |tt W d    d S 1 sw   Y  d S )Nz2The covariance matrix of class .+ is not full rankr+   rr   )Z	reg_paramerrorg333333?)r	   r9   r   r   ZLinAlgWarningr.   X2r   r1   r5   r8   warningscatch_warningssimplefilterr   X5y5)r   r=   r>   rC   rC   rD   test_qda_regularizationT  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   ra   r   r   Z	empiricalr   )	r   r5   rf   r   r   r   r
   r   r   )r   r0   Zc_eZc_srC   rC   rD   test_covariancev  s   0

r   c                 C   sn   t ddgddgg}t ddg}t| d}tjtdd ||| W d   dS 1 s0w   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)r5   rs   r   r9   r:   r<   r.   )r"   r/   r0   r=   rC   rC   rD   =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 rC   rC   )rK   iZclass_name_lowerrC   rD   rR     s    
z.test_get_feature_names_out.<locals>.<listcomp>r   r   N)r   r.   r/   r0   Zget_feature_names_outlowerr5   rs   rX   r   r   objectr   )ZestZ	names_outZexpected_names_outrC   r   rD   test_get_feature_names_out  s   
r   )Kr   numpyr5   r9   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   rs   r/   r0   r7   r2   r   r   r   r   r   r   Zc_r   Zzerosr   r   r-   rE   markZparametrizer{   r   r   r   r   r   r   r   rX   r   r   r   r   r   Zint32Zint64r   r   r   r   r   r   r   r   r   r   r   rC   rC   rC   rD   <module>   s    2	8.8?^)





	

"
