
    -i>             	       ,   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	J
r
  S SKJr  S SKJrJrJrJr  S SKJr  S SKJrJrJrJrJrJr  S S	KJrJrJrJrJ r J!r!J"r"  S S
K#J$r$J%r%J&r&  S SK'J(r(J)r)J*r*J+r+J,r,  S SK-J.r.  S SK/J0r0  S SK1J2r2J3r3J4r4J5r5J6r6J7r7  S SK8J9r9  S SK:J;r;J<r<J=r=J>r>J?r?  S SK@JArAJBrB  S SKCJDrDJErEJFrFJGrGJHrHJIrI  / SQrJSrKSrL\
R                  " 5       rN\NR                  \NR                  srQrR\R                  " \QR                  S    5      rU\R                  R                  S 5      rX\XR                  \U5        \USS rU\Q\U   \R\U   srQrR\
R                  " 5       r[\[R                  \[R                  sr\r]S r^S r_\R                  " SS/S9S 5       ra\R                  R                  S\J5      \R                  R                  SSS /5      S! 5       5       rd\R                  R                  S\J5      \R                  R                  SSS /5      S" 5       5       re\R                  R                  S\J5      \R                  R                  SSS /5      S# 5       5       rf\R                  R                  S\J5      \R                  R                  SSS /5      S$ 5       5       rg\R                  R                  S\J5      \R                  R                  SSS /5      S% 5       5       rh\R                  R                  S\J5      \R                  R                  SSS /5      S& 5       5       ri\R                  R                  S\J5      \R                  R                  SSS /5      \R                  R                  S'S/\G-   5      \R                  R                  S(S)S*/5      S+ 5       5       5       5       rjS, rkS- rlS. rmS/ rnS0 roS1 rp\R                  R                  S2/ S3Q5      \R                  R                  S4\G5      S5 5       5       rq\R                  R                  S6/ S7Q5      \R                  R                  S8SS /5      \R                  R                  S4\G5      S9 5       5       5       rr\R                  R                  S6/ S7Q5      \R                  R                  S8SS /5      \R                  R                  S4\G5      S: 5       5       5       rs            SS< jrt\R                  R                  S=S> \" / S?QS/\G-   5       5       5      \R                  R                  S@/ SAQ5      SB 5       5       ru\R                  R                  SCSDSE/5      \R                  R                  SF\R                  /\G-   5      \R                  R                  SGSHSI/5      \R                  R                  SSS /5      \R                  R                  SJ/ SKQ5      SL 5       5       5       5       5       rwSM rx\R                  R                  SCSDSE/5      \R                  R                  SF\R                  /\G-   5      \R                  R                  SNSOSP/5      \R                  R                  SQ/ SRQ5      SS 5       5       5       5       ry\R                  R                  S'S/\G-   5      \R                  R                  ST/ SUQ5      SV 5       5       rzSW r{SX r|\R                  R                  SY\" S SZ9\4\" S SZ9\4/5      S[ 5       r}\R                  R                  SY\" 5       \4\" 5       \4/5      \R                  R                  S\SS]/5      S^ 5       5       r~S_ rS` rSa rSb r\R                  R                  ScSSd\^/5      \R                  R                  S\S\*" Se5      /5      \R                  R                  S'S/\G-   5      Sf 5       5       5       r\R                  R                  S\S\*" Se5      /5      \R                  R                  S'S/\G-   5      Sg 5       5       rSh rSi r\R                  R                  Sj\6" 5       \5Sk9\R                  R                  Sl\B\/\9Sk9\R                  R                  Sm\" SDSn9/\9Sk9So 5       5       5       r\R                  R                  Sp\7" S Sq95      Sr 5       r\R                  R                  Sp\" \25      5      Ss 5       r\R                  R                  St\{\|\\\\45      \R                  R                  S4\G5      Su 5       5       rSv r\R                  R                  Sw\\45      Sx 5       rSy r\R                  R                  ScSSz\_/5      S{ 5       r\R                  R                  ScSSd\^/5      S| 5       r\R                  R                  S}\\/5      S~ 5       r\R                  R                  S\SS]/5      \R                  R                  S}\\/5      S 5       5       rS rS r\R                  R                  SSS]/S]S//5      \R                  R                  S'\E\F-   \G-   \H-   \I-   5      S 5       5       rS r\R                  R                  S}\\/5      \R                  R                  SSS0\S4SS0\S4SS0\S4/5      S 5       5       r\R                  R                  S}\\/5      S 5       rS r\R                  GR9                  S5      S 5       r\R                  R                  S/ SQ5      \R                  R                  SSS /5      \R                  R                  S4\G5      S 5       5       5       r\R                  R                  S/ SQ5      \R                  R                  S4\G5      S 5       5       r\R                  R                  SSS /5      \R                  R                  S4\G5      S 5       5       r\R                  R                  SS S/5      \R                  R                  SS\GRB                  " S5      /5      \R                  R                  S\GRD                  /\G-   5      \R                  R                  S/ SQ5      S 5       5       5       5       r\R                  R                  S/ SQ5      S 5       rS r\R                  R                  S/ SQ5      \R                  R                  S\" S;5      5      S 5       5       rS r\R                  R                  S\0 4\S\S04\S\S]04/5      S 5       r\R                  R                  SSS/5      \R                  R                  SSS /5      \R                  R                  S(/ SQ5      S 5       5       5       r\R                  R                  SSS /5      \R                  R                  S(/ SQ5      S 5       5       r\R                  R                  S/ SQ5      S 5       r\R                  R                  S(/ SQ5      S 5       r\R                  R                  S(/ SQ5      S 5       rS r\R                  R                  SS S/5      \R                  R                  S'S/\G-   5      \R                  R                  SSS/5      \R                  R                  S\JS/-   5      S 5       5       5       5       r\R                  R                  SS S/5      \R                  R                  SS S/5      \R                  R                  SS;S/5      S 5       5       5       rS rS r\R                  R                  S\\/5      \	" SS9S 5       5       r\R                  R                  S\" 5       \4\" 5       \4/5      \	" SS9S 5       5       rg)    N)product)linalg)config_contextdatasets)clone)make_classificationmake_low_rank_matrixmake_multilabel_classificationmake_regression)ConvergenceWarning)LinearRegressionRidgeRidgeClassifierRidgeClassifierCVRidgeCVridge_regression)_check_gcv_mode	_RidgeGCV_solve_cholesky_solve_cholesky_kernel_solve_lbfgs
_solve_svd_X_CenterStackOp)
get_scorermake_scorermean_squared_error)GridSearchCV
GroupKFoldKFoldLeaveOneOutcross_val_predict)minmax_scale)check_random_state)_NUMPY_NAMESPACE_NAMES_atol_for_type_convert_to_numpy_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinationsyield_namespaces)_get_check_estimator_ids)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)_array_api_for_tests check_array_api_input_and_values)	_IS_32BITCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)svd	sparse_cgcholeskylsqrsagsaga)r9   r<   )r9   r:   r;   r<   r=      c                 2    [         R                  " X:H  5      $ N)npmeany_testy_predkwargss      X/var/www/html/venv/lib/python3.13/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callablerH   Y   s    776#$$    c                 ,    X-
  S-  R                  5       $ )N   )rB   )rD   rE   s     rG   _mean_squared_error_callablerL   ]   s    _"((**rI   longwide)paramsc                    UR                   S:X  a  Su  p#OSu  p#[        X#5      n[        R                  R	                  U 5      n[        X#XES9nSUSS2S4'   [        R                  " U5      u  pxn	[        R                  " US:  5      (       d   eUSS2SU24   USS2US24   pU	SU2SS24   XS2SS24   pUR                   S:X  a/  UR                  S	S
US9nXn-  nXUR                  X#-
  S9S-  -  -  nOGUR                  S	S
US9nUR                  [        R                  " SU-  5      -  U
R                  -  U-  nSnU[        R                  " U5      -  nSUS'   [        R                  " UR                  U-  U-   UR                  U-  5      nXU-  -
  nXU-  -
  n[        R                  R                  U5      [        R                  R                  U5      :  d   eXoUU4$ )a  Dataset with OLS and Ridge solutions, well conditioned X.

The construction is based on the SVD decomposition of X = U S V'.

Parameters
----------
type : {"long", "wide"}
    If "long", then n_samples > n_features.
    If "wide", then n_features > n_samples.

For "wide", we return the minimum norm solution w = X' (XX')^-1 y:

    min ||w||_2 subject to X w = y

Returns
-------
X : ndarray
    Last column of 1, i.e. intercept.
y : ndarray
coef_ols : ndarray of shape
    Minimum norm OLS solutions, i.e. min ||X w - y||_2_2 (with minimum ||w||_2 in
    case of ambiguity)
    Last coefficient is intercept.
coef_ridge : ndarray of shape (5,)
    Ridge solution with alpha=1, i.e. min ||X w - y||_2_2 + ||w||_2^2.
    Last coefficient is intercept.
rM   )      )rR   rQ   )	n_samples
n_featureseffective_rankrandom_state   NMbP?
   lowhighsizer_   rK   r   )rX   rX   )paramminrA   randomRandomStater	   r   r8   alluniformnormalTdiagidentitysolvenorm)global_random_seedrequestrS   rT   krngXUsVtU1U2Vt1_coef_olsyalphad
coef_ridgeR_OLSR_Ridges                        rG   ols_ridge_datasetr   a   s   > }} %	: %	I"A
))

 2
3C1	A AaeHzz!}HA"66!d(q"1"uXqABxAY2q5	}};;3Rj;AL	#**)"8*9Q>>>KKCbyK9552771q5>)BDD014 EJ''AAfIaccAgk13373J HEj. G99>>% 299>>'#:::::%%rI   solverfit_interceptTFc                    Uu  pEpgSn[        USU U S;   a  SOSUS9n	U[        R                  " U5      -
  n
