U
    ½mœd$b  ã                   @   sT  d dl Zd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl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 !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¡Z0dd d!d"d#d$d%d&d'g	Z1d(d)„ Z2ej3 4d*ddg¡ej3 4d+d,d-d.g¡d/d0„ ƒƒZ5d1d2„ Z6d3d4„ Z7d5d6„ Z8d7d8„ Z9d9d:„ Z:d;d<„ Z;d=d>„ Z<ej3 4d?e=d@ƒ¡dAdB„ ƒZ>dCdD„ Z?ej3 4dEddFg¡ej3 4d*dFdg¡dGdH„ ƒƒZ@ej3 4dIejAejAfejBejBfejCejBfejDejBfg¡dJdK„ ƒZEdLdM„ ZFdNdO„ ZGdPdQ„ ZHej3 4dRdSdTdUg¡dVdW„ ƒZIdXdY„ ZJdZd[„ ZKd\d]„ ZLd^d_„ ZMej3 4d+d,d-d.g¡d`da„ ƒZNdbdc„ ZOej3 4dddedfg¡dgdh„ ƒZPdS )ié    N)Úlinalg)Úclone)Úconfig_context)Úcheck_random_state)Úassert_array_equal)Úassert_array_almost_equal)Úassert_allclose)Úassert_almost_equal)Ú_convert_to_numpy)Ú_convert_container)Ú
make_blobs)ÚLinearDiscriminantAnalysis)ÚQuadraticDiscriminantAnalysis)Ú_cov)Úledoit_wolf)ÚKMeans)ÚShrunkCovariance)Ú
LedoitWolf)ÚStandardScaleréþÿÿÿéÿÿÿÿé   é   Ú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© rG   úa/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/tests/test_discriminant_analysis.pyÚtest_lda_predictK   sX    
$
û	  ÿý ÿ 
ÿrI   Ú	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ÚrngrG   rH   Ú
<listcomp>’   s   ÿzDtest_lda_predict_proba.<locals>.generate_dataset.<locals>.<listcomp>c                    s   g | ]}|gˆt ˆ ƒ  ‘qS rG   )rM   ©rN   Úclazz)rQ   rR   rG   rH   rT   ˜   s     )r   r8   ÚvstackÚzipÚhstackÚrangerM   )rR   rQ   ÚcovariancesÚrandom_stater2   r3   rG   rP   rH   Úgenerate_dataset�   s    þÿÿz0test_lda_predict_proba.<locals>.generate_datasetr   éöÿÿÿé(   iâÿÿÿé   é
   éd   i�_ é*   )rR   rQ   r[   r\   T)r%   Ústore_covariancer&   r,   )r*   r   r   ç      à¿iêÿÿÿé   c                 S   s   t  || t  | || ¡ ¡S )N)r8   r9   Údot)ÚsampleZcoefZ	interceptrV   rG   rG   rH   Ú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 rG   rG   rU   ©Úalpha_kÚ	alpha_k_0ri   rh   rG   rH   rT   Æ   s   ÿz5test_lda_predict_proba.<locals>.<listcomp>.<listcomp>)ÚfloatÚsumrZ   rU   ©rk   rl   ri   rJ   rh   rG   rH   rT   À   s   ô
þÿÿþÿz*test_lda_predict_proba.<locals>.<listcomp>c                    s   g | ]}ˆˆˆ ˆ|ƒ‘qS rG   rG   rU   rj   rG   rH   rT   Ú   s   ÿç{®Gáz„?)N)r8   ÚarrayrM   r   r1   r   Úmeans_Úcovariance_r   ÚinvrZ   Úappendrg   Únewaxisrn   rm   r=   Zapproxr<   r6   rY   )r%   rJ   r]   Zblob_centersZ	blob_stdsr2   r3   ÚldaÚ	precisionrV   ZprobZprob_refZ
prob_ref_2rG   ro   rH   Útest_lda_predict_probaŠ   sr    
$    ÿ
  ÿ þ$ÿ þÿ
