
    {Kg*                        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 ddlmZmZmZ d$dZd Zej<                  j?                  dddg      d        Z d Z!d Z"d Z#d$dZ$ej<                  j?                  dg d      d        Z%ej<                  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)ej<                  jU                  d!      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)
GroupKFold)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   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                       q/home/alanp/www/video.onchill/myenv/lib/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$F!0d%f"D%  DL!E&M hhuo//OE8A:!"''%.%8 % 	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   M   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]   Y   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   d   s     HH9999		
E XX8798		
F 	!!A"1%G #G3UQWX	T!#u-!$/ !rK   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 #G3UQWX	T!#y1!$
3 !rK   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	/D;??B 
0	/	/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                  |      }t        || ||       y )Nr#   rv      r   r   r   r   r   r   r   r   cvr}   n_refinementsr;   n_splitsr   n_alphas)r+   r.   rP   r   r*   r   r1   !_assert_graphical_lasso_cv_scores)splitsr   r   r   r   r<   r;   s          rI   test_graphical_lasso_cv_scoresr      s    FHMxx    		
H ))


"C\xcJA
fX]
S
W
W	C &#	rK   enable_slep006c                    d}d}d}t        j                  g dg dg dg dg      }t         j                  j                  |       }|j	                  g d|d	      }|j
                  d
   }|j                  d
d|      }d|i}	t        |      }
|
j                  d        t        |
||      j                  |fi |	}t        ||||       y)zVCheck that `GraphicalLassoCV` internally dispatches metadata to
    the splitter.
    rv   r   r   r   r   r   r   i,  r   r   groups)r   T)r   r   r   N)r+   r.   rP   r   r*   shaperandintr   set_split_requestr   r1   r   )global_random_seedr   r   r   r   r   r<   r9   r   paramsr   r;   s               rI   +test_graphical_lasso_cv_scores_with_routingr   
  s    
 FHMxx    		
H ))

 2
3C\xcJA
I[[Ay)FF	V	$B%
S
b
O
S
S	C &#	rK   c                    | 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(   r}   split_test_scorer   )axismean_test_scorestd_test_score)cv_results_rangelenr+   asarrayr4   stdr   )r;   r   r   r   
cv_resultstotal_alphaskeysi
split_keyskey	cv_scoresexpected_meanexpected_stds                rI   r   r   .  s    J !8+a/L:D27/B/QE!K(/JBj j   :c?#|333 ! 

JGJSCOOC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   sklearn.covariancer   r   r	   r
   sklearn.datasetsr   sklearn.model_selectionr   sklearn.utilsr   sklearn.utils._testingr   r   r   rJ   rT   markparametrizer]   rl   rp   ry   r   r   
ValueError	TypeErrorr   r   usefixturesr   r    rK   rI   <module>r      s6   & 
    )    4 . , .2b	7 $0 1064;@!$ 02LM? N?( 

M2
TJ.
	y*HICC(4 )*  + FErK   