XTU-  -
  nS[        R                  " US-  5      [        R                  " U
S-  5      -  -
  n[	        S0 U	D6nUS	S	2S	S
24   nU(       a  US
   nO%XDR                  SS9-
  nXUR                  5       -
  nSnUR                  XE5        US	S
 nUR                  [        R                  " U5      :X  d   e[        UR                  U5        UR                  XE5      [        R                  " U5      :X  d   e[	        S0 U	D6R                  XE[        R                  " UR                  S   5      S9nUR                  [        R                  " U5      :X  d   e[        UR                  U5        UR                  XE5      [        R                  " U5      :X  d   eUR                  U :X  d   eg	)zTest that Ridge converges for all solvers to correct solution.

We work with a simple constructed data set with known solution.
      ?Tr<   r=   V瞯<绽|=r{   r   r   tolrV   rW   rK   NrX   r   axissample_weight )dictrA   rB   sumr   fit
intercept_pytestapproxr+   coef_scoreonesshapesolver_)r   r   r   rm   rq   rz   rx   coefr{   rO   res_null	res_RidgeR2_Ridgemodel	intercepts                  rG   test_ridge_regressionr      s    &MA!E.EE'F 2771:~HHI266)Q,'"&&1*===HOFOE	!SbS&	AH	AL		IIaO9Dv}}Y7777EKK&;;qh 7777 OFOBGGAGGAJ4GHEv}}Y7777EKK&;;qh 7777==F"""rI   c                 2   Uu  pEpgUR                   u  pSn
[        U
S-  UU U S;   a  SOSUS9nUSS2SS24   nS	[        R                  " XD4S
S9-  n[        R                  R                  U5      [        XS
-
  5      ::  d   eU(       a  US   nO%XDR                  SS9-
  nXUR                  5       -
  nSnUR                  XE5        USS nUR                  [        R                  " U5      :X  d   e[        UR                  [        R                  Xw4   SS9  g)zTest that Ridge converges for all solvers to correct solution on hstacked data.

We work with a simple constructed data set with known solution.
Fit on [X] with alpha is the same as fit on [X, X]/2 with alpha/2.
For long X, [X, X] is a singular matrix.
r   rK   r   r   r   r   NrX         ?rW   r   r   :0yE>atol)r   r   rA   concatenater   matrix_rankrb   rB   r   r   r   r   r+   r   r_r   r   r   rm   rq   rz   rx   r   rS   rT   r{   r   r   s                rG    test_ridge_regression_hstacked_Xr      s    &MA!GGIEai#.EE'E 	
!SbS&	AbnnaV!,,A99  #s91n'EEEEH	AL		IIaO9Dv}}Y7777 EKKtz!2>rI   c                 *   Uu  pEpgUR                   u  pSn
[        SU
-  UU U S;   a  SOSUS9nUSS2SS24   n[        R                  " XD4S	S
9n[        R                  R                  U5      [        X5      ::  d   e[        R                  XU4   nU(       a  US   nO%XDR                  S	S
9-
  nXUR                  5       -
  nS	nUR                  XE5        USS nUR                  [        R                  " U5      :X  d   e[        UR                  USS9  g)a6  Test that Ridge converges for all solvers to correct solution on vstacked data.

We work with a simple constructed data set with known solution.
Fit on [X] with alpha is the same as fit on [X], [y]
                                            [X], [y] with 2 * alpha.
For wide X, [X', X'] is a singular matrix.
r   rK   r   r   r   r   NrX   r   r   r   r   )r   r   rA   r   r   r   rb   r   rB   r   r   r   r   r+   r   r   s                rG    test_ridge_regression_vstacked_Xr      s    &MA!GGIE%i#.EE'E 	
!SbS&	A
vA&A99  #s9'AAAA
adAH	AL		IIaO9Dv}}Y7777 EKKD1rI   c                 N   Uu  pEpgUR                   u  pSn
[        U
UU U S;   a  SOSUS9n[        S
0 UD6nU(       a  USS2SS24   nUS   nUSS nOSnUR                  XE5        X:  d  U(       d=  UR                  [
        R                  " U5      :X  d   e[        UR                  U5        g[        UR                  U5      U5        [        XF-  U-   U5        [        R                  R                  [        R                  UR                  UR                  4   5      [        R                  R                  [        R                  X4   5      :  d   e[
        R                  " SS	9  UR                  [
        R                  " U5      :X  d   e[        UR                  U5        g)a
  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

We work with a simple constructed data set with known solution.
Note: This checks the minimum norm solution for wide X, i.e.
n_samples < n_features:
    min ||w||_2 subject to X w = y
r   r   r   r   r   NrX   1Ridge does not provide the minimum norm solution.reasonr   )r   r   r   r   r   r   r   r+   r   predictrA   r   rl   r   xfail)r   r   r   rm   rq   rz   r   rx   rS   rT   r{   rO   r   r   s                 rG   !test_ridge_regression_unpenalizedr   (  sq    &MA$GGIE#.EE'F OFOE a"fIH	CRy		IIaO
 ]6==#;;;;T* 	a(!,9,a0yy~~beeE$4$4ekk$ABCbiinnEE)/"G
 
 	
 
 	OP6==#;;;;T*rI   c                 $   Uu  pEpgUR                   u  pSn
[        U
UU U S;   a  SOSUS9nU(       a  USS2SS24   nUS   nUSS nOSnS[        R                  " XD4S	S
9-  n[        R                  R                  U5      [        X5      ::  d   eUR                  XE5        X:  d  U(       dj  UR                  [        R                  " U5      :X  d   eU S:X  a  [        R                  " 5         [        UR                  [        R                  Xf4   5        g[        UR                  U5      U5        [        R                  R!                  [        R                  UR                  UR                  4   5      [        R                  R!                  [        R                  XU4   5      :  d   e[        R"                  " SS9  UR                  [        R                  " U5      :X  d   e[        UR                  [        R                  Xf4   5        g)aF  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

We work with a simple constructed data set with known solution.
OLS fit on [X] is the same as fit on [X, X]/2.
For long X, [X, X] is a singular matrix and we check against the minimum norm
solution:
    min ||w||_2 subject to min ||X w - y||_2
r   r   r   r   r   NrX   r   rW   r   r:   r   r   )r   r   rA   r   r   r   rb   r   r   r   r   skipr+   r   r   r   rl   r   r   r   r   rm   rq   rz   r   rx   rS   rT   r{   r   r   s                rG   ,test_ridge_regression_unpenalized_hstacked_Xr   _  s    &MA$GGIE#.EE'E a"fIH	CRy	bnnaV!,,A99  #s9'AAAA	IIaO]6==#;;;;ZKKMRUU4:%67
 	a(!,yy~~beeE$4$4ekk$ABCbiinnEE)4'(G
 
 	
 
 	OP6==#;;;;RUU4:%67rI   c                    Uu  pEpgUR                   u  pSn
[        U
UU U S;   a  SOSUS9nU(       a  USS2SS24   nUS   nUSS nOSn[        R                  " XD4SS9n[        R                  R                  U5      [        X5      ::  d   e[        R                  XU4   nUR                  XE5        X:  d  U(       d=  UR                  [        R                  " U5      :X  d   e[        UR                  U5        g[        UR                  U5      U5        [        R                  R                  [        R                  UR                  UR                  4   5      [        R                  R                  [        R                  X4   5      :  d   e[        R                   " S	S
9  UR                  [        R                  " U5      :X  d   e[        UR                  U5        g)al  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

We work with a simple constructed data set with known solution.
OLS fit on [X] is the same as fit on [X], [y]
                                     [X], [y].
For wide X, [X', X'] is a singular matrix and we check against the minimum norm
solution:
    min ||w||_2 subject to X w = y
r   r   r   r   r   NrX   r   r   r   )r   r   rA   r   r   r   rb   r   r   r   r   r   r+   r   r   rl   r   r   s                rG   ,test_ridge_regression_unpenalized_vstacked_Xr     s    &MA$GGIE#.EE'E a"fIH	CRy	
vA&A99  #s9'AAAA
adA	IIaO]6==#;;;;T*
 	a(!,yy~~beeE$4$4ekk$ABCbiinnEE)/"G
 
 	
 
 	OP6==#;;;;T*rI   sparse_containerr{   r   {Gz?c           	         UbM  U(       a   U [         ;  a  [        R                  " 5         O&U(       d  U [        ;  a  [        R                  " 5         Uu  pgpUR                  u  p[
        R                  SSU
S9n[        UUU U S;   a  SOSSUS	9nUSS2SS
24   n[        R                  " Xf4SS9n[        R                  Xw4   n[        R                  USU-
  4   U-  nU(       a  U	S
   nO%XfR                  SS9-
  nXwR                  5       -
  nSnUb  U" U5      nUR                  XgUS9  U	SS
 n	UR                  [        R                  " U5      :X  d   e[        UR                   U	5        g)zTest that Ridge with sample weights gives correct results.

We use the following trick:
    ||y - Xw||_2 = (z - Aw)' W (z - Aw)
for z=[y, y], A' = [X', X'] (vstacked), and W[:n/2] + W[n/2:] = 1, W=diag(W)
Nr   rW   r\   r   r   r   順 )r{   r   r   r   max_iterrV   rX   r   r   )SPARSE_SOLVERS_WITH_INTERCEPTr   r    SPARSE_SOLVERS_WITHOUT_INTERCEPTr   rp   rf   r   rA   r   r   rB   r   r   r   r+   r   )r   r   r   r{   r   rm   rq   rz   rx   r   rS   rT   swr   r   s                  rG   $test_ridge_regression_sample_weightsr     sU   $ #V+HHKKM61Q#QKKM%MA!GGI		3B#.EE'E 	
!SbS&	A
vA&A
adA	r1r6z	U	"BH	AL	#Q	IIa"I%9Dv}}Y7777EKK&rI   c                  ,   [         R                  SS5      n [        [        U S/S9n[        R
                  " [        [        R                  5      n[        X S/S9n[        R
                  " [        R                  U5      R                  n[        X5        g )NrX   rW   r   r{   )	
y_diabetesreshaper   
X_diabetesrA   dotrh   r   r-   )rz   r   K	dual_coefcoef2s        rG   test_primal_dual_relationshipr     sh    2q!A:q7D
z:<<(A&qD6:IFF:<<+--Ed*rI   c                     [         R                  R                  S5      n U R                  S5      nU R                  SS5      nSn[        R
                  " [        US9   [        X!SSSS S	S
9  S S S 5        g ! , (       d  f       g = f)Nr      r[   z3sparse_cg did not converge after [0-9]+ iterations.matchr   r9           rW   )r{   r   r   r   verbose)rA   rc   rd   randnr   warnsr   r   )rp   rz   rq   warning_messages       rG   &test_ridge_regression_convergence_failr     sj    
))


"C		!A		!RALO	(	@KS4QR	
 
A	@	@s   A66
Bc                     [         R                  R                  S5      n Su  pU R                  X5      nU R                  U5      nUS S 2[         R                  4   n[         R
                  USU-   4   n[        5       nUR                  X45        UR                  R                  U4:X  d   eUR                  R                  S:X  d   e[        UR                  [         R                  5      (       d   e[        UR                  [        5      (       d   eUR                  X55        UR                  R                  U4:X  d   eUR                  R                  S:X  d   e[        UR                  [         R                  5      (       d   e[        UR                  [         R                  5      (       d   eUR                  X65        UR                  R                  SU4:X  d   eUR                  R                  S:X  d   e[        UR                  [         R                  5      (       d   e[        UR                  [         R                  5      (       d   eg )Nr   r   r[   rW   r   rW   rK   )rK   )rA   rc   rd   r   newaxisc_r   r   r   r   r   
isinstancendarrayfloat)rp   rS   rT   rq   rz   Y1Yridges           rG   test_ridge_shapes_typer     s   
))


"C!I		)(A		)A	
1bjj=	B
aQhAGE	IIaO;;---!!R'''ekk2::....e&&....	IIa;;---!!T)))ekk2::....e&&

3333	IIaO;;J///!!T)))ekk2::....e&&

3333rI   c                     [         R                  R                  S5      n Su  pU R                  X5      nU R                  U5      n[         R                  USU-   4   n[        5       nUR                  X45        UR                  nUR                  X55        [        UR                  S   U5        [        UR                  S   US-   5        g )Nr   r   r   rW   )	rA   rc   rd   r   r   r   r   r   r,   )rp   rS   rT   rq   rz   r   r   r   s           rG   test_ridge_interceptr   5  s    
))


"C!I		)(A		)A
aqjAGE	IIaO  I	IIaO((+Y7((+Y_=rI   c                     [         R                  R                  S5      n Su  pU R                  U5      nU R                  X5      n[	        SSS9n[        SS9nUR                  XC5        UR                  XC5        [        UR                  UR                  5        UR                  XC5        UR                  XC5        [        UR                  UR                  5        g )Nr   )r   rR   r   Fr{   r   r   )	rA   rc   rd   r   r   r   r   r,   r   )rp   rS   rT   rz   rq   r   olss          rG   test_ridge_vs_lstsqr   G  s     ))


"C I		)A		)(A51E

/C	IIaOGGAMSYY/	IIaOGGAMSYY/rI   c                     [         R                  R                  S5      n Su  pnU R                  X5      nU R                  X5      n[         R                  " U5      n[         R
                  " [        XeR                  5       VVs/ s H(  u  px[        USS9R                  XH5      R                  PM*     snn5      n	S V
s/ s H&  n
[        XjSS9R                  XE5      R                  PM(     nn
U H  n[        X5        M     [        US S S	9nS
n[        R                  " [        US9   UR                  XE5        S S S 5        g s  snnf s  sn
f ! , (       d  f       g = f)N*   )   r[   r   r:   r{   r   )r8   r9   r;   r:   r<   r=   -q=)r{   r   r   rX   r   zCNumber of targets and number of penalties do not correspond: 4 != 5r   )rA   rc   rd   r   arangearrayziprh   r   r   r   r-   r   raises
ValueError)rp   rS   rT   	n_targetsrq   rz   	penaltiesr{   targetcoef_choleskyr   coefs_indiv_pencoef_indiv_penr   err_msgs                  rG   test_ridge_individual_penaltiesr   \  s4    ))


#C'0$I9		)(A		)'A		)$IHH "%Y!4	
!4 j155a@FF!4	
M NMF 	I%8<<QBHHM   *!-@ * 	#2'ESG	z	1		! 
2	1!	
 
2	1s   /E
 -E*E
En_col)r   r   )   csr_containerc                 R   [         R                  R                  S5      nUR                  SS5      nUR                  S5      nUR                  [	        U5      5      nUR                  " S/U Q76 nUR                  " S/U Q76 n[        U" U5      XE5      n[         R                  " X5S S 2S 4   U-  -
  US S 2S 4   /5      n	[        U	R                  U5      UR                  U5      5        [        U	R                  R                  U5      UR                  R                  U5      5        g )Nr         	   )
rA   rc   rd   r   lenr   hstackr+   r   rh   )
r   r   rp   rq   X_msqrt_swr   Aoperatorreference_operators
             rG   test_X_CenterStackOpr
  |  s     ))


"C		"aA
))A,CiiAG		"uA		!eAa 0#?HA4(83(>$>4@P#QR&**1-x||A?&((,,Q/1BCrI   r   ))r[   rW   )   r  )r      )rK   rK   )r   r   uniform_weightsc                    [         R                  R                  S5      nUR                  " U 6 nU(       a$  [         R                  " UR
                  S   5      nOUR                  SU S   5      n[         R                  " U5      n[         R                  " USUS9nXG-
  US S 2S 4   -  nUR                  UR                  5      n	U" XFS S 2S 4   -  5      n
[        SS9nUR                  X5      u  p[        X}5        [        X5        g Nr   rW   )r   weightsTr   )rA   rc   rd   r   r   r   	chisquaresqrtaverager   rh   r   _compute_gramr+   )r   r  r   rp   rq   r   r  X_mean
X_centered	true_gramX_sparsegcvcomputed_gramcomputed_means                 rG   test_compute_gramr    s     ))


"C		5AWWQWWQZ ]]1eAh'ggbkGZZ2.F*4 00Jz||,IQD!112H
$
'C#&#4#4X#G MF*I-rI   c                    [         R                  R                  S5      nUR                  " U 6 nU(       a$  [         R                  " UR
                  S   5      nOUR                  SU S   5      n[         R                  " U5      n[         R                  " USUS9nXG-
  US S 2S 4   -  nUR                  R                  U5      n	U" XFS S 2S 4   -  5      n
[        SS9nUR                  X5      u  p[        X}5        [        X5        g r  )rA   rc   rd   r   r   r   r  r  r  rh   r   r   _compute_covariancer+   )r   r  r   rp   rq   r   r  r  r  true_covariancer  r  computed_covr  s                 rG   test_compute_covariancer!    s     ))


"C		5AWWQWWQZ ]]1eAh'ggbkGZZ2.F*4 00J ll&&z2OQD!112H
$
'C"%"9"9("LLF*O2rI   rW   c                    [        U UUUUUUSUS9	u  pnUS:X  a  [        R                  " U/5      nX-  n[        R                  R	                  U5      R                  SX,R                  5      S:  nUR                  5       nSX) '   SUU'   UUR                  U5      -  nU
(       aF  XR                  [        R                  " U5      S-   U-
  5      -  n[        R                  " U5      S-   nUS:X  a  US   nU	(       a  XU4$ X4$ )NT)	rS   rT   n_informativer   biasnoiseshuffler   rV   rW   r   r   )
r   rA   asarrayrc   rd   binomialr   copyr   abs)rS   rT   proportion_nonzeror#  r   r$  X_offsetr%  r&  r   positiverV   rq   rz   cmask	removed_Xs                    rG   _make_sparse_offset_regressionr1    s    #!
GA! QJJsOMA
		l+44Q8JGGTWXX 	 IAeHIdOq	A	UU266!9q=1$%%FF1IMQaDQw4KrI   zsolver, sparse_containerc              #   B   #    U  H  u  pUb  US;   d  M  X4v   M     g 7f)N)r9   ridgecvr   ).0r   r   s      rG   	<genexpr>r5    s3      +
&V #v1I'I 	#"+
s   
)r:   r<   r9   r;   r=   r3  z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r6  r   )r   float64皙?c           	         SnUS:  a  SOSn[        SSUUUUS9u  p[        U5      n[        SUS	9R                  X5      n
UR	                  US
S9nU	R	                  US
S9n	Ub  U" U5      nU S:X  a  [        U/S9nO,U R                  S5      (       a  SnSnOSnS n[        UU UUUS9nUR                  X5        [        UR                  U
R                  SSS9  [        UR                  U
R                  SSS9  g )Nr   g?g      I@g     @@r[      )r$  rT   r+  r%  rV   rS   r8   )r   r{   F)r)  r3  alphasr<   gHz>r   r   )r{   r   r   r   rV   rY   r   rtol)
r1  r"   r   r   astyper   
startswithr+   r   r   )r   r+  rS   dtyper   rm   r{   r%  rq   rz   	svd_ridger   r   r   s                 rG   test_solver_consistencyrE    s   $ E&,D%E)-'DA 	QAU%044Q:I	U#A	U#A#Qw'U##CHCH+
 
IIaOEKKt$GE$$i&:&:DQrI   gcv_moder8   eigenX_containerX_shape)r   r  )r   r   zy_shape, noise))r   r   )r   rW         >@)r   r        b@c           
         Uu  pg[        U5      S:X  a  US   OSn[        UUUSSUSS9u  pU
R                  U5      n
/ SQn[        UUUS	S
9n[        U UUS9nUR	                  X5        U" U	5      nUR	                  X5        UR
                  [        R                  " UR
                  5      :X  d   e[        UR                  UR                  SS9  [        UR                  UR                  SS9  g )NrK   rX   rW   r   Fr   rS   rT   r   rV   r&  r%  r#  rY   r7  r         $@g     @@neg_mean_squared_errorcvr   r>  scoring)rF  r   r>  rY   r@  )r  r1  r   r   r   alpha_r   r   r+   r   r   )rF  rH  rI  y_shaper   r%  rS   rT   r   rq   rz   r>  	loo_ridge	gcv_ridgeX_gcvs                  rG   test_ridge_gcv_vs_ridge_loo_cvr]    s     $I"7|q0aI)DA 	
		'A(F#(	I #I MM!NEMM%v}}Y-=-=>>>>IOOY__4@I(()*>*>TJrI   c            
         Sn Su  pSn[        UUUSSSSS9u  pE/ SQn[        US	X`S
9n[        S	X`S9nUR                  XE5        UR                  XE5        UR                  [        R
                  " UR                  5      :X  d#   SUR                  < SUR                  < 35       e[        UR                  UR                  SS9  [        UR                  UR                  SS9  g )Nexplained_variance)r[   r   rW   r   Fr   rP  rQ  TrT  )r   r>  rV  zgcv_ridge.alpha_=z, loo_ridge.alpha_=rY   rW  )	r1  r   r   rX  r   r   r+   r   r   )	rV  rS   rT   r   rq   rz   r>  rZ  r[  s	            rG   test_ridge_loo_cv_asym_scoringr`  R  s    "G!II)DA )FDI d6KIMM!MM!v}}Y-=-=>> 9
1	 0 023> IOOY__4@I(()*>*>TJrI   rT   r  r   zy_shape, fit_intercept, noise))rJ  Tr   )rK  Tg      4@)rM  TrN  )rM  FrL  c           	      &   / SQn[         R                  R                  S5      n[        U5      S:X  a  US   OSn[	        SUUSSUS9u  pU
R                  U5      n
S	UR                  [        U	5      5      -  nXR                  5       -
  S-   R                  [        5      n[         R                  " [         R                  " U	R                  S   5      U5      nUR                  [        5      nX   X   p[        U	R                  S   S
9nUR                  XUS9n[!        UUSUS9nUR#                  X5        [%        UR&                  US9nUR                  XUS9n[)        UXUS9nUR                  UR                  :w  a  UR                  UR                  5      nUU-
  S-  n[         R                  " U	R                  S   5       Vs/ s H  n[         R*                  " UUU:H     SS9PM      nn[         R,                  " U5      nU" U	5      n[!        USU US9nUR#                  UXS9  [        U5      S:X  a0  UR.                  S S 2S S 2UR1                  UR&                  5      4   nO,UR.                  S S 2UR1                  UR&                  5      4   nUR&                  [2        R4                  " UR&                  5      :X  d   e[7        UUSS9  [7        UR8                  UR8                  SS9  [7        UR:                  UR:                  SS9  g s  snf )NrQ  r   rK   rX   rW   r   F)rS   rT   r   rV   r&  r%  r   )n_splits)groupsrS  )r>  rU  rV  r   r   rU  r   T)r>  store_cv_resultsrF  r   r   rY   rW  )rA   rc   rd   r  r1  r   r   rb   rA  intrepeatr   r   r   r   splitr   r   r   rX  r!   r   r'  cv_results_indexr   r   r+   r   r   )rF  rH  r   rT   rY  r%  r>  rp   r   rq   rz   r   indicesX_tiledy_tiledrU  splitskfold	ridge_regpredictionskfold_errorsir\  r[  
gcv_errorss                            rG   test_ridge_gcv_sample_weightsru  r  s    )F
))


"C"7|q0aI)DA 	
		'A		#a&))M"%6%6%881<DDSIMii		!''!*-}=G!((/Mz1:W	QWWQZ	(BXXgwX7F(#	E 
IIgELLFIXXgwX7F#IwFKKGMM)!))'--8k)a/L<>IIaggaj<Q<Qq|GqL)2<Q   ::l+LNE#	I MM%M8
7|q**1aell1K+KL
**1fll5<<.H+HI
<<6==)9)9::::J48IOOU[[t<I((%*:*:F+s   %Lz2mode, mode_n_greater_than_p, mode_p_greater_than_n))Nr8   rG  )autor8   rG  )rG  rG  rG  )r8   r8   r8   c                     [        SSS9u  pEU b  U " U5      n[        XA5      U:X  d   e[        UR                  U5      U:X  d   eg )Nr   rK   )rS   rT   )r   r   rh   )r   modemode_n_greater_than_pmode_p_greater_than_nrq   rx   s         rG   test_check_gcv_mode_choicer{    sP     Q15DA#Q1#'<<<<133%)>>>>rI   c                    [         R                  S   n/ nU c  [         SpCOU " [         5      SpC[        US9nUR                  U[        5        UR
                  nUR                  U5        [        n[        [        SS9n[        SUS9n	U" U	R                  5      " U[        5        U	R
                  [        R                  " U5      :X  d   eS n
[        U
5      n[        SUS9nU" UR                  5      " U[        5        UR
                  [        R                  " U5      :X  d   e[        S5      n[        SUS9nUR                  U[        5        UR
                  [        R                  " U5      :X  d   eU cO  UR                  U[        [        R                  " U5      S	9  UR
                  [        R                  " U5      :X  d   e[        R                   " [        [        45      R"                  nUR                  X>5        UR%                  U5      nUR                  U[        5        UR%                  U5      n['        [        R                   " UU45      R"                  US
S9  U$ )Nr   TFr   )greater_is_better)r   rV  c                     [        X5      * $ r@   )r   )xrz   s     rG   func_test_ridge_loo.<locals>.func  s    "1(((rI   rS  r   h㈵>rW  )r   r   r   r   r   rX  appendr/   r   r   r   r   r   r   rA   r   vstackrh   r   r+   )r   rS   retrq   r   	ridge_gcvrX  frV  
ridge_gcv2r  
ridge_gcv3scorer
ridge_gcv4r   Y_predrE   s                    rG   _test_ridge_loor    s     #I
C%t=+J7=6I MM!Z FJJv 	A,FGug>Jjnna$f 5555) $Gug>Jjnna$f 5555 01Fuf=JNN1j!f 5555 a27793EF6==#8888 			:z*+--AMM!q!FMM!Z q!FBIIvv./116EJrI   c                 F   U c  [         OU " [         5      n[        5       nUR                  U[        5        UR	                  U5        [        UR                  R                  5      S:X  d   e[        UR                  5      [        R                  L d   e[        S5      nUR                  US9  UR                  U[        5        UR	                  U5        [        UR                  R                  5      S:X  d   e[        UR                  5      [        R                  L d   eg )NrW   r   rd  )r   r   r   r   r   r  r   r   typer   rA   r9  r   
set_params)r   rq   ridge_cvrU  s       rG   _test_ridge_cvr  	  s    &.
4DZ4PAyHLLJQx~~##$)))##$

222	qB2LLJQx~~##$)))##$

222rI   zridge, make_dataset)re  c                 ^    U" SSS9u  p#U R                  X#5        [        U S5      (       a   eg )N   r   rS   rV   ri  )r   hasattr)r   make_datasetrq   rz   s       rG   $test_ridge_gcv_cv_results_not_storedr    s3     !"5DA	IIaOum,,,,,rI   rU  r   c                     U" SSS9u  p4U R                  SUS9  U R                  X45        [        U S5      (       d   e[        U R                  [
        5      (       d   eg )Nr  r   r  F)re  rU  best_score_)r  r   r  r   r  r   )r   r  rU  rq   rz   s        rG   test_ridge_best_scorer  )  s\     !"5DA	e3	IIaO5-((((e''////rI   c            	      x   [         R                  R                  S5      n Su  pnU R                  X5      n[         R                  " US S 2S/4   [         R
                  " SU45      5      [         R                  " US S 2S/4   S[         R
                  " SU45      -  5      -   [         R                  " US S 2S/4   S[         R
                  " SU45      -  5      -   U R                  X5      -   nSnUR                   Vs/ s H%  n[        US	9R                  XW5      R                  PM'     nn[        US
S9R                  XT5      n	[        XR                  5        [        [        U	R                  S9R                  XT5      R                  U	R                  5        [        US
S
S9R                  XT5      n	U	R                  R                  U4:X  d   eU	R                  R                  U4:X  d   eU	R                   R                  U[#        U5      U4:X  d   e[        SS
S
S9R                  XT5      n	U	R                  R                  U4:X  d   eU	R                  R                  U4:X  d   eU	R                   R                  XS4:X  d   e[        US
S
S9R                  XTS S 2S4   5      n	[         R$                  " U	R                  5      (       d   e[         R$                  " U	R                  5      (       d   eU	R                   R                  U[#        U5      4:X  d   e[        US
SS9R                  XT5      n	[        XR                  5        [        [        U	R                  S9R                  XT5      R                  U	R                  5        [        U['        5       S
S9n	Sn
[(        R*                  " [,        U
S9   U	R                  XT5        S S S 5        [        USS
S9n	[(        R*                  " [,        U
S9   U	R                  XT5        S S S 5        g s  snf ! , (       d  f       NR= f! , (       d  f       g = f)Nr   )r   r   r   r   rW   g?rK   rY   )rW   d     r=  T)r>  alpha_per_targetr   )r>  r  re  r2)r>  r  rV  )r>  rU  r  z3cv!=None and alpha_per_target=True are incompatibler   r  )rA   rc   rd   r   r   r   rh   r   r   rX  r.   r-   r   r   r   r  ri  r  isscalarr    r   r   r   )rp   rS   rT   r   rz   rq   r>  r   optimal_alphasr  msgs              rG   "test_ridge_cv_individual_penaltiesr  7  s    ))


#C (0$I9		)'A
qQCy"''1j/23
&&1qc6D277Az?#;;
<	=
&&1qc6EBGGQ
O$<<
=	> ))I
*	+  F RSQTQTUQTvgV,00;BBQTNU ft<@@FH~7 HOO$((.44hnn
 ftdSWW	H ??  YL000%%)555%%)S[))LLLL a$NRRSTXH??  YL000%%)555%%))BBBB ftdSWW	QT7H ;;x'''';;x++,,,,%%)S[)AAAA ftTJNNqTH~7HOO$((.44hnn fNH
?C	z	-Q 
.fTBH	z	-Q 
.	-a VZ 
.	- 
.	-s   ?,P<P:P+
P(+
P9c                     U c  [         OU " [         5      n[        SS9nUR                  U[        5        [        R
                  " UR                  U[        5      S5      $ )NFr   r   )r   r   r   r   rA   roundr   )r   rq   r   s      rG   _test_ridge_diabetesr  ~  sH    &.
4DZ4PA&E	IIa88EKK:.22rI   c                    U c  [         OU " [         5      n[        R                  " [        [        45      R                  n[         R
                  S   n[        SS9nUR                  X5        UR                  R
                  SU4:X  d   eUR                  U5      nUR                  U[        5        UR                  U5      n[        [        R                  " Xf45      R                  USS9  g )NrW   Fr   rK   r   decimal)r   rA   r  r   rh   r   r   r   r   r   r-   )r   rq   r   rT   r   r  rE   s          rG   _test_multi_ridge_diabetesr    s    &.
4DZ4PA
		:z*+--A!!!$J&E	IIaO;;J///]]1F	IIa]]1Fbii(89;;VQOrI   c                 b   [         R                  " [        5      R                  S   n[        R                  S   nU c  [        OU " [        5      n[        5       [        5       4 Hj  nUR                  U[        5        UR                  R                  X4:X  d   eUR                  U5      n[         R                  " [        U:H  5      S:  a  Mj   e   [        S5      n[        US9nUR                  U[        5        UR                  U5      n[         R                  " [        U:H  5      S:  d   eg )Nr   rW   gHzG?r   rd  g?)rA   uniquey_irisr   X_irisr   r   r   r   r   rB   r   )r   	n_classesrT   rq   regrE   rU  s          rG   _test_ridge_classifiersr    s    		&!''*IaJ"*0@0HA!#4#676yy9"9999Qwwv'(4///	 8 
qB
r
"CGGAv[[^F776V#$+++rI   rV  accuracyr   c                     U c  [         OU " [         5      n[        U5      (       a  [        U5      OUn[        XBS9nUR	                  U[
        5      R                  U5        g )N)rV  rU  )r  callabler   r   r   r  r   )r   rV  rU  rq   scoring_clfs         rG   "test_ridge_classifier_with_scoringr    sO     #*0@0HA'/'8'8{7#gH
H
4CGGAvq!rI   c                 R   S nU c  [         OU " [         5      n[        R                  " SSSS9n[        U[	        U5      US9nUR                  U[        5        UR                  [        R                  " S5      :X  d   eUR                  [        R                  " US   5      :X  d   eg )	Nc                     g)NzG?r   rC   s      rG   _dummy_score:test_ridge_regression_custom_scoring.<locals>._dummy_score  s    rI   rK   r   )num)r>  rV  rU  r  r   )r  rA   logspacer   r   r   r  r  r   r   rX  )r   rU  r  rq   r>  r  s         rG   $test_ridge_regression_custom_scoringr    s     #*0@0HA[[QA&F
6;|3LQS
TCGGAv??fmmD1111::vay1111rI   c                    U c  [         OU " [         5      n[        SSS9nUR                  U[        5        UR	                  U[        5      n[        SSS9nUR                  U[        5        UR	                  U[        5      nX5:  d   eg )Nr  F)r   r   rY   )r   r   r   r   r   )r   rq   r   r   ridge2score2s         rG   _test_tolerancer    sr    &.
4DZ4PAd%0E	IIaKK:&Et51F
JJq*\\!Z(F??rI   c                    [        X#5      n[        R                  U5      n[        R                  U5      nUR	                  XcS9nUR	                  XsS9n	UR                  Xg5        UR                  n
UR                  n[        SS9   [        U5      R                  X5      nUR                  nUR                  S:X  d   eUR                  UR                  :X  d   e[        [        XS9U
[        U5      S9  UR                  nUR                  S:X  d   eUR                  UR                  :X  d   e[        [        XS9U[        U5      S9  S S S 5        g ! , (       d  f       g = f)NdeviceTarray_api_dispatch)rR   )xpr   r   )r0   r  rA  r  r'  r   r   r   r   r   r   rC  r+   r&   r%   )name	estimatorarray_namespacer  
dtype_namer  	X_iris_np	y_iris_np	X_iris_xp	y_iris_xpcoef_npintercept_npestimator_xpcoef_xpintercept_xps                  rG   check_array_api_attributesr    s3   	o	6Bj)Ij)I

9
4I

9
4IMM)'ooG''L	4	0Y'++IA$$}}$$$}}	///g-
+	

 $..!!R'''!!Y__444l2
+	
 
1	0	0s   CE
E"z#array_namespace, device, dtype_name)idscheckr  r   c                 @    U R                   R                  nU" XPX#US9  g )N)r  r  )	__class____name__)r  r  r  r  r  r  s         rG   test_ridge_array_api_compliancer    s!    $ ''D	$?jQrI   r  )include_numpy_namespacesc                    [        U S S9nUR                  [        S S 5      nUR                  [        S S 5      n[        R
                  S   S   R                  nUSS1-
   Hg  n[	        XUS:H  S9nS	UR                   S
U S3n[        R                  " [        US9   [        SS9   UR                  X#5        S S S 5        S S S 5        Mi     [	        SSS9nSUR                   S3n[        R                  " [        US9   [        SS9   UR                  X#5        S S S 5        S S S 5        [	        5       nSUR                   S3n[        R                  " [        US9   [        SS9   UR                  X#5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       GMK  = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N]= f! , (       d  f       g = f)Nr  r   r   r   rv  r8   lbfgsr   r-  z Array API dispatch to namespace z" only supports solver 'svd'. Got 'z'.r   Tr  zYThe solvers that support positive fitting do not support Array API dispatch to namespace zc. Please either disable Array API dispatch, or use a numpy-like namespace, or set `positive=False`.z&Using Array API dispatch to namespace z with `solver='auto'` will result in using the solver 'svd'. The results may differ from those when using a Numpy array, because in that case the preferred solver would be cholesky. Set `solver='svd'` to suppress this warning.)r0   r'  r  r  r   _parameter_constraintsoptionsr  r   r   r   r   r   r   UserWarning)r  r  r  r  available_solversr   r   expected_msgs           rG   6test_array_api_error_and_warnings_for_solver_parameterr    s    
od	;B

6"1:&I

6"1:&I44X>qAII#vuo5V.?@.r{{m <""(- 	
 ]]:\:48		)/ 9 ;: 6 $/E	++-;;- 8.	.  
z	6t4IIi+ 5 
7 GE
0 >D 	D  
k	6t4IIi+ 5 
7	6- 98 ;: 54 
7	6 54 
7	6sl   
F'F9F 
G
F0G
G#)G;G#
FF
F-	0
F>	:G
G
G 	G##
G1c                    [        U S S9nUR                  [        S S 5      nUR                  [        S S 5      n[	        5       nSn[
        R                  " 5          [
        R                  " SU[        S9  [        SS9   UR                  X#5        S S S 5        S S S 5        [        SS9   [	        SSS	9R                  X#5        S S S 5        g ! , (       d  f       NB= f! , (       d  f       NK= f! , (       d  f       g = f)
Nr  r   zkResults might be different than when Array API dispatch is disabled, or when a numpy-like namespace is usederror)messagecategoryTr  rv  r  )r0   r'  r  r  r   warningscatch_warningsfilterwarningsr  r   r   )r  r  r  r  r   r  s         rG   )test_array_api_numpy_namespace_no_warningr  :  s    	od	;B

6"1:&I

6"1:&IGE	; 
 
	 	 	"Tt4IIi+ 5 
# 
4	0Vd+//	E 
1	0 54 
#	" 
1	0s0   $C CC+C0
C	C
C-0
C>	test_funcc                 H    U " S 5      nU " U5      nUb  Ub  [        X#SS9  g g g )Nr   r  )r-   )r  r   	ret_dense
ret_sparses       rG   test_dense_sparser  R  s4     $I=)J!7!)C "8rI   c                     [         R                  " SS/SS/SS/SS/SS//5      n / SQn[        S S9nUR                  X5        [	        UR                  SS//5      [         R                  " S	/5      5        [        S	S
0S9nUR                  X5        [	        UR                  SS//5      [         R                  " S/5      5        [        SS9nUR                  X5        [	        UR                  SS//5      [         R                  " S	/5      5        [         R                  " SS/SS/SS/SS//5      n / SQn[        S S9nUR                  X5        [        SS9nUR                  X5        [        UR                  5      S:X  d   e[        UR                  UR                  5        [        UR                  UR                  5        g )N      r   皙r   r   rW   rW   rW   rX   rX   class_weightr:  rW   rY   rX   balanced)rW   rW   rX   rX   rK   )rA   r   r   r   r.   r   r  classes_r-   r   r   )rq   rz   r  regas       rG   test_class_weightsr  h  sy   
4,q	D$<#sc3ZPQAA
t
,CGGAMs{{S$K=1288QC=A 5z
2CGGAM s{{S$K=1288RD>B z
2CGGAMs{{S$K=1288QC=A 	4,q	D$<#sDEAA
t
,CGGAM
3DHHQNt}}"""cii4cnndoo>rI   r  c                    U " 5       nUR                  [        R                  [        R                  5        U " SS9nUR                  [        R                  [        R                  5        [	        UR
                  UR
                  5        [        R                  " [        R                  R                  5      nU[        R                  S:H  ==   S-  ss'   SSSS.nU " 5       nUR                  [        R                  [        R                  U5        U " US9nUR                  [        R                  [        R                  5        [	        UR
                  UR
                  5        U " 5       nUR                  [        R                  [        R                  US-  5        U " US9nUR                  [        R                  [        R                  U5        [	        UR
                  UR
                  5        g	)
z5Check class_weights resemble sample_weights behavior.r  r  rW   r  r   g      Y@)r   rW   rK   rK   N)	r   irisdatar   r,   r   rA   r   r   )r  reg1reg2r   r  s        rG   "test_class_weight_vs_sample_weightr    s=   
 5DHHTYY$J'DHHTYY$

DJJ/ GGDKK--.M$++"#s*#u-L5DHHTYY]3L)DHHTYY$

DJJ/ 5DHHTYY]A%56L)DHHTYY]3

DJJ/rI   c                  4   [         R                  " SS/SS/SS/SS/SS//5      n / SQn[        S / SQS9nUR                  X5        [        S	S
0/ SQS9nUR                  X5        [	        UR                  SS//5      [         R                  " S/5      5        g )Nr  r   r  r   r   r  )r   r7  rW   )r  r>  rW   rY   )r   r7  rW   r[   gɿrK   rX   )rA   r   r   r   r.   r   )rq   rz   r  s      rG   test_class_weights_cvr	    s    
4,q	D$<#sc3ZPQAA
n
ECGGAM !U<N
OCGGAMs{{T1I;/2$@rI   rS  c                 |   [         R                  R                  S5      nSnSnUR                  X#5      n/ SQn[	        U5      n[        U 5      (       a  [        U 5      OU n[        US SUS9nUR                  U5      n	UR                  XI5        UR                  R                  X&4:X  d   eSn
UR                  X*5      n	UR                  XI5        UR                  R                  X*U4:X  d   e[        SSU S9n[        R                  " [        S	S
9   UR                  XI5        S S S 5        g ! , (       d  f       g = f)Nr   r  r   r7  r   rR  Tr>  rU  re  rV  r   )rU  re  rV  zcv!=None and store_cv_resultsr   )rA   rc   rd   r   r  r  r   r   r   ri  r   r   r   r   )rV  rp   rS   rT   r  r>  n_alphasr  rrz   r   s              rG   test_ridgecv_store_cv_resultsr    s    ))


#CIJ		)(AF6{H'/'8'8{7#gHv$xPA 			)AEE!K==9"7777 I		)'AEE!K==9"BBBB1tW=A	z)H	I	a 
J	I	Is   D--
D;c                 D   [         R                  " SS/SS/SS/SS/SS//5      n[         R                  " / SQ5      nUR                  S   n/ SQn[        U5      n[	        U 5      (       a  [        U 5      OU n[        US SUS	9nS
nUR                  X5        UR                  R                  X8U4:X  d   e[         R                  " / SQ/ SQ/ SQ/5      R                  5       nUR                  S
   nUR                  X5        UR                  R                  X8U4:X  d   eg )Nr  r   r  r   r   r  r  Tr  rW   )rW   rX   rW   rX   rW   )rX   rX   rW   rX   rX   )
rA   r   r   r  r  r   r   r   ri  	transpose)	rV  r  rz   rS   r>  r  r  r  r   s	            rG   )test_ridge_classifier_cv_store_cv_resultsr    s   
4,q	D$<#sc3ZPQA
"#A
IF6{H'/'8'8{7#gH$x	A
 IEE!K==9"BBBB 		-/BC	ik  
IEE!K==9"BBBBrI   	Estimatorc                    [         R                  R                  S5      nSnSu  p4U [        L a  UR	                  U5      nOUR                  SSU5      nUR	                  X45      nU " US9nUR                  UL d   SU R                   S35       eUR                  Xe5        [        UR                  [         R                  " U5      5        g )Nr   r  r   r   rK   r=  z`alphas` was mutated in `z
.__init__`)rA   rc   rd   r   r   randintr>  r  r   r.   r'  )r  rp   r>  rS   rT   rz   rq   	ridge_ests           rG   test_ridgecv_alphas_conversionr    s    
))


"CF IGIIi KK1i(		)(A(Iv% 
#I$6$6#7zB% MM!y''F);<rI   c                    [         R                  R                  S5      nSnSu  pEU[        L a  UR	                  U5      nOUR                  SSU5      nUR	                  XE5      nU" X0S9nU c4  [        R                  " [        SS9   UR                  Xv5        SSS5        gUR                  Xv5        g! , (       d  f       g= f)	z1Check alpha=0.0 raises error only when `cv=None`.r   )r   r   rR  r  rK   r>  rU  Nz"alphas\[0\] == 0.0, must be > 0.0.r   )
rA   rc   rd   r   r   r  r   r   r   r   )	rU  r  rp   r>  rS   rT   rz   rq   r  s	            rG   test_ridgecv_alphas_zeror  	  s     ))


"CF IGIIi KK1i(		)(A/I	z]]:-RSMM! TS 	a TSs   B44
Cc                     [         R                  R                  S5      n SnS H  u  p#U R                  U5      nU R                  X#5      nSU R	                  U5      -   n[        S5      n[        XS9nUR                  XTUS9  SU0n	[        [        5       XS	9n
U
R                  XTUS9  UR                  U
R                  R                  :X  d   e[        UR                  U
R                  R                  5        M     g )
Nr   r  )r  r   r   r   r   r  r   r{   rd  )rA   rc   rd   r   randr   r   r   r   r   rX  best_estimator_r{   r-   r   )rp   r>  rS   rT   rz   rq   r   rU  r3  
parametersgss              rG   test_ridgecv_sample_weightr"    s    
))


"CF "3	IIi IIi,chhy111X/A6 v&
%':5
q=1~~!3!3!9!9999!'--1C1C1I1IJ "3rI   c                    ^^^^^ SS/n SS/n[         R                  R                  S5      n[        X5       GH  u  p4UR	                  X45      mUR	                  U5      mUR	                  U5      S-  S-   nSnSnUS S 2[         R
                  4   mU[         R
                  S S 24   m[        SS9mTR                  TTU5        TR                  TTU5        TR                  TTU5        UUUU4S jnUUUU4S	 jn	S
n
[        R                  " [        U
S9   U" 5         S S S 5        S
n
[        R                  " [        U
S9   U	" 5         S S S 5        GM     g ! , (       d  f       N?= f! , (       d  f       GMB  = f)NrK   r   r   rW   r   g       @r   c                  ,   > TR                  T TT5        g r@   r   )rq   r   sample_weights_not_OKrz   s   rG   fit_ridge_not_okStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_okO  s    IIa12rI   c                  ,   > TR                  T TT5        g r@   r%  )rq   r   sample_weights_not_OK_2rz   s   rG   fit_ridge_not_ok_2Utest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2R  s    IIa34rI   z)Sample weights must be 1D array or scalarr   )rA   rc   rd   r   r   r   r   r   r   r   r   )
n_samplessn_featuressrp   rS   rT   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r'  r+  r   rq   r   r&  r*  rz   s              @@@@@rG   9test_raises_value_error_if_sample_weights_greater_than_1dr2  7  sK    QJa&K
))


#C!$Z!=	IIi,IIi IIi0A59!! 1!RZZ- @"3BJJM"BA 			!Q)*		!Q+,		!Q+,	3 	3	5 	5 >]]:W5 6 >]]:W5  657 ">. 65 65s   EE*
E'	*
E:	zn_samples,n_featuresrK   c                 j   [         R                  R                  S5      n[        SSS9n[        SSS9nUR	                  X5      nUR	                  U 5      nUR	                  U 5      S-  S-   nU" U5      n	UR                  XUS9  UR                  XgUS9  [        UR                  UR                  SS	9  g )
Nr   r   Fr   rK   rW   r   r  r  )rA   rc   rd   r   r   r   r-   r   )
rS   rT   r   rp   sparse_ridgedense_ridgerq   rz   sample_weightsr  s
             rG   &test_sparse_design_with_sample_weightsr7  ^  s     ))


#Cs%8Lc7K		)(A		)AYYy)Q.2N"HX?OOAO7l00+2C2CQOrI   c                      [         R                  " SS/SS/SS/SS/SS//5      n / SQn[        SS9nUR                  X5        g )	Nr  r   r  r   r   r  )rW   r[   r  r=  )rA   r   r   r   )rq   rz   r   s      rG   test_ridgecv_int_alphasr9  t  sK    
4,q	D$<#sc3ZPQAA <(E	IIaOrI   zparams, err_type, err_msgr>  )rW   rX   iz alphas\[1\] == -1, must be > 0.0)gr  g      $z"alphas\[0\] == -0.1, must be > 0.0)rW   r   1z1alphas\[2\] must be an instance of float, not strc                     Su  pE[         R                  XE5      n[         R                  SSU5      n[        R                  " X#S9   U " S0 UD6R                  Xg5        SSS5        g! , (       d  f       g= f)z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.r  r   rK   r   Nr   )rp   r   r  r   r   r   )r  rO   err_typer   rS   rT   rq   rz   s           rG   test_ridgecv_alphas_validationr=  }  sZ    ( !I		)(AAq)$A	x	/F% 
0	/	/s   A&&
A4c                     Su  p[         R                  X5      nU [        L a  [         R                  U5      nO[         R                  SSU5      nU " SS9R	                  X45        g)zCheck the case when `alphas` is a scalar.
This case was supported in the past when `alphas` where converted
into array in `__init__`.
We add this test to ensure backward compatibility.
r  r   rK   rW   r=  N)rp   r   r   r  r   )r  rS   rT   rq   rz   s        rG   test_ridgecv_alphas_scalarr?    sU     !I		)(AGIIi KK1i(QA!rI   c                      [        SSS9n U R                  [        [        5        U R                  R
                  S   [        R
                  S   :X  d   eg )Nr9   rW   )r   r   r   )r   r   r   r   r   r   )r  s    rG   test_sparse_cg_max_iterrA    sB    
{Q
/CGGJ
#99??1!1!1!!4444rI   z-ignore::sklearn.exceptions.ConvergenceWarningc            	         Sn [         [        p![        R                  " X S45      R                  n[        SS5       HQ  nS HH  n[        XTSS9nUR                  X5        [        UR                  [        R                  " X@5      5        MJ     MS     S H.  n[        USSS9nUR                  X5        UR                  c  M.   e   g )	NrK   rW   rR   )r<   r=   r;   r   )r   r   r   )r9   r8   r:   r7  )
r   r   rA   tilerh   ranger   r   r.   n_iter_)r   rq   rz   y_nr   r   r  s          rG   test_n_iterrG    s     Izq
''!^
$
&
&C!QK-FveDCGGAOs{{BGGH,HI .   36A48{{""" 3rI   )r;   r9   r  rv  with_sample_weightc                    U S:H  n[        SX$S9u  pVSnU(       a>  [        R                  R                  U5      nSUR	                  UR
                  S   S9-   nU S:X  a  S	OU n	[        U	S
US9n
[        U S
US9nU
R                  XVUS9  UR                  U" U5      XgS9  [        U
R                  UR                  5        [        U
R                  UR                  SS9  g)a  Check that ridge finds the same coefs and intercept on dense and sparse input
in the presence of sample weights.

For now only sparse_cg and lbfgs can correctly fit an intercept
with sparse X with default tol and max_iter.
'sag' is tested separately in test_ridge_fit_intercept_sparse_sag because it
requires more iterations and should raise a warning if default max_iter is used.
Other solvers raise an exception, as checked in
test_ridge_fit_intercept_sparse_error
r  r   )rT   rV   r-  Nr   r   r`   rv  r9   r   )r   r   r-  r   gƠ>rW  )r1  rA   rc   rd   rf   r   r   r   r+   r   r   )r   rH  rm   r   r-  rq   rz   r   rp   dense_solverr5  r4  s               rG   test_ridge_fit_intercept_sparserK    s       H)$6DA Mii##$67ckkqwwqzk:: #)F"2;L|JKEHELOOAO6]1%qFK**L,C,CDK%%|'9'9ErI   )r=   r8   r:   c                     [        SSS9u  p#U" U5      n[        U S9nSR                  U 5      n[        R                  " [
        US9   UR                  XC5        S S S 5        g ! , (       d  f       g = f)Nr   r   )rT   rV   r  zsolver='{}' does not supportr   )r1  r   formatr   r   r   r   )r   r   rq   rz   X_csrr4  r   s          rG   %test_ridge_fit_intercept_sparse_errorrO    s^     *RaHDA!E'L,33F;G	z	1" 
2	1	1s   A##
A1c                    [        SSUSS9u  p4U (       a?  [        R                  R                  U5      nSUR	                  UR
                  S   S9-   nOS nU" U5      n[        SSS	S
SS9n[        S0 UD6n	[        S0 UD6n
U	R                  X4US9  [        R                  " 5          [        R                  " S[        5        U
R                  XtUS9  S S S 5        [        U	R                  U
R                  SS9  [        U	R                  U
R                  SS9  [         R"                  " [        SS9   [        SS	SS S9R                  Xt5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   g      @)rT   rS   rV   r,  r   r   r`   r<   Tr   r   )r{   r   r   r   r   r   r  -C6?rW  z"sag" solver requires.*r   rY   )r   r   r   r   r   )r1  rA   rc   rd   rf   r   r   r   r   r  r  simplefilterr  r+   r   r   r   r   )rH  rm   r   rq   rz   rp   r   rN  rO   r5  r4  s              rG   #test_ridge_fit_intercept_sparse_sagrS    sG   
 *1CcDA ii##$67ckkqwwqzk::!E%tF /&/K?6?LOOAO6		 	 	"g{3? 
# K**L,C,C$OK%%|'9'9E	k)B	CU$D4HLLUV 
D	C 
#	"
 
D	Cs   ',E2E(
E%(
E6return_interceptr   r  	container)rv  r9   r:   r;   r<   r=   r  c                    [        S5      nUR                  SS5      n/ SQn[        R                  " XV5      nSnU (       a  SnXx-  nU" U5      n	Su  p[        (       a  SOS	nUS
:H  nUS;  a:  U (       a3  [
        R                  " [        SS9   [        U	UU
UUU UUS9  SSS5        g[        U	UU
UUUU US9nU (       a  Uu  nn[        XSUS9  [        UUSUS9  g[        XSUS9  g! , (       d  f       g= f)z=check if all combinations of arguments give valid estimationsr   r  r   )rW   rK   r7  r   g     @)rY   ư>rY   rQ  r  )r<   rv  zIn Ridge, only 'sag' solverr   )r{   r   r   rT  r-  r   N)r{   r   r   r-  rT  r   r   r@  r   )
r#   r  rA   r   r2   r   r   r   r   r+   )rT  r   rU  r   rp   rq   
true_coefsrz   true_intercept	X_testingr{   r   r   r-  outr   r   s                    rG   .test_ridge_regression_check_arguments_validityr]    s    R
 CqAJ
qAN A!IJE94$D H_$)9]]:-JK+!1!	 L 	
	#)	C iqt<	>Ead;; LK 	s   C''
C5)r8   r9   r:   r;   r<   r=   r  c                 v   [         R                  R                  S5      nSnU S:H  nSu  pEUR                  XE5      nUR                  U5      nUR	                  [         R
                  5      nUR	                  [         R
                  5      n	S[         R                  " [         R
                  5      R                  -  n
[        X SXS9nUR                  X5        UR                  n[        X SXS9nUR                  Xg5        UR                  nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  U5      R                  UR                  :X  d   eUR                  U5      R                  UR                  :X  d   e[        UR                  UR                  SS	S
9  g )Nr   r   r  r  rK     )r{   r   r   r   r-  rQ  gMb@?rX  )rA   rc   rd   r   rA  r6  finfo
resolutionr   r   r   rC  r   r+   )r   rp   r{   r-  rS   rT   X_64y_64X_32y_32r   ridge_32coef_32ridge_64coef_64s                  rG   test_dtype_matchrj  S  sh    ))


"CE H I99Y+D99YD;;rzz"D;;rzz"D
bhhrzz"--
-CScH LLnnG ScH LLnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555HNNHNNDIrI   c                  2   [         R                  R                  S5      n [         R                  " SS/5      nSu  p#nU R	                  X#5      nU R	                  X$5      nUR                  [         R                  5      nUR                  [         R                  5      n[        USS9n	U	R                  Xx5        U	R                  n
[        USS9nUR                  XV5        UR                  nU
R                  UR                  :X  d   eUR                  UR                  :X  d   eU	R                  U5      R                  UR                  :X  d   eUR                  U5      R                  UR                  :X  d   e[        U	R                  UR                  SS9  g )	Nr   r   r   )r  r  rK   r:   r   r   r  )rA   rc   rd   r   r   rA  r6  r   r   r   rC  r   r,   )rp   r{   rS   rT   n_targetrb  rc  rd  re  rf  rg  rh  ri  s                rG   test_dtype_match_choleskyrm  x  sB    ))


"CHHc3Z E&-#I899Y+D99Y)D;;rzz"D;;rzz"D 54HLLnnG 54HLLnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555BrI   )r8   r:   r;   r9   r<   r=   r  seedc                    [         R                  R                  U5      nSu  p4UR                  X45      nUR                  U5      n[         R                  " XV5      SUR                  U5      -  -   nSnU S:H  n	[        5       n
U S:X  a  SOSn[         R                  [         R                  4 H6  n[        UR                  U5      UR                  U5      UU US U	SS	S
S
S9X'   M8     U
[         R                     R                  [         R                  :X  d   eU
[         R                     R                  [         R                  :X  d   e[        U
[         R                     U
[         R                     US9  g )Nr  r   r   r  r9   rY   r  r_  r   F)	r{   r   rV   r   r-  r   r   return_n_iterrT  r   )rA   rc   rd   r   r   r   r6  r9  r   rA  rC  r+   )r   rn  rV   rS   rT   rq   r   rz   r{   r-  resultsr   current_dtypes                rG   %test_ridge_regression_dtype_stabilityrs    sA   
 99((.L I91Aj)D
q$!3!3I!>>>AE HfG [(4dD**bjj1!1HH]#HH]#%""
 2 2::$$

2222::$$

222GBJJ')<4HrI   c                      [        SS9u  p[        R                  " U 5      n U S S S2S S 24   n US S S2   n[        SS9R	                  X5        g )Nr   rV   rK   r<   r  )r   rA   asfortranarrayr   r   )rq   rz   s     rG   test_ridge_sag_with_X_fortranrw    sO    +DA
!A	#A#q&	A	#A#A	A!rI   zClassifier, paramsc                 X   [        SSS9u  p#UR                  SS5      n[        R                  " X3/SS9nU " S	0 UD6R	                  X$5      nUR                  U5      nUR                  UR                  :X  d   e[        USS2S4   USS2S4   5        [        SS9R	                  X#5        g)
zNCheck that multilabel classification is supported and give meaningful
results.rW   r   )r  rV   rX   r   Nr<   r  r   )	r
   r   rA   r   r   r   r   r.   r   )
ClassifierrO   rq   rz   r   r  r  s          rG   test_ridgeclassifier_multilabelrz    s     *AAFDA			"aA
vA&A

v

"
"1
(C[[^F<<177"""vad|VAqD\2	A!rI   rv  r  )rY   r   r7  r   c                 b   [         R                  " SS/SS/SS/SS//5      n[         R                  " SS	/5      nU(       a  S
nUR                  U5      U-   nOUR                  U5      n[        USXS9nUR	                  X65        [         R
                  " UR                  S:  5      (       d   eg)z:Test that positive Ridge finds true positive coefficients.rW   rK   r   rR   r   r  r  r  rZ   r   Tr{   r-  r   r   r   N)rA   r   r   r   r   re   r   )r   r   r{   rq   r   r   rz   r   s           rG   #test_ridge_positive_regression_testr}    s    
 	1a&1a&1a&1a&12A88QHD	EE$K)#EE$Kd6E 
IIaO66%++"####rI   c                    [         R                  R                  S5      nUR                  SS5      nUR	                  SSUR
                  S   S9nU (       a
  SnX4-  U-   nOX4-  nXbR                  UR
                  S   S9S	-  -  n/ nS
 H8  n[        XU SS9n	UR                  U	R                  X65      R                  5        M:     [        USSS.6  g)zTest that Ridge w/wo positive converges to the same solution.

Ridge with positive=True and positive=False must give the same
when the ground truth coefs are all positive.
r   ,  r  r7  r   rW   r`   r   r   )TFr   )r{   r-  r   r   rW  r?  N)rA   rc   rd   r   rf   r   rg   r   r  r   r   r+   )
r   r{   rp   rq   r   r   rz   rq  r-  r   s
             rG   %test_ridge_ground_truth_positive_testr    s     ))


#C		#sA;;sCaggaj;1D	Hy H	$t	++AG!-U
 	uyy,,-	 "
 W4a0rI   )r8   r:   r;   r9   r<   r=   c           
         Sn[         R                  " SS/SS//5      n[         R                  " SS/5      nX#-  n[        USU SS	9n[        R                  " [
        S
S9   UR                  X$5        SSS5        [        R                  " [
        SS9   [        X$USU SS9u    nSSS5        g! , (       d  f       NA= f! , (       d  f       g= f)z5Test input validation for positive argument in Ridge.r7  rW   rK   r   rR   rX   TFr|  zdoes not support positiver   Nzonly 'lbfgs' solver can be used)r-  r   rT  )rA   r   r   r   r   r   r   r   )r   r{   rq   r   rz   r   rx   s          rG   test_ridge_positive_error_testr  	  s    
 E
1a&1a&!"A88QGD	AV5QE	z)D	E		! 
F 
z)J	K%$v
1 
L	K 
F	E 
L	Ks    B-B>-
B;>
Cc                   ^ ^	^
 [        SSSS9u  m	m
Sm SnSU	U U
4S jjn[        T S9R                  T	T
5      n[        T S	S
9R                  T	T
5      nU" U5      nU" U5      nXV::  d   e[        U5       H  nU" XGS9nXh::  a  M   e   g)z?Check ridge loss consistency when positive argument is enabled.r  r   rS   rT   rV   r7  r  Nc                 f  > U R                   nUbQ  [        R                  R                  U5      nU R                  UR                  SX R                  R                  S9-   nOU R                  nS[        R                  " TTU-  -
  U-
  S-  5      -  ST-  [        R                  " US-  5      -  -   $ )Nr   r`   r   rK   )r   rA   rc   rd   r   rf   r   r   )	r   rV   noise_scaler   rp   r   rq   r{   rz   s	         rG   
ridge_loss,test_positive_ridge_loss.<locals>.ridge_loss$  s    $$	#))''5C;;Q++BSBS!TTD;;DRVVQT\I5!;<<sU{RVV!GN
 @
 
 	
rI   r   T)r{   r-  ru  )Nr   )r   r   r   rD  )r{   n_checksr  r   model_positivelossloss_positiverV   loss_perturbedrq   rz   s   `        @@rG   test_positive_ridge_lossr    s     SSrJDAqEH

 

 ""1a(E6::1a@N
 eD~.M    h#NN... (rI   c                     [        SSSS9u  p[        R                  " US5      n[        R                  " U /5      n SSSS.n[	        XU 40 UD6n[        XU 5      n[        XES	S
S9  g)zETest that LBGFS gets almost the same coef of svd when positive=False.r  r   r  rW   FgؗҜ<i  )r-  r   r   rQ  r   r?  N)r   rA   expand_dimsr'  r   r   r+   )r{   rq   rz   config
coef_lbfgsr   s         rG   test_lbfgs_solver_consistencyr  C  so     SSrJDA
q!AJJwEF aE4V4JqU+MJDqArI   c            	         [         R                  " SS/SS//5      n [         R                  " SS/5      n[        SSSSS	SS
9n[        R                  " [
        SS9   UR                  X5        SSS5        g! , (       d  f       g= f)z1Test that LBFGS solver raises ConvergenceWarning.rW   rX   g    _g    _Br   r  Fr   T)r{   r   r   r   r-  r   zlbfgs solver did not converger   N)rA   r   r   r   r   r   r   )rq   rz   r   s      rG   test_lbfgs_solver_errorr  T  su    
1b'Aq6"#A
%AE 
(0O	P		! 
Q	P	Ps   A77
Br  tallc           	      r   Ub)  US:X  d  US;   a  U (       a  [         R                  " S5        [        R                  R	                  S5      nSnUS:X  a  US-  nOUS-  nUR                  Xg5      nUR                  U5      n	Ub  U" U5      n[        U S	UUS
:H  USS9n
[        S0 U
D6R                  XSS9nUR                  R                  5       nU (       a  UR                  n[        R                  " U	5      nUR                  XUS9  [        UR                  USS9  U (       a  [        UR                  W5        UR                  SSUR                  S   S9nSUSS& U	SS=== S-  sss& UR                  XUS9  UR                  R                  5       nU (       a  UR                  nUR                  USS2SS24   U	SS USS S9  [        UR                  USS9  U (       a  [        UR                  W5        [        S0 U
D6R!                  [        R"                  U
S   -  S9nUR                  X[        R"                  U-  S9  US;   a!  U (       d  [         R$                  " SU S35        [        UR                  USS9  U (       a  [        UR                  W5        Ub  UR'                  5       n[        R(                  " XSUS-   /SS9n[        R(                  " XSUS-   /5      nUR                  5       nUSUS-  === S-  sss& [        R(                  " XSUS-   /SS9nUb  U" U5      nU" U5      n[        S0 U
D6R                  XUS9n[        S0 U
D6R                  UUUS9n[        UR                  UR                  5        U (       a!  [        UR                  UR                  5        gg)zTest that the impact of sample_weight is consistent.

Note that this test is stricter than the common test
check_sample_weight_equivalence alone.
Nr8   )r:   r=   zunsupported configurationr   rQ   r  rK   r   r  r   )r   r{   r   r-  rV   r   r   rW  rW  r   r   r\   r  r{   r   r   zSolver z- does fail test for scaling of sample_weight.r   r   )r   r   rA   rc   rd   r  r   r   r   r   r)  r   	ones_liker+   rf   r   r  pir   toarrayr   )r   r   r  r   rm   rp   rS   rT   rq   rz   rO   r  r   r   r   r  X2y2sample_weight_1sample_weight_2r  s                        rG   $test_ridge_sample_weight_consistencyr  e  si    #U?v)==-KK34
 ))


#CIv~!^
]
'AA#Q#G#'F /&/

a$

7C99>>DNN	LLOMGGAG.CIIt$/	2
 KKDqqwwqzKBMM"#bcFdNFGGAG.99>>DNN	GGAcrc1fIq"v]3B-?G@CIIt$/	2 ?6?%%BEEF7O,C%DDHHQ!6H7 wvh&STUDJJ403 #IIK	.	Q/0q	9B	.	Q/0	1B#((*O$i1n%*%nn	&6	Q78qO #Qb!?6?q?CD?6?r2_EDDJJ

+9 rI   r   c                 >   [        SSUSS9u  p4[        R                  " UR                  S   4S9nU (       a  SUSSS2'   S	n[	        US
USS9nUR                  X4US9  [        R                  " / UR                  Q[        U5      P7S9n[        5       n	[        U5       He  u  p[        U	R                  X45      5       HB  u  nu  p[        XS9nUR                  X=   XM   X]   5        UR                  X>   5      XSU
4'   MD     Mg     [        UR                  U5        g)aN  Check that the predictions stored in `cv_results_` are on the original scale.

The GCV approach works on scaled data: centered by an offset and scaled by the
square root of the sample weights. Thus, prior to computing scores, the
predictions need to be scaled back to the original scale. These predictions are
the ones stored in `cv_results_` in `RidgeCV`.

In this test, we check that the internal predictions stored in `cv_results_` are
equivalent to a naive LOO-CV grid search with a `Ridge` estimator.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/13998
r  r[   r   )rS   rT   r   rV   r   r   NrK   r  rS  T)r>  rV  r   re  r   r   .)r   rA   r   r   r   r   emptyr  r    	enumeraterh  r   r   r+   ri  )rH  r   r   rq   rz   r   r>  r  rq  rU  	alpha_idxr{   idx	train_idxtest_idxr   s                   rG   !test_ridge_cv_results_predictionsr    s   " "	DA GG1771:-0M ccF (#	H LL]L3 ((!8177!8CK!89K	B%f-	*3BHHQN*C&C&)CEIIalAL-2JK/4}}Q[/IKS)+, +D .
 H((+6rI   c                    [        SU S9u  p[        R                  " UR                  S   4S9n[	        SSS9nUR                  XUS9  [        5       n[        UR                  S	9n[        R                  " UR                  U5       VVs/ s H-  u  pxUR                  X   X'   X7   S9R                  X   5      PM/     snn5      n	[        UR                  [        X)5      * 5        g
s  snnf )zCheck that `RidgeCV` works properly with multioutput and sample_weight
when `scoring != None`.

We check the error reported by the RidgeCV is close to a naive LOO-CV using a
Ridge estimator.
rK   r   rV   r   r  rS  T)rV  re  r   r   N)r   rA   r   r   r   r   r    r   rX  squeezerh  r   r+   r  r   )
rm   rq   rz   r   r  rU  r   traintest
y_pred_loos
             rG   'test_ridge_cv_multioutput_sample_weightr    s     Q5GHDAGG1771:-0M7$OHLL]L3	B(E
  "xx{		
  + IIah8LIMUU  +		
J H((+=a+L*LM	
s   
4C'
c                    ^	 [        SSS9u  pS m	U	4S jn[        US9nUR                  X5        [        5       n[	        UR
                  S9n[        R                  " UR                  U 5       VVs/ s H,  u  pgUR                  X   X   5      R                  X   5      PM.     snn5      n[        UR                  T	" X5      * 5        gs  snnf )	zECheck that `RidgeCV` works properly with a custom multioutput scorer.rK   r   r  c                     X-
  S-  n[         R                  " USS9nUR                  S:X  a  [         R                  " USS/S9* $ U* $ )NrK   r   r   rW   )r  )rA   rB   ndimr  )y_truerE   errorsmean_errorss       rG   custom_error=test_ridge_cv_custom_multioutput_scorer.<locals>.custom_error	  sN    /a'ggf1-q JJ{QF;;; |rI   c                 4   > T" X R                  U5      5      * $ )zGMultioutput score that give twice more importance to the second target.)r   )r  rq   rz   r  s      rG   custom_multioutput_scorerJtest_ridge_cv_custom_multioutput_scorer.<locals>.custom_multioutput_scorer	  s    Q 1 1! 4555rI   )rV  r   N)r   r   r   r    r   rX  rA   r  rh  r   r+   r  )
rq   rz   r  r  rU  r   r  r  r  r  s
            @rG   'test_ridge_cv_custom_multioutput_scorerr  	  s    QQ7DA6 89HLL	B(EKM88TU;W;KE18QX	&	.	.qw	7;WJ H((<+F*FG 	Xs   23C
metaestimator)enable_metadata_routingc                 .    U " 5       R                  5         g)zTest that `RidgeCV` or `RidgeClassifierCV` with default `scoring`
argument (`None`), don't enter into `RecursionError` when metadata is routed.
N)get_metadata_routing)r  s    rG   *test_metadata_routing_with_default_scoringr  2	  s     O((*rI   zmetaestimator, make_datasetc                 z    U" SSSS9u  p#U R                  X#[        R                  " UR                  S   5      S9  g)zTest that `set_score_request` is set within `RidgeCV.fit()` and
`RidgeClassifierCV.fit()` when using the default scoring and no
UnsetMetadataPassedError is raised. Regression test for the fix in PR #29634.r  r   r   r  r   r   N)r   rA   r   r   )r  r  rq   rz   s       rG   +test_set_score_request_with_default_scoringr  ;	  s8     #!"EDAa"''!''!**=>rI   )r  r  r   r[   rW   g      *@rL  rL  TFFN)r  	itertoolsr   numpyrA   r   scipyr   sklearnr   r   sklearn.baser   sklearn.datasetsr   r	   r
   r   sklearn.exceptionsr   sklearn.linear_modelr   r   r   r   r   r   sklearn.linear_model._ridger   r   r   r   r   r   r   sklearn.metricsr   r   r   sklearn.model_selectionr   r   r   r    r!   sklearn.preprocessingr"   sklearn.utilsr#   sklearn.utils._array_apir$   r%   r&   r'   r(   r)   -sklearn.utils._test_common.instance_generatorr*   sklearn.utils._testingr+   r,   r-   r.   r/   sklearn.utils.estimator_checksr0   r1   sklearn.utils.fixesr2   r3   r4   r5   r6   r7   SOLVERSr   r   load_diabetesdiabetesr  r   r   r   r   r   indrc   rd   rp   r&  	load_irisr  r  r  rH   rL   fixturer   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r!  r1  rE  r'  r]  r`  ru  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  sortedr  r  r  r  r	  r  r  r  r  r"  r2  r7  r9  r   	TypeErrorr=  r?  rA  r  rG  rK  rO  rS  r   r   r]  rj  rm  rD  rs  rw  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r   rI   rG   <module>r     s        ,   2    H G  / ,  S   B 4 #S  !!#! 
Jii
  #$iiA C 	$3i#C*S/ 
JDKK%+ '(C& )C&L 7+4-8)# 9 ,)#X 7+4-8#? 9 ,#?L 7+4-8%2 9 ,%2P 7+4-82+ 9 ,2+j 7+4-828 9 ,28j 7+4-82+ 9 ,2+j 7+4-8+dVn-DE3+./' / F 9 ,/'d+
4<>$0*@ "23.9
D : 4
D "NO*T5M:.9. : ; P.$ "NO*T5M:.93 : ; P3& 	
	*Z *1GF^#+

 (F+R	
+R\ eW%56~(EFWh$784-8$K 9 9 G 7$KNK@ eW%56~(EF2w/#;G 0 G 7;G| +dVn-DE8? F?6r3$ 	%	(/:	E	24GH-- i!$5$79L#MN ay)0 *	
0DN3P,$ T:7I$JKeAh/0+dVn-DE" F 1 L" eAh/0+dVn-DE2 F 12  
F )-/'  
 %'AB   
 
%   
RR 'G',',T *F3I,JKF LF. "
 .9D :
D ?F 2C DE0 F08A .0LM: T:7I$JKC LC8 w0A&BC= D=( ay)w0A&BC D *(K0$!N /1a&1a&1AB^#n4~EVP	 C
P" w0A&BC
M	"J0ST*+1	
 }%@	
 &! D"& w0A&BC" D""5 KL# M#$ #IJ-e}=.9#F : > K#FL #>?.9# : @# -e}=.9W : >W8 +eT];4*?@rxxj>&ABO4< C A <4<n NJJDC< N q*I +I@" 	"	T4L)	T1I&"" FG#454-8"89$ : 9 6$" 4-8"891 : 912 E

" "89"/ :"/J "89B :B " 5$-8+dVn-DE&&!127gY#67\: 8 3 F 9\:~ -t}=5$-8q!f-(7 . 9 >(7VN4HD 74E*FG-+ . H+ !	O$		12 -? .?rI   