óÿ
þÿÿþÿ  ÿry   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'   re   ©Úpriorszpriors must be non-negativer.   ç333333ã?çÍÌÌÌÌÌÜ?gš™™™™™á?r   )r8   rq   r   r=   r>   r@   r1   r2   r3   ÚwarnsÚUserWarningr   Úpriors_)r{   rA   ÚmsgZ
prior_normrG   rG   rH   Ú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è  é   ©rR   Ú
n_featuresrQ   r\   r   ©r%   r    r!   r   )r   r   r1   r   Úcoef_)r…   rJ   rR   r2   r3   Úclf_lda_svdZclf_lda_lsqrÚclf_lda_eigenrG   rG   rH   Ú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   r1   r2   r3   Ú	transformÚshaper<   r=   r>   r?   )rA   ZX_transformedr�   rG   rG   rH   Ú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   rb   )r_   é   )ÚlocÚscalerL   r   )r_   rK   r!   r†   ç      ð?)r   z/Unexpected length for explained_variance_ratio_r   )r8   ÚrandomÚRandomStateÚnormalÚrandintr   r1   r	   Úexplained_variance_ratio_rn   r�   r<   r   )Ústater2   r3   r‰   rˆ   rG   rG   rH   Ú!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’   )r8   rq   rv   ÚreshapeÚrepeatÚaranger�   r   r1   rŒ   Úsqrtrn   r	   rO   ÚTÚeyeÚabsrg   )ZmeansZscatterr2   r3   rA   Zmeans_transformedZd1Zd2rG   rG   rH   Útest_lda_orthogonalityG  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 )Nrb   iÒ  r   r   r   r^   r   ra   i'  )r   r    r!   r†   r’   zusing covariance: %s)	r8   r“   r”   ÚuniformrW   r   r1   Zscorer<   )ÚnrS   Úx1Zx2Úxr3   r%   rA   rG   rG   rH   Útest_lda_scalingp  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†   rs   T)r%   rd   g¦µil¯Û?g€aùómÁ¶?g	^á?r   )
r   r1   ÚX6Úy6Úhasattrr<   r   rs   r8   rq   )r%   rA   rG   rG   rH   Ú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   rK   Tr'   r    ©rd   r&   r%   )r&   ©rd   r-   r%   )r8   r“   r”   Úrandr–   r   r   r1   r   rr   rs   )r¬   rS   r2   r3   Úc1Úc2rG   rG   rH   Ú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_r8   rv   rs   )Úselfr2   ÚscZX_scÚsrG   rG   rH   r1   ·  s
    
,z7test_lda_ledoitwolf.<locals>.StandardizedLedoitWolf.fitN)Ú__name__Ú
__module__Ú__qualname__r1   rG   rG   rG   rH   ÚStandardizedLedoitWolf¶  s   r¹   r   rb   ra   r   )rb   rK   Tr"   r    r­   r®   )
r8   r“   r”   r¯   r–   r   r1   r   rr   rs   )r¹   rS   r2   r3   r°   r±   rG   rG   rH   Ú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   ra   r   )r‹   z#n_components cannot be larger than r.   )r   Zrandnr8   ZtilerZ   Úminr   r1   Úmaxr=   r>   r@   )
rJ   r…   rS   rR   r2   r3   Zmax_componentsr‹   rw   r�   rG   rG   rH   Ú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$   )	r0   r   r1   r2   Úastyper3   r‡   r   r<   )Z	data_typeÚexpected_typer%   r&   rA   rG   rG   rH   Ú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)   )r0   r   r1   r2   r¾   r8   Úfloat32r3   Úfloat64r   r‡   )r%   r&   Zclf_32Zclf_64r)   rG   rG   rH   Ú,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   r1   r¨   r©   r4   r   ÚX7r6   r7   r   r8   r9   Úy7r;   r<   r=   r>   r@   Úy4)rA   rB   rC   rD   rE   rF   rG   rG   rH   Ú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   rz   )	r   r1   r¨   r©   r4   r8   rn   rq   r<   )rA   rB   Zn_posÚnegZn_pos2rG   rG   rH   Útest_qda_priors"  s    rÉ   Úpriors_typeÚlistÚtuplerq   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'   rz   N)r   r   r1   r¨   r©   Ú
isinstancer€   r8   Úndarrayr<   r   )rÊ   r{   rA   rG   rG   rH   Ú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'   rz   gš™™™™™É?r   N)
r8   rq   r   r1   r2   r3   r   r€   r{   r<   )r{   ZqdarG   rG   rH   Útest_qda_prior_copy:  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 )Nrs   T)rd   r   gffffffæ?r}   r   gÚÁQUUÕ?gÚÁQUUÕ¿g“vWUUå?)
r   r1   r¨   r©   rª   r<   r   rs   r8   rq   )rA   rG   rG   rH   Útest_qda_store_covarianceG  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 zerorp   )Z	reg_paramr,   )r   r=   r~   r   r1   ÚX2r©   ÚRuntimeWarningr4   r8   r;   r<   r   ÚX5Úy5)Zcollinear_msgrA   rB   Zy_pred5rG   rG   rH   Útest_qda_regularizationX  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   r8   rg   r�   r�   r›   r   r	   rŸ   )r¦   r3   Zc_eZc_srG   rG   rH   Útest_covariance|  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'   r|   ÚaÚbr†   z"The number of samples must be morer.   N)r8   rq   r   r=   r>   r@   r1   )r%   r2   r3   rA   rG   rG   rH   Ú=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 rG   rG   )rN   Úi©Zclass_name_lowerrG   rH   rT   ž  s   ÿz.test_get_feature_names_out.<locals>.<listcomp>r   r   N)r   r1   r2   r3   Zget_feature_names_outÚlowerr8   rq   rZ   r—   r�   Úobjectr   )ZestZ	names_outZexpected_names_outrG   rÜ   rH   Útest_get_feature_names_out–  s    
þûrß   Úarray_namespaceznumpy.array_apizcupy.array_apic              
   C   s<  t  | ¡}| t¡}| t¡}tƒ }| tt¡ dd„ t|ƒ ¡ D ƒ}t	|ƒ}t
