
    h$,f'                        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Zd Zej8                  j;                  dddg      d        Zd Zd Z d Z!d!dZ"ej8                  j;                  dg d      d        Z#ej8                  j;                  dddge$dfddge$dfddge%dfg      d        Z&d Z'd  Z(y)"z" 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_lessc                    d}d}t        |       } t        |d|       }t        j                  |      }| j	                  t        j                  |      ||      }t        |      }dD ]  }t               }t               }	dD ]f  }
t        |d||
	      \  }}}|||
<   ||	|
<   t        j                  |      j                  \  }}|d
k(  rHt        t        j                  |      d       h t        |d   |d   d       t        |	d   |	d   d        t        d      j!                  |      }|j#                  |       t%        |j&                  d   d       t%        |j&                  |d   d       ||j)                  d
      z
  }t+               }dD ]8  }t        |      j!                  |      j,                  }|j/                  |       : t%        |d
   |d          y)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   ffffff?alpharandom_statesize)        皙?      ?cdlarsT)return_costsr   moder   g-q=r   r   gMb@?)atolr   r      decimal)FTassume_centered   N)r   r   r   invmultivariate_normalnpzerosr	   dictr
   arrayTr   diffr   r   fitscorer   covariance_meanlist
precision_append)r   dim	n_samplespreccovXemp_covr   covsicovsmethodcov_icov_costsdual_gapmodelZprecsr'   prec_s                       Mlib/python3.12/site-packages/sklearn/covariance/tests/test_graphical_lasso.pytest_graphical_lassosrJ      s    CI%l3L!#TMD
**T
C((#)(LA"1%G! ?v$ 
	9F!0d%f"D%  DL!E&M hhuo//OE8A:!"''%.%8
	9 	T
DLt<dU6]>!?& &**1-E	KKNe//dQGe//fqI 	
AFF1IAFE( ?CCAFQQU eAha1    c                  n   t         j                  j                  dd      } t        | d      }t	        dd      j                  |      }t        |j                  t         j                  j                  |             t        |d      \  }}t        |t         j                  j                  |             y	)
z;Test graphical_lasso's early return condition when alpha=0.r   
   Tr&   r   precomputed)r   
covariancer"   N)r+   randomrandnr	   r   r1   r   r6   r   r)   r
   )r<   r=   rE   _	precisions        rI   (test_graphical_lasso_when_alpha_equals_0rT   L   s}    
		R A"1d;G}=AA'JEE$$biimmG&<="7!4LAyIryy}}W56rK   r    r   r   c                     t        j                  ddd      \  }}t        |      }t        |d| dd      \  }}}|dk(  sJ y )	Ni  r   r   )r9   
n_featuresr   皙?   T)r    max_iterreturn_n_iter)r   make_classificationr	   r
   )r    r<   rR   r=   n_iters        rI   test_graphical_lasso_n_iterr]   X   sN    ''%BUVWDAq"1%G"4!4LAq& Q;;rK   c                  <   t        j                  g dg dg dg dg      } t        j                  g dg dg dg dg      }t        j                         j                  }t        |      }d	D ],  }t        |d
d|      \  }}t        ||        t        ||       . y )N)gJSo?r   ڧ1?羥{!<?)r   g-ꊾ'?r   r   )r_   r   g[@瘈ο]?)r`   r   ra   dw?)glE!N?r   ',r   )r   g5Ry;2@r   r   )rc   r   ggC%d?XIſ)r   r   rd   gv?r   g      ?Fr   r   r    r+   r.   r   	load_irisdatar	   r
   r   )cov_Ricov_Rr<   r=   r@   r;   icovs          rI   test_graphical_lasso_irisrl   c   s     HH9999		
