
    0Ph*                        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 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d"#          d$             Z+d% Z,dS )'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_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                       m/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/covariance/tests/test_graphical_lasso.pytest_graphical_lassosrK      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   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'JJEE$bimmG&<&<==="7!444LAyIry}}W5566666rL   r"   r   r    c                     t          j        ddd          \  }}t          |          }t          |d| dd          \  }}}|dk    sJ d S )	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   sc    '%BUVWWWDAq"1%%G"4!4  LAq& Q;;;;;;rL   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[@瘈ο]?)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     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 0rL   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?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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 4rL   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 )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#    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!$:::::; ;rL   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)	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33L!#TMMMD
*T

C((#)(LLA*K!ZZ
QD999==a@@@ 


[
    s   1=B< <C
alphas_container_type)r6   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   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      s     x            		
 H )


"
"C\\\xcJJAt.CDDFFQ777;;A>>>>>rL   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/   rQ   r   r+   pytestraisesr	   r2   )r~   err_typeerr_msgr   r   r=   s         rJ   ,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%   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x            		
 H )


"
"C\\\xcJJA
fX]
S
S
S
W
W	 C &#	     rL   T)enable_metadata_routingc                    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.
    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   
  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 &#	     rL   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     rJ   
<listcomp>z5_assert_graphical_lasso_cv_scores.<locals>.<listcomp>4  s$    BBBQ(!(((BBBrL   c                 *    g | ]}j         |         S r   )cv_results_)r   keyr<   s     rJ   r   z5_assert_graphical_lasso_cv_scores.<locals>.<listcomp>9  s     GGGSCOC0GGGrL   r   )axismean_test_scorestd_test_score)r   rangelenr,   asarrayr5   stdr   )r<   r   r   r   
cv_resultstotal_alphaskeys
split_keysr   	cv_scoresexpected_meanexpected_stds   `           rJ   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DrL   )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   r   rL   rJ   <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rL   