
    Ug*                         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                            dddg          d             Z d Z!d Z"d Z#d%dZ$ej                            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              Z(d! Z)ej        *                    d"          d#             Z+d$ Z,dS )&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_less   c                 d   d}d}t          |           } t          |d|           }t          j        |          }|                     t          j        |          ||          }t          |          }dD ]}t                      }t                      }	dD ]g}
t          |d||
	          \  }}}|||
<   ||	|
<   t          j
        |          j        \  }}|d
k    s"t          t          j        |          d           ht          |d         |d         d           t          |	d         |	d         d           t          d                              |          }|                    |           t%          |j        |d         d           t%          |j        |d         d           ||                    d
          z
  }t+                      }dD ]?}t          |                              |          j        }|                    |           @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@?)atolr   r      decimal)FTassume_centeredr   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                       l/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/covariance/tests/test_graphical_lasso.pytest_graphical_lassosrJ      s0    CI%l33L!#TMMMD
*T

C((#)(LLA"1%%G! ? ?vv$ 
	9 
	9F!0d%f" " "D%  DL!E&M huoo/OE8A::!"'%..%888T
DLt<<<<dU6]>>>>> &&&**1--E	KKNNNe/dQGGGGe/fqIIII 	
AFF1IIAFFE(  ???CCAFFQUeAha11111    c                     t           j                            dd          } t          | d          }t	          dd                              |          }t          |j        t           j        	                    |                     t          |d          \  }}t          |t           j        	                    |                     d	S )
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'JJEE$bimmG&<&<==="7!444LAyIry}}W5566666rK   r!   r   r   c                     t          j        ddd          \  }}t          |          }t          |d| dd          \  }}}|dk    sJ d S )	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   sc    '%BUVWWWDAq"1%%G"4!4  LAq& Q;;;;;;rK   c                  J   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 ]8}t          |d
d|          \  }}t          ||            t          ||           9d S )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     H999999999999		
 E X888777999888		
 F 	!A"1%%G  0 0#G3UQWXXX	T!#u---!$////0 0rK   c                  J   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 ]8}t          |d	d
|          \  }}t          ||            t          ||           9d S )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JJIJ4{J6OPQQJ!!!!QRR%(A"1%%G  4 4#G3UQWXXX	T!#y111!$
33334 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 ]<}t          |dd|          \  }}t          ||d           t          ||d           =d S )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#    iBG HFFFPPPPPPPPP		
 E X222===333,,,		
 F 	!'111*-A"1%%G  ; ;#4e&
 
 
	T 	"#ua8888!$:::::; ;rK   c                    d}d}t          |           } t          |d|           }t          j        |          }|                     t          j        |          ||          }t          j        }	 t                      t          _        t          ddd                              |           |t          _        d S # |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33L!#TMMMD
*T

C((#)(LLA*K!ZZ
QD999==a@@@ 


[
    s   1=B< <C
alphas_container_type)r5   tupler.   c                 &   t          j        g dg dg dg dg          }t           j                            d          }|                    g d|d          }t          d	d
g|           }t          |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   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      s     x            		
 H )


"
"C\\\xcJJAt.CDDFFQ777;;A>>>>>rK   zalphas,err_type,err_msgg{Gzr   zmust be > 0
not_numberzmust be an instance of floatc                 `   t          j        g dg dg dg dg          }t           j                            d          }|                    g d|d          }t          j        ||	          5  t          | d
d                              |           ddd           dS # 1 swxY w 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.
    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#    x            		
 H )


"
"C\\\xcJJA	xw	/	/	/ C CD;;;??BBBC C C C C C C C C C C C C C C C C Cs   0&B##B'*B'c                  4   d} d}d}t          j        g dg dg dg dg          }t           j                            d          }|                    g d	|d
          }t          | ||                              |          }t          || ||           d S )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x            		
 H )


"
"C\\\xcJJA
fX]
S
S
S
W
W	 C &#	     rK   enable_slep006c                    d}d}d}t          j        g dg dg dg dg          }t           j                            |           }|                    g d|d	          }|j        d
         }|                    d
d|          }d|i}	t          |          }
|
                    d            t          |
||          j
        |fi |	}t          ||||           dS )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   
  s7   
 FHMx            		
 H )

 2
3
3C\\\xcJJA
I[[Ay))FF	V	$	$	$B%%%
S
b
O
O
O
S	  C &#	     rK   c                      j         }||z  dz   }dg}d t          |          D             }||z   D ]#}||v sJ t          ||                   |k    sJ $t          j         fd|D                       }	|	                    d          }
|	                    d          }t           j         d         |
           t           j         d         |           d S )	Nr   r}   c                     g | ]}d | d	S )split_test_score ).0is     rI   
<listcomp>z5_assert_graphical_lasso_cv_scores.<locals>.<listcomp>4  s$    BBBQ(!(((BBBrK   c                 *    g | ]}j         |         S r   )cv_results_)r   keyr;   s     rI   r   z5_assert_graphical_lasso_cv_scores.<locals>.<listcomp>9  s     GGGSCOC0GGGrK   r   )axismean_test_scorestd_test_score)r   rangelenr+   asarrayr4   stdr   )r;   r   r   r   
cv_resultstotal_alphaskeys
split_keysr   	cv_scoresexpected_meanexpected_stds   `           rI   r   r   .  s    J !8+a/L:DBB%//BBBJj  4 4j    :c?##|33333
GGGGJGGGHHINNN**M==a=((LCO$56FFFCO$45|DDDDDrK   )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   r   rK   rI   <module>r      s   & & 



            ) ) ) ) ) )                        4 3 3 3 3 3 . . . . . . , , , , , ,         .2 .2 .2 .2b	7 	7 	7 $00  100 0 064 4 4; ; ;@! ! ! !$ 02L2L2LMM? ? NM?( 

M2
TJ.
	y*HI C C C(  4 )**    +* FE E E E ErK   