U
    ^»{jý'  ã                   @   sH  d Z ddlZddlmZ 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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 d/dd„Zdd„ Zej dddg¡dd„ ƒZdd„ Zdd„ Z dd„ Z!d0dd„Z"ej dddd g¡d!d"„ ƒZ#ej d#d$d%ge$d&fdd%ge$d&fd'd%ge%d(fg¡d)d*„ ƒZ&d+d,„ Z'd-d.„ Z(dS )1z" Test the graphical_lasso module.
é    N)ÚStringIO)Úassert_allclose)Úlinalg)Údatasets)ÚGraphicalLassoÚGraphicalLassoCVÚempirical_covarianceÚgraphical_lasso)Úmake_sparse_spd_matrix)Úcheck_random_state)Ú_convert_containerÚassert_array_almost_equalÚassert_array_lessé   c                 C   st  d}d}t | ƒ} t|d| d�}t |¡}| jt |¡||d�}t|ƒ}dD ]”}tƒ }tƒ }	dD ]R}
t	|d||
d	�\}}}|||
< ||	|
< t 
|¡j\}}|d
ks^tt |¡dƒ q^t|d |d dd� t|	d |	d dd� qJtdd� |¡}| |¡ t|j|d dd� t|j|d dd� || d
¡ }tƒ }dD ]"}t|d� |¡j}| |¡ �q:t|d
 |d ƒ dS )zºTest the graphical lasso solvers.

    This checks is unstable for some random seeds where the covariance found with "cd"
    and "lars" solvers are different (4 cases / 100 tries).
    é   éd   çffffffî?©ÚalphaÚrandom_state©Úsize)ç        çš™™™™™¹?ç      Ð?©ÚcdÚlarsT)Úreturn_costsr   Úmoder   gê-�™—q=r   r   g-Cëâ6?)Zatolr   ©r   é   ©Údecimal)FT©Úassume_centeredr   N)r   r
   r   ÚinvÚmultivariate_normalÚnpÚzerosr   Údictr	   ÚarrayÚTr   Údiffr   r   ÚfitZscorer   Zcovariance_ÚmeanÚlistÚ
precision_Úappend)r   ÚdimÚ	n_samplesÚprecÚcovÚXÚemp_covr   ZcovsZicovsÚmethodZcov_Zicov_ZcostsZdual_gapÚmodelÚZZprecsr%   Zprec_© r<   úl/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/covariance/tests/test_graphical_lasso.pyÚtest_graphical_lassos   sD    
   ÿ
r>   c                  C   sf   t j dd¡} t| dd�}tddd� |¡}t|jt j 	|¡ƒ t
|dd�\}}t|t j 	|¡ƒ d	S )
z;Test graphical_lasso's early return condition when alpha=0.r   é
   Tr$   r   Zprecomputed)r   Z
