a
    h*                     @   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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 ddlmZmZmZ d2ddZdd Zej dddgdd Z!dd Z"dd Z#dd Z$d3ddZ%ej dg d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*ed,d-d.d/ Z+d0d1 Z,dS )4z Test the graphical_lasso module.    N)StringIO)assert_allclose)linalg)config_contextdatasets)GraphicalLassoGraphicalLassoCVempirical_covariancegraphical_lasso)make_sparse_spd_matrix)
GroupKFold)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 )zTest 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   gffffff?alpharandom_statesize)        皙?      ?cdlarsT)return_costsr   moder   g-q=r   r   gMb@?)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=   i/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/covariance/tests/test_graphical_lasso.pytest_graphical_lassos   s>    

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   r2   r   r'   r
   )r8   r9   r;   _	precisionr=   r=   r>   (test_graphical_lasso_when_alpha_equals_0M   s    rD   r    r   r   c                 C   sD   t jdddd\}}t|}t|d| ddd\}}}|dks@J d S )	Ni  r   r   )r5   Z
n_featuresr   皙?   T)r    Zmax_iterZreturn_n_iter)r   Zmake_classificationr	   r
   )r    r8   rB   r9   Zn_iterr=   r=   r>   test_graphical_lasso_n_iterY   s    
rG   c                  C   s   t g dg dg dg dg} t g dg dg dg dg}t j}t|}d	D ],}t|d
d|d\}}t||  t|| qZd S )N)gJSo?r   ڧ1?羥{!<?)r   g-ꊾ'?r   r   )rH   r   g[@瘈ο]?)rI   r   rJ   dw?)glE!N?r   ',r   )r   g5Ry;2@r   r   )rL   r   ggC%d?XIſ)r   r   rM   gv?r   g      ?Fr   r   r    r)   r,   r   	load_irisdatar	   r
   r   )cov_Ricov_Rr8   r9   r:   r7   icovr=   r=   r>   test_graphical_lasso_irisd   s(    

rU   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@gHZ?rK   gɉ1t?gO{̓%	g4#(#e @rF   r   r   FrN   rO   )Z	cov_skggmZ
icov_skggmr8   r9   r:   r7   rT   r=   r=   r>   test_graph_lasso_2D   s    
rV   c                  C   s   t dd} t g dg dg dg dg}t g dg dg d	g d
g}t j| d d f }t|}dD ]4}t|dd|d\}}t||dd t||dd qrd S )Nr@      )g{Gz?t<i?gb?gHWY?)rX   gիr?gH紁Nk?ۨxV4b?)gb?g`ܴNk?gR*贁N{?Lgם?)g:glWY?gExV4b?rZ   rY   )gR%l8@g,0r   r   )g0gCKZ8@gg      ))r   gTs gGrO#c@r   )r   gm>(r   g     |@r   g{Gz?FrN      r#   )	r)   Zaranger,   r   rP   rQ   r	   r
   r   )indicesrR   rS   r8   r9   r:   r7   rT   r=   r=   r>   "test_graphical_lasso_iris_singular   s.    
r]   c                 C   sx   d}d}t | } t|d| d}t|}| jt|||d}tj}z&t	 t_t
dddd| W |t_n|t_0 d S )	Nr[      gQ?r   r   r   r   )verbosealphastol)r   r   r   r'   r(   r)   r*   sysstdoutr   r   r/   )r   r4   r5   r6   r7   r8   Zorig_stdoutr=   r=   r>   test_graphical_lasso_cv   s    
rd   alphas_container_type)r1   tupler,   c                 C   sh   t g dg dg dg dg}t jd}|jg d|dd}td	d
g| }t|ddd| dS )zCheck that we can pass an array-like to `alphas`.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/22489
    g?r   rE   r   r   g?r   r   rE   r   g333333?r   r   r   r   gffffff?r   r   r   r   r      r0   r7   r   g{Gz?Q?r   r   r`   ra   Zn_jobsN)r)   r,   rA   RandomStater(   r   r   r/   )re   true_covrngr8   r`   r=   r=   r>   'test_graphical_lasso_cv_alphas_iterable   s    rs   zalphas,err_type,err_msgg{Gzrn   zmust be > 0Z
not_numberzmust be an instance of floatc                 C   s   t g dg dg dg dg}t jd}|jg d|dd}tj||d	$ t| d
dd| W d   n1 sz0    Y  dS )zCheck 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.
    rg   rh   ri   rj   r   rk   rl   rm   )matchr   r   ro   N)	r)   r,   rA   rp   r(   pytestZraisesr   r/   )r`   Zerr_typeerr_msgrq   rr   r8   r=   r=   r>   ,test_graphical_lasso_cv_alphas_invalid_array   s    rw   c                  C   sv   d} d}d}t g dg dg dg dg}t jd}|jg d	|d
d}t| ||d|}t|| ||d d S )Nr"   r[      rg   rh   ri   rj   r   rk   rl   rm   cvr`   n_refinementsr7   n_splitsr{   n_alphas)r)   r,   rA   rp   r(   r   r/   !_assert_graphical_lasso_cv_scores)splitsr~   r{   rq   rr   r8   r7   r=   r=   r>   test_graphical_lasso_cv_scores   s*    r   T)Zenable_metadata_routingc                 C   s   d}d}d}t g dg dg dg dg}t j| }|jg d|dd	}|jd
 }|d
d|}d|i}	t|d}
|
jdd t	|
||dj
|fi |	}t||||d dS )zVCheck that `GraphicalLassoCV` internally dispatches metadata to
    the splitter.
    r[   rx   rg   rh   ri   rj   rk   i,  rm   r   groups)r}   T)r   ry   r|   N)r)   r,   rA   rp   r(   shaperandintr   Zset_split_requestr   r/   r   )Zglobal_random_seedr   r~   r{   rq   rr   r8   r5   r   paramsrz   r7   r=   r=   r>   +test_graphical_lasso_cv_scores_with_routing
  s8    

r   c                    s    j }|| d }dg}dd t|D }|| D ]$}||v sBJ t|| |ks2J q2t fdd|D }	|	jdd}
|	jdd}t j d |
 t j d	 | d S )
Nr   r`   c                 S   s   g | ]}d | dqS )splitZ_test_scorer=   ).0ir=   r=   r>   
<listcomp>4      z5_assert_graphical_lasso_cv_scores.<locals>.<listcomp>c                    s   g | ]} j | qS r=   )cv_results_)r   keyr7   r=   r>   r   9  r   r   )ZaxisZmean_test_scoreZstd_test_score)r   rangelenr)   Zasarrayr0   Zstdr   )r7   r}   r{   r~   Z
cv_resultsZtotal_alphaskeysZ
split_keysr   Z	cv_scoresZexpected_meanZexpected_stdr=   r   r>   r   .  s    r   )r   )r   )-__doc__rb   ior   numpyr)   ru   Znumpy.testingr   Zscipyr   Zsklearnr   r   Zsklearn.covariancer   r   r	   r
   Zsklearn.datasetsr   Zsklearn.model_selectionr   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r   r?   rD   markZparametrizerG   rU   rV   r]   rd   rs   
ValueError	TypeErrorrw   r   r   r   r=   r=   r=   r>   <module>   sD   
1

 



#