
    -i*                        S r SSKrSSKJr  SSKrSSKrSSKJr  SSK	J
r
  SSKJrJr  SSKJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJrJrJr  S%S jrS r\R>                  RA                  SSS/5      S 5       r!S r"S r#S r$S%S jr%\R>                  RA                  S/ SQ5      S 5       r&\R>                  RA                  SSS/\'S4SS/\'S4SS/\(S4/5      S 5       r)S  r*\" S!S"9S# 5       r+S$ r,g)&z 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_lessc           	         SnSn[        U 5      n [        USU S9n[        R                  " U5      nU R	                  [
        R                  " U5      XBS9n[        U5      nS H  n[        5       n[        5       n	S Hc  n
[        USXzS	9u  pnXU
'   XU
'   [
        R                  " U5      R                  u  pUS
:X  a  MC  [        [
        R                  " U5      S5        Me     [        US   US   SS9  [        U	S   U	S   SS9  M     [        SS9R!                  U5      nUR#                  U5        [%        UR&                  WS   SS9  [%        UR&                  US   SS9  XUR)                  S
5      -
  n[+        5       nS H6  n[        US9R!                  U5      R,                  nUR/                  U5        M8     [%        US
   US   5        g)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@?)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                       `/var/www/html/venv/lib/python3.13/site-packages/sklearn/covariance/tests/test_graphical_lasso.pytest_graphical_lassosrK      s    CI%l3L!#TMD
**T
C((#(LA"1%G!v$F!0d%"D  L!&M hhuo//OEA:!"''%.%8 % 	T
DLt<dU6]>! "& &**1-E	KKNe//dQGe//fqI 	
FF1IAFE(?CCAFQQU ) eAha1    c                  Z   [         R                  R                  SS5      n [        U SS9n[	        SSS9R                  U5      n[        UR                  [         R                  R                  U5      5        [        USS9u  p4[        U[         R                  R                  U5      5        g	)
z;Test graphical_lasso's early return condition when alpha=0.r   
   Tr'   r   precomputed)r   
covariancer#   N)r,   randomrandnr
   r   r2   r   r7   r   r*   r   )r=   r>   rF   _	precisions        rJ   (test_graphical_lasso_when_alpha_equals_0rU   M   s{    
		R A"1d;G}=AA'JEE$$biimmG&<="7!4LAIryy}}W56rL   r!   r   r   c                 z    [         R                  " SSSS9u  p[        U5      n[        USU SSS9u    p$US:X  d   eg )	Ni  r   r   )r:   
n_featuresr   皙?   T)r!   max_iterreturn_n_iter)r   make_classificationr
   r   )r!   r=   rS   r>   n_iters        rJ   test_graphical_lasso_n_iterr^   Y   sJ    ''%BUVWDA"1%G"4!4LAq Q;;rL   c                  :   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[        R                  " 5       R                  n[        U5      nS	 H'  n[        US
SUS9u  pV[        XP5        [        Xa5        M)     g )N)gJSo?r   ڧ1?羥{!<?)r   g-ꊾ'?r   r   )r`   r   g[@瘈ο]?)ra   r   rb   dw?)glE!N?r   ',r   )r   g5Ry;2@r   r   )rd   r   ggC%d?XIſ)r   r   re   gv?r   g      ?Fr   r    r!   r,   r/   r   	load_irisdatar
   r   r   )cov_Ricov_Rr=   r>   rA   r<   icovs          rJ   test_graphical_lasso_irisrm   d   s     HH9999		
E XX8798		
F 	!!A"1%G #G3UQWX	!#-!$/ !rL   c                  4   [         R                  " SS/SS//5      n [         R                  " SS/SS//5      n[        R                  " 5       R                  S S 2SS 24   n[        U5      nS H'  n[        US	S
US9u  pV[        XP5        [        Xa5        M)     g )Ng@gHZ?rc   gɉ1t?gO{̓%	g4#(#e @rY   r   r   Frf   rg   )	cov_skggm
icov_skggmr=   r>   rA   r<   rl   s          rJ   test_graph_lasso_2Drq      s     :x08Z2HIJIJ4{J6OPQJ!!!QR%(A"1%G #G3UQWX	!#1!$3 !rL   c                  r   [         R                  " SS5      n [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  " / SQ/ SQ/ S	Q/ S
Q/5      n[        R                  " 5       R
                  U S S 24   n[        U5      nS H%  n[        USSUS9u  pg[        XaSS9  [        XrSS9  M'     g )NrN      )g{Gz?t<i?gb?gHWY?)rt   gիr?gH紁Nk?ۨxV4b?)gb?g`ܴNk?gR*贁N{?Lgם?)g:glWY?gExV4b?rv   ru   )gR%l8@g,0r   r   )g0gCKZ8@gg      ))r   gTs gGrO#c@r   )r   gm>(r   g     |@r   g{Gz?Frf      r%   )	r,   aranger/   r   rh   ri   r
   r   r   )indicesrj   rk   r=   r>   rA   r<   rl   s           rJ   "test_graphical_lasso_iris_singularrz      s     iiBG HHFPPP		
E XX2=3,		
F 	!!'1*-A"1%G #4e&
	 	"#a8!$: !rL   c                 ^   SnSn[        U 5      n [        USU S9n[        R                  " U5      nU R	                  [
        R                  " U5      XBS9n[        R                  n [        5       [        l        [        SSSS9R                  U5        U[        l        g ! U[        l        f = f)	Nrw      gQ?r   r   r   r   )verbosealphastol)r   r   r   r*   r+   r,   r-   sysstdoutr   r	   r2   )r   r9   r:   r;   r<   r=   orig_stdouts          rJ   test_graphical_lasso_cvr      s    
CI%l3L!#TMD
**T
C((#(LA**K!Z
QD9==a@ 
[
s   &-B B,alphas_container_type)r6   tupler/   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  R                  S5      nUR	                  / SQUSS9n[        S	S
/U 5      n[        USSS9R                  U5        g)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   rX   r   r   g?r   r   rX   r   g333333?r   r   r   r   gffffff?r   r   r   r   r      r5   r<   r   g{Gz?Q?r   r)   r~   r   n_jobsN)r,   r/   rQ   RandomStater+   r   r	   r2   )r   true_covrngr=   r~   s        rJ   'test_graphical_lasso_cv_alphas_iterabler      sx     xx    		
H ))


"C\xcJAt.CDFFQ7;;A>rL   zalphas,err_type,err_msgg{Gzr   zmust be > 0
not_numberzmust be an instance of floatc                 <   [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  R                  S5      nUR	                  / SQUSS9n[
        R                  " XS	9   [        U S
SS9R                  U5        SSS5        g! , (       d  f       g= f)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/   rQ   r   r+   pytestraisesr	   r2   )r~   err_typeerr_msgr   r   r=   s         rJ   ,test_graphical_lasso_cv_alphas_invalid_arrayr      s     xx    		
H ))


"C\xcJA	x	/D;??B 
0	/	/s   )B
Bc                     Sn SnSn[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  R                  S5      nUR	                  / S	QUS
S9n[        XUS9R                  U5      n[        UU UUS9  g )Nr$   rw      r   r   r   r   r   r   r   r   cvr~   n_refinementsr<   n_splitsr   n_alphas)r,   r/   rQ   r   r+   r	   r2   !_assert_graphical_lasso_cv_scores)splitsr   r   r   r   r=   r<   s          rJ   test_graphical_lasso_cv_scoresr      s    FHMxx    		
H ))


"C\xcJA
f]
S
W
W	C &#	rL   T)enable_metadata_routingc                    SnSnSn[         R                  " / SQ/ SQ/ SQ/ SQ/5      n[         R                  R                  U 5      nUR	                  / SQUSS	9nUR
                  S
   nUR                  S
SU5      nSU0n	[        US9n
U
R                  SS9  [        XUS9R                  " U40 U	D6n[        UUUUS9  g)zNCheck that `GraphicalLassoCV` internally dispatches metadata to
the splitter.
rw   r   r   r   r   r   r   i,  r   r   groups)r   T)r   r   r   N)r,   r/   rQ   r   r+   shaperandintr   set_split_requestr	   r2   r   )global_random_seedr   r   r   r   r   r=   r:   r   paramsr   r<   s               rJ   +test_graphical_lasso_cv_scores_with_routingr   
  s    
 FHMxx    		
H ))

 2
