
    _nd!                        d Z ddl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 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 d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%dS ) z" Test the graphical_lasso module.
    N)linalg)assert_allclose)assert_array_almost_equal)assert_array_less)_convert_container)graphical_lassoGraphicalLassoGraphicalLassoCVempirical_covariance)make_sparse_spd_matrix)StringIO)check_random_state)datasetsc                 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 )N   d   gffffff?alpharandom_statesize)        皙?      ?cdlarsT)return_costsr   moder   r   r      decimalr   )r   )FT)assume_centered   )r   r   r   invmultivariate_normalnpzerosr   dictr   arrayTr   diffr   r	   fitscore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.11/site-packages/sklearn/covariance/tests/test_graphical_lasso.pytest_graphical_lassorF      s0   
CI%l33L!#TMMMD
*T

C((#)(LLA"1%%G! I Ivv$ 		5 		5F!0d%f" " "D%  DL!E&M huoo/OE8A::!"'%..!444!$t*d6lAFFFF!%+uV}aHHHHH &&&**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                  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   )rI   r   g[@瘈ο]?)rJ   r   rK   dw?)glE!N?r   ',r   )r   g5Ry;2@r   r   )rM   r   ggC%d?XIſ)r   r   rN   gv?r   g      ?Fr   r   r   r'   r*   r   	load_irisdatar   r   r   )cov_Ricov_Rr8   r9   r<   r7   icovs          rE   test_graphical_lasso_irisrV   E   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 0rG   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?rL   gɉ1t?gO{̓%	g4#(#e @   r   r   FrO   rP   )	cov_skggm
icov_skggmr8   r9   r<   r7   rU   s          rE   test_graph_lasso_2Dr[   `   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 4rG   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 )N
      )g{Gz?t<i?gb?gHWY?)r_   gիr?gH紁Nk?ۨxV4b?)gb?g`ܴNk?gR*贁N{?Lgם?)g:glWY?gExV4b?ra   r`   )gR%l8@g,0r   r   )g0gCKZ8@gg      ))r   gTs gGrO#c@r   )r   gm>(r   g     |@r   g{Gz?FrO      r!   )	r'   aranger*   r   rQ   rR   r   r   r   )indicesrS   rT   r8   r9   r<   r7   rU   s           rE   "test_graphical_lasso_iris_singularre   n   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!$:::::; ;rG   r$   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)	Nrb      gQ?r   r   r   r   )verbosealphastol)r   r   r   r%   r&   r'   r(   sysstdoutr   r
   r-   )r   r4   r5   r6   r7   r8   orig_stdouts          rE   test_graphical_lasso_cvrn      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)r1   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   皙?r   r   g?r   r   rs   r   g333333?r   r   r   r   gffffff?r   r   r   r   r      r0   r7   r   g{Gz?Q?r   r$   ri   rj   n_jobsN)r'   r*   randomRandomStater&   r   r
   r-   )ro   true_covrngr8   ri   s        rE   'test_graphical_lasso_cv_alphas_iterabler      s     x            		
 H )


"
"C\\\xcJJAt.CDDFFQ777;;A>>>>>rG   zalphas,err_type,err_msgg{Gzrz   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.
    rr   rt   ru   rv   r   rw   rx   ry   )matchr   r$   r{   N)	r'   r*   r}   r~   r&   pytestraisesr
   r-   )ri   err_typeerr_msgr   r   r8   s         rE   ,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                     d} d}d}t          j        g dg dg dg dg          }t           j                            d          }|                    g d	|d
          }t          | ||                              |          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    rb      rr   rt   ru   rv   r   rw   rx   ry   )cvri   n_refinementsr$   ri   c                     g | ]}d | d	S )split_test_score ).0is     rE   
<listcomp>z2test_graphical_lasso_cv_scores.<locals>.<listcomp>   s$    @@@Q(!(((@@@rG   c                 *    g | ]}j         |         S r   )cv_results_)r   keyr7   s     rE   r   z2test_graphical_lasso_cv_scores.<locals>.<listcomp>   s     GGGSCOC0GGGrG   )axismean_test_scorestd_test_score)r'   r*   r}   r~   r&   r
   r-   r   rangelenasarrayr0   stdr   )splitsn_alphasr   r   r   r8   
cv_resultstotal_alphaskeys
split_keysr   	cv_scoresexpected_meanexpected_stdr7   s                 @rE   test_graphical_lasso_cv_scoresr      s   FHMx            		
 H )


"
"C\\\xcJJA
fX]
S
S
S
W
W	 C J !8+a/L:D@@%--@@@J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DrG   )r   )r$   )&__doc__rk   r   numpyr'   scipyr   numpy.testingr   sklearn.utils._testingr   r   r   sklearn.covariancer   r	   r
   r   sklearn.datasetsr   ior   sklearn.utilsr   sklearnr   rF   rV   r[   re   rn   markparametrizer   
ValueError	TypeErrorr   r   r   rG   rE   <module>r      s     



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