dd�� | ||¡ W 5 Q R X | ¡ D ]B\}}t||ƒ}	t|	dƒs˜t‚t|	|d�}
t||
|› d�dd	� qxd
}|D ]r}t||ƒtƒ}t
dd�� t||ƒ|ƒ}W 5 Q R X t|dƒ�st|› d�ƒ‚t||d�}t|||› d�dd	� qÄdS )zBCheck that the array_api Array gives the same results as ndarrays.c                 S   s"   i | ]\}}t |tjƒr||“qS rG   )rÍ   r8   rÎ   )rN   ÚkeyÚvaluerG   rG   rH   Ú
<dictcomp>²  s      z&test_lda_array_api.<locals>.<dictcomp>T)Zarray_api_dispatchZ__array_namespace__)Úxpz not the samegü©ñÒMbP?)r+   r*   )Zdecision_functionr4   r7   r6   rŒ   z" did not output an array_namespacez# did not the return the same resultr(   N)r=   ZimportorskipZasarrayr2   r:   r   r1   ÚvarsÚitemsr   r   Úgetattrrª   r<   r
   r   )rà   rä   ZX_xpZy_xprw   Zarray_attributesZlda_xprá   Ú	attributeZlda_xp_paramZlda_xp_param_npÚmethodsÚmethodÚresultZ	result_xpZresult_xp_nprG   rG   rH   Útest_lda_array_api§  sN    



ÿ
   ÿ ÿþürì   )QÚnumpyr8   r=   Zscipyr   Zsklearn.baser   Zsklearn._configr   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r   r	   Zsklearn.utils._array_apir
   r   Zsklearn.datasetsr   Zsklearn.discriminant_analysisr   r   r   Zsklearn.covariancer   Zsklearn.clusterr   r   r   Zsklearn.preprocessingr   rq   r2   r3   r:   r5   r¨   r©   rÅ   rÄ   rÒ   rÆ   Zc_r�   ZzerosrÔ   rÕ   r0   rI   ÚmarkZparametrizery   r‚   rŠ   rŽ   r™   r¢   r§   r«   rZ   r²   rº   r½   rÁ   rÂ   Zint32Zint64rÀ   rÃ   rÇ   rÉ   rÏ   rÐ   rÑ   rÖ   r×   rÚ   rß   rì   rG   rG   rG   rH   Ú<module>   s²   2þ8ÿ.8ÿ÷?^)




üþ	


$