3C\xcJA
I[[Ay)FF	V	$B%
b
O
S
S	C &#	rL   c                    U R                   nX#-  S-   nS/n[        U5       Vs/ s H	  nSU S3PM     nnXh-    H  n	X;   d   e[        XI   5      U:X  a  M   e   [        R                  " U V	s/ s H  oR                   U	   PM     sn	5      n
U
R                  SS9nU
R                  SS9n[        U R                   S   U5        [        U R                   S   U5        g s  snf s  sn	f )	Nr)   r~   split_test_scorer   )axismean_test_scorestd_test_score)cv_results_rangelenr,   asarrayr5   stdr   )r<   r   r   r   
cv_resultstotal_alphaskeysi
split_keyskey	cv_scoresexpected_meanexpected_stds                rJ   r   r   .  s    J !+a/L:D27/B/QE!K(/JB    :?#|333 ! 

JGJSOOC0JGHINNN*M==a=(LCOO$56FCOO$45|D C
 Hs   C/C$)r)   )-__doc__r   ior   numpyr,   r   numpy.testingr   scipyr   sklearnr   r   sklearn.covariancer   r	   r
   r   sklearn.datasetsr   sklearn.model_selectionr   sklearn.utilsr   sklearn.utils._testingr   r   r   rK   rU   markparametrizer^   rm   rq   rz   r   r   
ValueError	TypeErrorr   r   r   r    rL   rJ   <module>r      s+   & 
    )  ,  4 . , .2b	7 $0 1064;@!$ 02LM? N?( 

M2
TJ.
	y*HICC(4 -  . FErL   