E XX8798		
F 	!!A"1%G  0#G3UQWX	T!#u-!$/0rK   c                  6   t        j                  ddgddgg      } t        j                  ddgddgg      }t        j                         j                  d d dd f   }t        |      }dD ],  }t        |d	d
|      \  }}t        ||        t        ||       . y )Ng@gHZ?rb   gɉ1t?gO{̓%	g4#(#e @rX   r   r   Fre   rf   )	cov_skggm
icov_skggmr<   r=   r@   r;   rk   s          rI   test_graph_lasso_2Drp   ~   s     :x08Z2HIJIJ4{J6OPQJ!!!QR%(A"1%G  4#G3UQWX	T!#y1!$
34rK   c                  ~   t        j                  dd      } t        j                  g dg dg dg dg      }t        j                  g dg dg d	g d
g      }t        j                         j
                  | d d f   }t        |      }dD ]0  }t        |dd|      \  }}t        ||d       t        ||d       2 y )NrM      )g{Gz?t<i?gb?gHWY?)rs   gիr?gH紁Nk?ۨxV4b?)gb?g`ܴNk?gR*贁N{?Lgם?)g:glWY?gExV4b?ru   rt   )gR%l8@g,0r   r   )g0gCKZ8@gg      ))r   gTs gGrO#c@r   )r   gm>(r   g     |@r   g{Gz?Fre      r$   )	r+   aranger.   r   rg   rh   r	   r
   r   )indicesri   rj   r<   r=   r@   r;   rk   s           rI   "test_graphical_lasso_iris_singularry      s     iiBG HHFPPP		
E XX2=3,		
F 	!!'1*-A"1%G  ;#4e&
	T 	"#ua8!$:;rK   c                 n   d}d}t        |       } t        |d|       }t        j                  |      }| j	                  t        j                  |      ||      }t        j                  }	 t               t        _        t        ddd      j                  |       |t        _        y # |t        _        w xY w)	Nrv      gQ?r   r   r   r   )verbosealphastol)r   r   r   r)   r*   r+   r,   sysstdoutr   r   r1   )r   r8   r9   r:   r;   r<   orig_stdouts          rI   test_graphical_lasso_cvr      s    
CI%l3L!#TMD
**T
C((#)(LA**K!Z
QD9==a@ 
[
s   +0B' 'B4alphas_container_type)r5   tupler.   c                    t        j                  g dg dg dg dg      }t         j                  j                  d      }|j	                  g d|d      }t        d	d
g|       }t        |dd      j                  |       y)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   rW   r   r   g?r   r   rW   r   g333333?r   r   r   r   gffffff?r   r   r   r   r      r4   r;   r   g{Gz?Q?r   r(   r}   r~   n_jobsN)r+   r.   rP   RandomStater*   r   r   r1   )r   true_covrngr<   r}   s        rI   'test_graphical_lasso_cv_alphas_iterabler      sx     xx    		
H ))


"C\xcJAt.CDFFQ7;;A>rK   zalphas,err_type,err_msgg{Gzr   zmust be > 0
not_numberzmust be an instance of floatc                 B   t        j                  g dg dg dg dg      }t         j                  j                  d      }|j	                  g d|d      }t        j                  ||	      5  t        | d
d      j                  |       ddd       y# 1 sw Y   yxY w)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.
    r   r   r   r   r   r   r   r   matchr   r(   r   N)	r+   r.   rP   r   r*   pytestraisesr   r1   )r}   err_typeerr_msgr   r   r<   s         rI   ,test_graphical_lasso_cv_alphas_invalid_arrayr      s     xx    		
H ))


"C\xcJA	xw	/ CD;??BC C Cs   .BBc                     d} d}d}t        j                  g dg dg dg dg      }t         j                  j                  d      }|j	                  g d	|d
      }t        | ||      j                  |      }|j                  }||z  dz   }dg}	t        |       D 
cg c]  }
d|
 d
 }}
|	|z   D ]  }||v sJ t        ||         |k(  rJ  t        j                  |D cg c]  }|j                  |    c}      }|j                  d      }|j                  d      }t        |j                  d   |       t        |j                  d   |       y c c}
w c c}w )Nr#   rv      r   r   r   r   r   r   r   r   )cvr}   n_refinementsr(   r}   split_test_score)axismean_test_scorestd_test_score)r+   r.   rP   r   r*   r   r1   cv_results_rangelenasarrayr4   stdr   )splitsn_alphasr   r   r   r<   r;   
cv_resultstotal_alphaskeysi
split_keyskey	cv_scoresexpected_meanexpected_stds                   rI   test_graphical_lasso_cv_scoresr      sm   FHMxx    		
H ))


"C\xcJA
fX]
S
W
W	C J !8+a/L:D27-@QE!K(@J@j  4j   :c?#|3334 

JGSCOOC0GHINNN*M==a=(LCOO$56FCOO$45|D A
 Hs   E#Ec                  p   t         j                  j                  d      dd}}} t        |dd      }t	        j
                  |      }| j                  t        j                  |      ||      }t        |      }t        j                  t        d      5  t        |d	|
       ddd       y# 1 sw Y   yxY w)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 deprecatedr   r   )r   cov_initN)r+   rP   r   r   r   r)   r*   r,   r	   r   warnsFutureWarningr
   )r   r8   r9   r:   r;   r<   r=   s          rI   )test_graphical_lasso_cov_init_deprecationr     s     ))//2BiC!#TBD
**T
CsCA"1%G	m+M	N >sW=> > >s   B,,B5)r(   ))__doc__r   ior   numpyr+   r   numpy.testingr   scipyr   sklearnr   sklearn.covariancer   r   r	   r
   sklearn.datasetsr   sklearn.utilsr   sklearn.utils._testingr   r   r   rJ   rT   markparametrizer]   rl   rp   ry   r   r   
ValueError	TypeErrorr   r   r    rK   rI   <module>r      s   
    )    4 , .2b	7 $0 1064;@!$ 02LM? N?( 

M2
TJ.
	y*HICC(!EJ
>rK   