U
    9%eY                     @   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/Darija-Ai-API/env/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  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st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   {Gz?)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st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rtt | ddtt}t|dstt|jt	ddgddgg d S )
N)r   r   r   rq   T)r"   ra   gil?gam?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 qd 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st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տgv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?^)




	


$