covariancer    N)r(   ÚrandomZrandnr   r   r.   r   r1   r   r&   r	   )r7   r8   r:   Ú_Ú	precisionr<   r<   r=   Ú(test_graphical_lasso_when_alpha_equals_0L   s    rC   r   r   r   c                 C   sD   t jdddd�\}}t|ƒ}t|d| ddd�\}}}|dks@t‚d S )	Niˆ  r   r   )r4   Z
n_featuresr   çš™™™™™É?é   T)r   Zmax_iterZreturn_n_iter)r   Zmake_classificationr   r	   ÚAssertionError)r   r7   rA   r8   Zn_iterr<   r<   r=   Útest_graphical_lasso_n_iterX   s        ÿrG   c               	   C   s¬   t  ddddgddddgddddgddddgg¡} t  d	dd
dgddddgd
dddgddddgg¡}t ¡ j}t|ƒ}dD ],}t|dd|d�\}}t|| ƒ t||ƒ qzd S )NgJSoÓÀËå?r   g¥Ú§ã1Ñ?g¾¥{!<™?g-ªêŠ¾'È?gî[­—Ã@g˜ˆ·Î¿]Ò?çóÞÿdßwâ?glåÊE!Nø?g¦',ñ€²À¿g5ÒRy;2@gŽg†C%dÖ?gXéIô�Å¿g—Ìvý?r   g      ð?F©r   r   r   ©r(   r+   r   Ú	load_irisÚdatar   r	   r   )Úcov_RÚicov_Rr7   r8   r9   r6   Úicovr<   r<   r=   Útest_graphical_lasso_irisc   s(    



üÿ



üÿ

rP   c                  C   s„   t  ddgddgg¡} t  ddgddgg¡}t ¡ jd d …dd …f }t|ƒ}dD ],}t|d	d
|d�\}}t|| ƒ t||ƒ qRd S )Ng×ê–Ã@gŒHZÖýò?rH   gÃÉ‰¸1tø?gO{Ì“%	Àg¸4#(#e @rE   r   r   FrI   rJ   )Z	cov_skggmZ
icov_skggmr7   r8   r9   r6   rO   r<   r<   r=   Útest_graph_lasso_2D~   s    
rQ   c               	   C   sÌ   t  dd¡} t  ddddgdddd	gd
dddgdddd	gg¡}t  ddddgddddgddddgddddgg¡}t ¡ j| d d …f }t|ƒ}dD ]4}t|dd|d�\}}t||dd � t||dd � q’d S )!Nr?   é   g{®Gáz´?gtì<­i­?g­üªÈÑb?gHâŽWµY?gÕ«rûƒµ?gHýç´�Nk?gÛ¨šxV4b?gå¢ÈÑb?gè`Ü´�Nk?gR*è´�N{?gLÆgö×�?g:glWµY?gEë’xV4b?gR§°%l8@gƒ¯,ôèÔ0Àr   gŸ¹éÔ0ÀgÁCáKZ8@gû‘°ÜÓÀg      )ÀgTs —ÜÓÀgìGÂrO#c@gm>ãÿÿ(Àg     è|@r   g{®Gáz„?FrI   é   r"   )	r(   Zaranger+   r   rK   rL   r   r	   r   )ÚindicesrM   rN   r7   r8   r9   r6   rO   r<   r<   r=   Ú"test_graphical_lasso_iris_singularŒ   s4    



üÿ



üÿ   ÿ
rU   c                 C   sr   d}d}t | ƒ} t|d| d�}t |¡}| jt |¡||d�}tj}z t	ƒ t_t
dddd� |¡ W 5 |t_X d S )	NrS   é   g¸…ëQ¸î?r   r   r   r   )ÚverboseÚalphasÚtol)r   r
   r   r&   r'   r(   r)   ÚsysÚstdoutr   r   r.   )r   r3   r4   r5   r6   r7   Zorig_stdoutr<   r<   r=   Útest_graphical_lasso_cv¬   s    
r\   Úalphas_container_typer0   Útupler+   c              	   C   s|   t  ddddgddddgddddgddddgg¡}t j d¡}|jddddg|d	d
�}tddg| ƒ}t|ddd� |¡ dS )z’Check that we can pass an array-like to `alphas`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/22489
    çš™™™™™é?r   rD   çš™™™™™Ù?ç333333Ó?r   çffffffæ?r   éÈ   ©r/   r6   r   g{®Gáz”?ç¸…ëQ¸ž?r   ©rX   rY   Zn_jobsN)r(   r+   r@   ÚRandomStater'   r   r   r.   )r]   Útrue_covÚrngr7   rX   r<   r<   r=   Ú'test_graphical_lasso_cv_alphas_iterable¾   s    



üÿrj   zalphas,err_type,err_msgg{®Gáz”¿re   zmust be > 0Z
not_numberzmust be an instance of floatc              	   C   sˆ   t  ddddgddddgddddgddddgg¡}t j d¡}|jddddg|d	d
�}tj||d�� t| ddd� |¡ W 5 Q R X dS )z²Check that if an array-like containing a value
    outside of (0, inf] is passed to `alphas`, a ValueError is raised.
    Check if a string is passed, a TypeError is raised.
    r_   r   rD   r`   ra   r   rb   r   rc   rd   ©Úmatchr   rf   N)	r(   r+   r@   rg   r'   ÚpytestZraisesr   r.   )rX   Zerr_typeÚerr_msgrh   ri   r7   r<   r<   r=   Ú,test_graphical_lasso_cv_alphas_invalid_arrayÓ   s    



üÿro   c               	      s"  d} d}d}t  ddddgddddgdddd	gddd	d
gg¡}t j d¡}|jddddg|dd�}t| ||d� |¡‰ ˆ j}|| d }dg}dd„ t| ƒD ƒ}	||	 D ]$}
|
|ks¸t	‚t
||
 ƒ|ks¨t	‚q¨t  ‡ fdd„|	D ƒ¡}|jdd�}|jdd�}tˆ jd |ƒ tˆ jd |ƒ d S )Nr!   rS   é   r_   r   rD   r`   ra   r   rb   r   rc   rd   )ZcvrX   Ún_refinementsr   rX   c                 S   s   g | ]}d |› d�‘qS )ÚsplitZ_test_scorer<   )Ú.0Úir<   r<   r=   Ú
<listcomp>  s     z2test_graphical_lasso_cv_scores.<locals>.<listcomp>c                    s   g | ]}ˆ j | ‘qS r<   )Úcv_results_)rs   Úkey©r6   r<   r=   ru     s     )ZaxisZmean_test_scoreZstd_test_score)r(   r+   r@   rg   r'   r   r.   rv   ÚrangerF   ÚlenZasarrayr/   Zstdr   )ZsplitsZn_alphasrq   rh   ri   r7   Z
cv_resultsZtotal_alphasÚkeysZ
split_keysrw   Z	cv_scoresZexpected_meanZexpected_stdr<   rx   r=   Útest_graphical_lasso_cv_scoresï   s6    



üÿÿr|   c               	   C   sz   t j d¡dd  } }}t|ddd�}t |¡}| jt  |¡||d�}t|ƒ}t	j
tdd�� t|d	|d
� W 5 Q R X dS )z[Check that we raise a deprecation warning if providing `cov_init` in
    `graphical_lasso`.r   r   r   r   r   r   z cov_init parameter is deprecatedrk   r   )r   Zcov_initN)r(   r@   rg   r
   r   r&   r'   r)   r   rm   ZwarnsÚFutureWarningr	   )ri   r3   r4   r5   r6   r7   r8   r<   r<   r=   Ú)test_graphical_lasso_cov_init_deprecation  s    
r~   )r   )r   ))Ú__doc__rZ   Úior   Únumpyr(   rm   Znumpy.testingr   Zscipyr   Zsklearnr   Zsklearn.covariancer   r   r   r	   Zsklearn.datasetsr
   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r   r>   rC   ÚmarkZparametrizerG   rP   rQ   rU   r\   rj   Ú
ValueErrorÚ	TypeErrorro   r|   r~   r<   r<   r<   r=   Ú<module>   s>   
1

 

ýþ
%