
    Q3j<k                    (   d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZH g dZIdZJdZK e
j                         ZMeMj                  eMj                  cZPZQ ej                  ePj                  d          ZTej                  j                  d       ZWeWj                  eT       eTdd ZTePeT   eQeT   cZPZQ e
j                         ZZeZj                  eZj                  cZ[Z\d Z]d Z^ ej                  ddg      d        Z`ej                  j                  deI      ej                  j                  ddd g      d!               Zcej                  j                  deI      ej                  j                  ddd g      d"               Zdej                  j                  deI      ej                  j                  ddd g      d#               Zeej                  j                  deI      ej                  j                  ddd g      d$               Zfej                  j                  deI      ej                  j                  ddd g      d%               Zgej                  j                  deI      ej                  j                  ddd g      d&               Zhej                  j                  deI      ej                  j                  ddd g      ej                  j                  d'dgeFz         ej                  j                  d(d)d*g      d+                             Zid, Zjd- Zkd. Zld/ Zmd0 Znd1 Zoej                  j                  d2g d3      ej                  j                  d4eF      d5               Zpej                  j                  d6g d7      ej                  j                  d8dd g      ej                  j                  d4eF      d9                      Zqej                  j                  d6g d7      ej                  j                  d8dd g      ej                  j                  d4eF      d:                      Zr	 	 	 	 	 	 	 	 	 	 	 	 dd<Zsej                  j                  d=d>  eg d?dgeFz         D              ej                  j                  d@g dA      dB               ZtdC Zuej                  j                  dDdEdFg      ej                  j                  dGej                  ej                  g      ej                  j                  dHej                  geFz         ej                  j                  dIdJdKgdLdgM      ej                  j                  ddd g      ej                  j                  dNg dO      dP                                           ZydQ Zzej                  j                  d(dRdSgdTdUgM      ej                  j                  dg dV      ej                  j                  ddd g      ej                  j                  dIdWdXgdLdgM      ej                  j                  dHej                  geFz         dY                                    Z{ej                  j                  d(dRdSgdTdUgM      ej                  j                  dDdZg      ej                  j                  ddd g      ej                  j                  dIg d[g d\M      ej                  j                  dGej                  ej                  g      ej                  j                  dHej                  geFz         d]                                           Z|ej                  j                  d(dRdSgdTdUgM      ej                  j                  dDdEdFg      ej                  j                  ddd g      ej                  j                  dIg d[g d\M      ej                  j                  dGej                  ej                  g      ej                  j                  dHej                  geFz         d^                                           Z}d_ Z~ej                  j                  dDdEdFg      ej                  j                  dHej                  geFz         ej                  j                  d`dadbg      ej                  j                  dcg dd      de                             Zej                  j                  d'dgeFz         ej                  j                  dIg dfg d\M      ej                  j                  dDg dg      dh                      Zdi Zdj Zej                  j                  dk ed l      ef ed l      efg      dm        Zej                  j                  dk e       ef e       efg      ej                  j                  dnddog      dp               Zdq Zdr Zds Zdt Zej                  j                  duddve]g      ej                  j                  dnd e*dw      g      ej                  j                  d'dgeFz         dx                      Zej                  j                  dnd e*dw      g      ej                  j                  d'dgeFz         dy               Zdz Z	 dd{Zej                  j                  d| e5             ej                  j                  d}eAege8M      ej                  j                  d~ edE       edE       edE       edF       e       ge8M      d                      Zej                  j                  d~ edE       e       g      ej                  j                  d| e5             d               Zej                  j                  d| e5             d        Zej                  j                  d e6d             d        Zej                  j                  d ee2            d        Zej                  j                  deeeeeef      ej                  j                  d4eF      d               Zd Zej                  j                  deef      d        Zd Zej                  j                  dudde^g      d        Zej                  j                  duddve]g      d        Zej                  j                  deeg      d        Zej                  j                  dnddog      ej                  j                  deeg      d               Zd Zd Zej                  j                  dddogdodgg      ej                  j                  d'eDeEz   eFz   eGz   eHz         d               Zd Zej                  j                  deeg      ej                  j                  dddiedfddiedfddiedfg      d               Zej                  j                  deeg      d        Zd Zej                  jI                  d      d        Zej                  j                  dg d      ej                  j                  ddd g      ej                  j                  d4eF      d                      Zej                  j                  dg d      ej                  j                  d4eF      d               Zej                  j                  ddd g      ej                  j                  d4eF      d               Zej                  j                  dd dg      ej                  j                  dd ejR                  d      g      ej                  j                  dejT                  geFz         ej                  j                  dg d      d                             Zej                  j                  dg d      d        Zd Zej                  j                  dg d      ej                  j                  d ed;            d               Zd Zej                  j                  dei fedndifedndoifg      d        Zej                  j                  dddg      ej                  j                  ddd g      ej                  j                  d(g d      d                      Zej                  j                  ddd g      ej                  j                  d(g d      d               Zej                  j                  dg d      d        Zej                  j                  d(g d      dÄ        Zej                  j                  d(g d      dĄ        Zdń Zej                  j                  dd dg      ej                  j                  d'dgeFz         ej                  j                  ddLdg      ej                  j                  deIdgz         dǄ                             Zej                  j                  dIddgdLdgM      ej                  j                  dd dgddgM      ej                  j                  dd dgddgM      ej                  j                  dDdEdFg      ej                  j                  dd;dg      dτ                                    Zej                  j                  dDdEdFg      ej                  j                  dIddgdLdgM      dЄ               Zej                  j                  dIddgdLdgM      dф        Zej                  j                  deeg       e	dӫ      dԄ               Zej                  j                  d e       ef e       efg       e	dӫ      dք               Zy)    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move_to)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)r8   r;   )r8   r9   r:   r;   r<      c                 2    t        j                  | |k(        S N)npmeany_testy_predkwargss      R/DATA/.local/lib/python3.12/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callablerG   X   s    776V#$$    c                 .    | |z
  dz  j                         S )N   )rA   )rC   rD   s     rF   _mean_squared_error_callablerK   \   s    f_"((**rH   longwide)paramsc                    |j                   dk(  rd\  }}nd\  }}t        ||      }t        j                  j	                  |       }t        ||||      }d|dddf<   t        j                  |      \  }}}	t        j                  |dkD        sJ |ddd|f   |dd|df   }}
|	d|ddf   |	|dddf   }}|j                   dk(  r8|j                  d	d
|      }||z  }|||j                  ||z
        dz  z  z  }nI|j                  d	d
|      }|j                  t        j                  d|z        z  |
j                  z  |z  }d}|t        j                  |      z  }d|d<   t        j                  |j                  |z  |z   |j                  |z        }|||z  z
  }|||z  z
  }t        j                  j                  |      t        j                  j                  |      k  sJ ||||fS )aD  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.
    rL   )      )rQ   rP   )	n_samples
n_featureseffective_rankrandom_state   NMbP?
   lowhighsizer^   rJ   r   )rW   rW   )paramminr@   randomRandomStater	   r   r7   alluniformnormalTdiagidentitysolvenorm)global_random_seedrequestrR   rS   krngXUsVtU1U2Vt1_coef_olsyalphad
coef_ridgeR_OLSR_Ridges                        rF   ols_ridge_datasetr   `   s   > }} %	: %	:Iz"A
))

 2
3C
1SV	A AaeHzz!}HAq"66!d(q"1"uXqABxBAY12q5	C}};;3Rj;AL	R#**)j"8*9Q>>>KKCbyK9552771q5>)BDD014 EJ''AAfIaccAgk13373J HE!j. G99>>% 299>>'#::::a:%%rH   solverfit_interceptTFc                    |\  }}}}d}t        |d| | dv rdnd|      }	|t        j                  |      z
  }
|||z  z
  }dt        j                  |dz        t        j                  |
dz        z  z
  }t	        di |	}|d	d	d	d
f   }|r|d
   }n*||j                  d      z
  }||j                         z
  }d}|j                  ||       |d	d
 }|j                  t        j                  |      k(  sJ t        |j                  |       |j                  ||      t        j                  |      k(  sJ t	        di |	j                  ||t        j                  |j                  d               }|j                  t        j                  |      k(  sJ t        |j                  |       |j                  ||      t        j                  |      k(  sJ |j                  | k(  sJ y	)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瞯<绽|=rz   r   r   tolrU   rV   rJ   NrW   r   axissample_weight )dictr@   rA   sumr   fit
intercept_pytestapproxr*   coef_scoreonesshapesolver_)r   r   r   rl   rp   ry   rw   coefrz   rN   res_null	res_RidgeR2_Ridgemodel	intercepts                  rF   test_ridge_regressionr      s    &MAq!TE.EE'F 2771:~HAHI266)Q,'"&&1*===HOFOE	!SbS&	AH	AL		IIaO9Dv}}Y7777EKK&;;q!h 7777 OFO1BGGAGGAJ4GHEv}}Y7777EKK&;;q!h 7777==F"""rH   c                 F   |\  }}}}|j                   \  }}	d}
t        |
dz  || | dv rdnd|      }|ddddf   }d	t        j                  ||fd
      z  }t        j                  j                  |      t        ||	d
z
        k  sJ |r|d   }n*||j                  d      z
  }||j                         z
  }d}|j                  ||       |dd }|j                  t        j                  |      k(  sJ t        |j                  t        j                  ||f   d       y)a  Test 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   rJ   r   r   r   r   NrW         ?rV   r   r   :0yE>atol)r   r   r@   concatenater   matrix_rankra   rA   r   r   r   r   r*   r   r_r   r   r   rl   rp   ry   rw   r   rR   rS   rz   r   r   s                rF    test_ridge_regression_hstacked_Xr      s&    &MAq!TGGIzEai#.EE'E 	
!SbS&	AbnnaV!,,A99  #s9j1n'EEEEH	AL		IIaO9Dv}}Y7777 EKKtTz!2>rH   c                 >   |\  }}}}|j                   \  }}	d}
t        d|
z  || | dv rdnd|      }|ddddf   }t        j                  ||fd	
      }t        j                  j                  |      t        ||	      k  sJ t        j                  ||f   }|r|d   }n*||j                  d	
      z
  }||j                         z
  }d	}|j                  ||       |dd }|j                  t        j                  |      k(  sJ t        |j                  |d       y)aJ  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   rJ   r   r   r   r   NrW   r   r   r   r   )r   r   r@   r   r   r   ra   r   rA   r   r   r   r   r*   r   r   s                rF    test_ridge_regression_vstacked_Xr      s!    &MAq!TGGIzE%i#.EE'E 	
!SbS&	A
1vA&A99  #s9j'AAAA
adAH	AL		IIaO9Dv}}Y7777 EKKD1rH   c                 B   |\  }}}}|j                   \  }}	d}
t        |
|| | dv rdnd|      }t        d
i |}|r|ddddf   }|d   }|dd }nd}|j                  ||       ||	kD  s|s;|j                  t        j                  |      k(  sJ t        |j                  |       yt        |j                  |      |       t        ||z  |z   |       t        j                  j                  t        j                  |j                  |j                  f         t        j                  j                  t        j                  ||f         kD  sJ t        j                  d	       |j                  t        j                  |      k(  sJ t        |j                  |       y)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   NrW   1Ridge does not provide the minimum norm solution.reasonr   )r   r   r   r   r   r   r   r*   r   predictr@   r   rk   r   xfail)r   r   r   rl   rp   ry   r   rw   rR   rS   rz   rN   r   r   s                 rF   !test_ridge_regression_unpenalizedr   '  s    &MAq$GGIzE#.EE'F OFOE a"fIH	CRy		IIaO
 :]6==#;;;;T* 	a(!,D9,a0yy~~beeE$4$4ekk$ABCbiinnEE)T/"G
 
 	
 
 	OP6==#;;;;T*rH   c                    |\  }}}}|j                   \  }}	d}
t        |
|| | dv rdnd|      }|r|ddddf   }|d   }|dd }nd}dt        j                  ||fd	
      z  }t        j                  j                  |      t        ||	      k  sJ |j                  ||       ||	kD  s|sg|j                  t        j                  |      k(  sJ | dk(  rt        j                          t        |j                  t        j                  ||f          yt        |j                  |      |       t        j                  j!                  t        j                  |j                  |j                  f         t        j                  j!                  t        j                  |||f         kD  sJ t        j"                  d       |j                  t        j                  |      k(  sJ t        |j                  t        j                  ||f          y)a^  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   NrW   r   rV   r   r9   r   r   )r   r   r@   r   r   r   ra   r   r   r   r   skipr*   r   r   r   rk   r   r   r   r   rl   rp   ry   r   rw   rR   rS   rz   r   r   s                rF   ,test_ridge_regression_unpenalized_hstacked_Xr   ^  s    &MAq$GGIzE#.EE'E a"fIH	CRy	bnnaV!,,A99  #s9j'AAAA	IIaO:]6==#;;;;ZKKMRUU4:%67
 	a(!,yy~~beeE$4$4ekk$ABCbiinnEE)T4'(G
 
 	
 
 	OP6==#;;;;RUU4:%67rH   c                    |\  }}}}|j                   \  }}	d}
t        |
|| | dv rdnd|      }|r|ddddf   }|d   }|dd }nd}t        j                  ||fd      }t        j                  j                  |      t        ||	      k  sJ t        j                  ||f   }|j                  ||       ||	kD  s|s;|j                  t        j                  |      k(  sJ t        |j                  |       yt        |j                  |      |       t        j                  j                  t        j                  |j                  |j                  f         t        j                  j                  t        j                  ||f         kD  sJ t        j                   d	
       |j                  t        j                  |      k(  sJ t        |j                  |       y)a  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   NrW   r   r   r   )r   r   r@   r   r   r   ra   r   r   r   r   r   r*   r   r   rk   r   r   s                rF   ,test_ridge_regression_unpenalized_vstacked_Xr     s    &MAq$GGIzE#.EE'E a"fIH	CRy	
1vA&A99  #s9j'AAAA
adA	IIaO:]6==#;;;;T*
 	a(!,yy~~beeE$4$4ekk$ABCbiinnEE)T/"G
 
 	
 
 	OP6==#;;;;T*rH   sparse_containerrz   r   {Gz?c                    |=|r| t         vrt        j                          n|s| t        vrt        j                          |\  }}}}	|j                  \  }
}t
        j                  dd|
      }t        ||| | dv rdndd|	      }|dddd
f   }t        j                  ||fd      }t        j                  ||f   }t        j                  |d|z
  f   |z  }|r|	d
   }n*||j                  d      z
  }||j                         z
  }d}| ||      }|j                  |||       |	dd
 }	|j                  t        j                  |      k(  sJ t        |j                   |	       y)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   rV   r[   r   r   r   順 )rz   r   r   r   max_iterrU   rW   r   r   )SPARSE_SOLVERS_WITH_INTERCEPTr   r    SPARSE_SOLVERS_WITHOUT_INTERCEPTr   ro   re   r   r@   r   r   rA   r   r   r   r*   r   )r   r   r   rz   r   rl   rp   ry   rw   r   rR   rS   swr   r   s                  rF   $test_ridge_regression_sample_weightsr     se   $ #V+HHKKM61Q#QKKM%MAq!TGGIz		3B#.EE'E 	
!SbS&	A
1vA&A
adA	r1r6z	U	"BH	AL	#Q	IIa"I%9Dv}}Y7777EKK&rH   c                  8   t         j                  dd      } t        t        | dg      }t	        j
                  t        t        j                        }t        || dg      }t	        j
                  t        j                  |      j                  }t        ||       y )NrW   rV   r   rz   )	
y_diabetesreshaper   
X_diabetesr@   dotrg   r   r,   )ry   r   K	dual_coefcoef2s        rF   test_primal_dual_relationshipr     sl    2q!A:q7D
z:<<(A&q!D6:IFF:<<+--EdE*rH   c            
         t         j                  j                  d      } | j                  d      }| j                  dd      }d}t	        j
                  t        |      5  t        ||dddd d	
       d d d        y # 1 sw Y   y xY w)Nr      rZ   z3sparse_cg did not converge after [0-9]+ iterations.matchr   r8           rV   )rz   r   r   r   verbose)r@   rb   rc   randnr   warnsr   r   )ro   ry   rp   warning_messages       rF   &test_ridge_regression_convergence_failr     sl    
))


"C		!A		!RALO	(	@qKS4QR	
 
A	@	@s    A<<Bc                  p   t         j                  j                  d      } d\  }}| j                  ||      }| j                  |      }|d d t         j                  f   }t         j
                  |d|z   f   }t               }|j                  ||       |j                  j                  |fk(  sJ |j                  j                  dk(  sJ t        |j                  t         j                        sJ t        |j                  t              sJ |j                  ||       |j                  j                  |fk(  sJ |j                  j                  dk(  sJ t        |j                  t         j                        sJ t        |j                  t         j                        sJ |j                  ||       |j                  j                  d|fk(  sJ |j                  j                  dk(  sJ t        |j                  t         j                        sJ t        |j                  t         j                        sJ y )Nr   r   rZ   rV   r   rV   rJ   )rJ   )r@   rb   rc   r   newaxisc_r   r   r   r   r   
isinstancendarrayfloat)ro   rR   rS   rp   ry   Y1Yridges           rF   test_ridge_shapes_typer     s   
))


"C!Iz		)Z(A		)A	
1bjj=	B
aQhAGE	IIaO;;---!!R'''ekk2::...e&&...	IIa;;---!!T)))ekk2::...e&&

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

333rH   c                     t         j                  j                  d      } d\  }}| j                  ||      }| j                  |      }t         j                  |d|z   f   }t               }|j                  ||       |j                  }|j                  ||       t        |j                  d   |       t        |j                  d   |dz          y )Nr   r   r   rV   )	r@   rb   rc   r   r   r   r   r   r+   )ro   rR   rS   rp   ry   r   r   r   s           rF   test_ridge_interceptr   4  s    
))


"C!Iz		)Z(A		)A
aqjAGE	IIaO  I	IIaO((+Y7((+Y_=rH   c                     t         j                  j                  d      } d\  }}| j                  |      }| j                  ||      }t	        dd      }t        d      }|j                  ||       |j                  ||       t        |j                  |j                         |j                  ||       |j                  ||       t        |j                  |j                         y )Nr   )r   rQ   r   Frz   r   r   )	r@   rb   rc   r   r   r   r   r+   r   )ro   rR   rS   ry   rp   r   olss          rF   test_ridge_vs_lstsqr   F  s     ))


"C Iz		)A		)Z(A51E

/C	IIaOGGAqMSYY/	IIaOGGAqMSYY/rH   c            
         t         j                  j                  d      } d\  }}}| j                  ||      }| j                  ||      }t        j                  |      }t        j
                  t        ||j                        D cg c],  \  }}t        |d      j                  ||      j                  . c}}      }	dD 
cg c]*  }
t        ||
d      j                  ||      j                  , }}
|D ]  }t        |	|        t        |d d 	      }d
}t        j                  t        |      5  |j                  ||       d d d        y c c}}w c c}
w # 1 sw Y   y xY w)N*   )   rZ   r   r9   rz   r   )r7   r8   r:   r9   r;   r<   -q=)rz   r   r   rW   r   zCNumber of targets and number of penalties do not correspond: 4 != 5r   )r@   rb   rc   r   arangearrayziprg   r   r   r   r,   r   raises
ValueError)ro   rR   rS   	n_targetsrp   ry   	penaltiesrz   targetcoef_choleskyr   coefs_indiv_pencoef_indiv_penr   err_msgs                  rF   test_ridge_individual_penaltiesr   [  sH    ))


#C'0$Iz9		)Z(A		)Y'A		)$IHH "%Y!4	
!4v j155a@FF!4	
M NMF 	If%8<<QBHHM   *!-@ * 	#2'ESG	z	1		!Q 
2	1!	
 
2	1s   1E
/E4EE$n_col)r   r   )   csr_containerc                 T   t         j                  j                  d      }|j                  dd      }|j                  d      }|j                  t	        |            } |j                  dg|  } |j                  dg|  }t         ||      ||      }t        j                  ||d d d f   |z  z
  |d d d f   g      }	t        |	j                  |      |j                  |             t        |	j                  j                  |      |j                  j                  |             y )Nr         	   )
r@   rb   rc   r   lenr   hstackr*   r   rg   )
r   r   ro   rp   X_msqrt_swr   Aoperatorreference_operators
             rF   test_X_CenterStackOpr	  {  s     ))


"C		"aA
))A,CiiAG		"uA		!eAa 0#w?HA4(83(>$>4@P#QR&**1-x||A?&((,,Q/1BCrH   r   ))rZ   rV   )   r  )r      )rJ   rJ   )r   r   uniform_weightsc                    t         j                  j                  d      } |j                  |  }|r#t        j                  |j
                  d         }n|j                  d| d         }t        j                  |      }t        j                  |d|      }||z
  |d d d f   z  }|j                  |j                        }	 |||d d d f   z        }
t        d      }|j                  |
||      }t        |	|       y Nr   rV   )r   weightsTr   )r@   rb   rc   r   r   r   	chisquaresqrtaverager   rg   r   _compute_gramr*   )r   r  r   ro   rp   r   r  X_mean
X_centered	true_gramX_sparsegcvcomputed_grams                rF   test_compute_gramr    s     ))


"C		5AWWQWWQZ ]]1eAh'ggbkGZZ2.Ff*4 00Jz||,IQD!112H
$
'C%%h@MI}-rH   c                    t         j                  j                  d      } |j                  |  }|r#t        j                  |j
                  d         }n|j                  d| d         }t        j                  |      }t        j                  |d|      }||z
  |d d d f   z  }|j                  j                  |      }	 |||d d d f   z        }
t        d      }|j                  |
||      }t        |	|       y r  )r@   rb   rc   r   r   r   r  r  r  rg   r   r   _compute_covariancer*   )r   r  r   ro   rp   r   r  r  r  true_covariancer  r  computed_covs                rF   test_compute_covariancer    s     ))


"C		5AWWQWWQZ ]]1eAh'ggbkGZZ2.Ff*4 00J ll&&z2OQD!112H
$
'C**8VWELO\2rH   rV   c                    t        | ||||||d|	      \  }}}|dk(  rt        j                  |g      }||z  }t        j                  j	                  |      j                  d||j                        dkD  }|j                         }d|| <   d||<   ||j                  |      z  }|
rE||j                  t        j                  |      dz   |z
        z  }t        j                  |      dz   }|dk(  r|d   }|	r|||fS ||fS )NT)	rR   rS   n_informativer   biasnoiseshuffler   rU   rV   r   r   )
r   r@   asarrayrb   rc   binomialr   copyr   abs)rR   rS   proportion_nonzeror!  r   r"  X_offsetr#  r$  r   positiverU   rp   ry   cmask	removed_Xs                    rF   _make_sparse_offset_regressionr/    s    #!
GAq! QJJsOMA
		l+44Q8JAGGTWXX 	 IAteHIdOq	A	QUU266!9q=1$%%FF1IMQaD!Qwa4KrH   zsolver, sparse_containerc              #   6   K   | ]  \  }}||dv r||f  y w)N)r8   ridgecvr   ).0r   r   s      rF   	<genexpr>r3    s8      +
&V% #v1I'I 
!"+
s   )r9   r;   r8   r:   r<   r1  z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r4  r   )r   float64皙?c                    d}|dkD  rdnd}t        dd||||      \  }}	t        |      }t        d|	      j                  ||	      }
|j	                  |d
      }|	j	                  |d
      }	| ||      }| dk(  rt        |g      }n*| j                  d      rd}d}nd}d }t        || |||      }|j                  ||	       t        |j                  |
j                  dd       t        |j                  |
j                  dd       y )Nr   g?g      I@g     @@rZ      )r"  rS   r)  r#  rU   rR   r7   )r   rz   F)r'  r1  alphasr;   gHz>r   r   )rz   r   r   r   rU   rX   r   rtol)
r/  r"   r   r   astyper   
startswithr*   r   r   )r   r)  rR   dtyper   rl   rz   r#  rp   ry   	svd_ridger   r   r   s                 rF   test_solver_consistencyrC    s   $ E&,D%E)-'DAq 	QAU%044Q:I	U#A	U#A#Qw'U#CHCH+
 
IIaOEKKt$GE$$i&:&:DQrH   c                  n   d\  } }t         j                  j                  d      }|j                  dd| |f      }|j                  dd| f      }|j	                  t         j
                        }|j	                  t         j
                        }t        g ddd      }|j                  ||       t        |      }|j                  ||       t        |j                  |j                         t        |j                  |j                         |j                  j                  t         j
                  k(  sJ y )	N)r   rZ   r   r   r_   r5  r         $@neg_mean_squared_errorT)r<  scoringstore_cv_results)r@   rb   rc   randintr?  r7  r   r   r   r*   r   cv_results_rA  )	rR   rS   ro   rp   ry   X_floaty_float	ridge_gcvridge_gcv_floats	            rF   test_ridge_gcv_integer_arraysrP    s    "Iz
))


"CAq	:67AAq	|,Ahhrzz"Ghhrzz"G)ATXI MM!QI&O)IOO_%:%:;I))?+F+FG  &&"**444rH   gcv_moder7   eigenrA  X_containerX_shape)r   r   )r   r   tall)idszy_shape, noise))r   r   )r   rV         >@)r   r        b@c           	         | dk(  r|t         v rt        j                  d       |\  }}t        |      dk(  r|d   nd}	t	        |||	dd|d	      \  }
}|j                  |      }g d
}t        |||d      }t        | ||      }|j                  |
|        ||
      }
|
j                  |      }
|j                  |      }|j                  |
|       |t        j                  k(  rdnd}|j                  t        j                  |j                        k(  sJ t        |j                  |j                  |       t        |j                  |j                  |       y )Nr7   &`svd` mode not supported for sparse X.rJ   rW   rV   r   Fr   rR   rS   r   rU   r$  r#  r!  rX   r5  r   rF  g     @@rG  cvr   r<  rH  )rQ  r   r<  h㈵>r   r   )r4   r   r   r  r/  r   r   r   r?  r@   r4  alpha_r   r*   r   r   )rQ  rA  rS  rT  y_shaper   r#  rR   rS   r   rp   ry   r<  	loo_ridge	gcv_ridger   s                   rF   test_ridge_gcv_vs_ridge_loo_cvrg  2  sE     5k^;<=#Iz"7|q0aI)DAq 	
		'A(F#(	I #I MM!QAA	A	AMM!QBJJ&4EDv}}Y-=-=>>>>IOOY__4@I(()*>*>TJrH   c                    t        j                  | d      r6t        |      }|j                  ||       |j                  |j
                  fS |j                  d   }t        j                  |      |rt        j                  |      fS dfS )z4Expected coef and intercept when alpha near 0 or infr   r   rV   r   )	r@   iscloser   r   r   r   r   zerosrA   )rz   rp   ry   r   lin_regrS   s         rF   _ridge_regularization_limitsrl  k  sr    	zz%"?Aq}}g0000 WWQZ
xx
#=RWWQZIIcIIrH   缉ؗҜ<g 7yAC
zero_alpha	inf_alpha)r7   r9   r:   r8   d   2   rr  rq  c                    |t         v }|dk(  r|rt        j                  d       |dk(  r|r|rt        j                  d       |\  }}t        ||ddd      \  }}	t	        | ||	|      \  }
} ||      }t        | ||d	
      }|j                  ||	       t        |j                  |
d       t        |j                  |d       y)z:Check regularization limits of Ridge (alpha near 0 or inf)r7   z)solver='svd' does not support sparse datar9   zGsolver='cholesky' does not support fitting the intercept on sparse datar   rZ   r   rR   rS   r#  r"  rU   r   )rz   r   r   r   r   r   N)
r4   r   r   r   rl  r   r   r*   r   r   )rz   r   r   rT  rS  sparse_XrR   rS   rp   ry   expected_coefexpected_interceptr   s                rF    test_regularization_limits_ridgery  x  s     n,H8?@]U	
 $Iz
!"SUDAq )Eq!])%M% 	AAfMuUE	IIaOEKKU;E$$&8uErH   ignored)rp  )rr  rr  rs  )rU  squarerM   c                    |t         v }| g}|\  }}	t        ||	d      \  }
}d|z  dz
  }t        j                  | d      r5|	|k  rt	        j
                  d       n|	|k(  rt	        j
                  d       t        | |
||      \  }} ||
      }
|
j                  |      }
|j                  |      }t        ||      }|d	k(  r;|r9d
}t	        j                  t        |      5  |j                  |
|       ddd       n|j                  |
|       |t        j                  k(  rdnd}t        |j                  ||       t        |j                  ||       y# 1 sw Y   QxY w)zFCheck regularization limits of RidgeClassifierCV (alpha near 0 or inf)r   rR   rS   rU   rJ   rV   r   zVRidgeClassifierCV does not recover LinearRegression on tall X in the small alpha limitzXRidgeClassifierCV does not recover LinearRegression on square X in the small alpha limit)r<  r   r7   ,The 'svd' mode is not supported for sparse Xr   Nrb  r   r   )r4   r   r@   ri  r   r   rl  r?  r   r   FutureWarningr   r4  r*   r   r   rz   rQ  r   rT  rA  rS  rv  r<  rR   rS   rp   ry   rw  rx  rf  expected_msgr   s                    rF   /test_regularization_limits_ridge_classifier_gcvr    sS    n,HWF#Iz
DAq 	
A	A	zz%	!LL5 9$LL7 )Eq!])%M% 	AA	A	A!}MI5XE\\-|<MM!Q =< 	aBJJ&4EDIOO]>I((*<4H =<s   !EE c                 &   |t         v }| g}|\  }}	t        ||	ddd      \  }
}t        | |
||      \  }} ||
      }
|
j                  |      }
|j                  |      }t	        |||      }|dk(  r;|r9d}t        j                  t        |      5  |j                  |
|       d	d	d	       n|j                  |
|       |t        j                  k(  rd
nd}t        |j                  ||       t        |j                  ||       y	# 1 sw Y   QxY w)z>Check regularization limits of _RidgeGCV (alpha near 0 or inf)r   rZ   r   ru  )r<  rQ  r   r7   r~  r   Nrb  r   r   )r4   r   rl  r?  r   r   r   r  r   r@   r4  r*   r   r   r  s                    rF   $test_regularization_limits_ridge_gcvr    s	    n,HWF#Iz
!"SUDAq )Eq!])%M% 	AA	A	AvVI5XE\\-|<MM!Q =< 	aBJJ&4EDIOO]>I((*<4H =<s   DDc            	         d} d\  }}d}t        |||dddd      \  }}g d}t        |d	|| 
      }t        d	||       }|j                  ||       |j                  ||       |j                  t	        j
                  |j                        k(  s!J d|j                  d|j                         t        |j                  |j                  d       t        |j                  |j                  d       y )Nexplained_variance)rZ   r   rV   r   Fr   r^  r_  Tr`  )r   r<  rH  zgcv_ridge.alpha_=z, loo_ridge.alpha_=rX   r>  )	r/  r   r   rc  r   r   r*   r   r   )	rH  rR   rS   r   rp   ry   r<  re  rf  s	            rF   test_ridge_loo_cv_asym_scoringr    s    "G!IzI)DAq )FDI d67KIMM!QMM!Qv}}Y-=-=>> 9
1	 0 023> IOOY__4@I(()*>*>TJrH   rS   r   r   zy_shape, fit_intercept, noise))rW  Tr   )rX  Tg      4@)rZ  Tr[  )rZ  FrY  c                    | dk(  r|t         v rt        j                  d       g d}t        j                  j                  d      }t        |      dk(  r|d   nd}t        d||dd	|
      \  }	}
|
j                  |      }
d|j                  t        |	            z  }||j                         z
  dz   j                  t              }t        j                  t        j                  |	j                  d         |      }|j                  t               }|	|   |
|   }}t#        |	j                  d         }|j%                  |||      }t'        ||d|      }|j)                  ||       t+        |j,                  |      }|j%                  |||      }t/        ||||      }|j                  |j                  k7  r|j                  |j                        }||z
  dz  }t        j                  |	j                  d         D cg c]  }t        j0                  |||k(     d      ! }}t        j2                  |      } ||	      }t'        |d| |      }|j)                  ||
|       t        |      dk(  r0|j4                  d d d d |j7                  |j,                        f   }n,|j4                  d d |j7                  |j,                        f   }|j,                  t        j8                  |j,                        k(  sJ t;        ||d       t;        |j<                  |j<                  d       t;        |j>                  |j>                  d       y c c}w )Nr7   r]  r_  r   rJ   rW   rV   r   F)rR   rS   r   rU   r$  r#  r   )n_splits)groupsrG  )r<  ra  rH  r   r   ra  r   T)r<  rI  rQ  r   r   rX   r  ) r4   r   r   r@   rb   rc   r  r/  r   r   ra   r?  intrepeatr   r   r   r   splitr   r   r   rc  r!   r   r%  rK  indexr   r*   r   r   )rQ  rS  r   rS   rd  r#  r<  ro   r   rp   ry   r   indicesX_tiledy_tiledra  splitskfold	ridge_regpredictionskfold_errorsiX_gcvrf  
gcv_errorss                            rF   test_ridge_gcv_sample_weightsr    s    5k^;<=(F
))


"C"7|q0aI)DAq 	
		'A		#a&))M"]%6%6%881<DDSIMii		!''!*-}=G!((/Mz1W:WG	QWWQZ	(BXXgwwX7F(#	E 
IIgwELLFIXXgwwX7F#IwF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   $M))r   rJ   r   r   )rJ   r   )autor7   rR  c                 J   |\  }}t        ||      \  }}| d u}|r | |      }||k  rdnd}|dk(  r|st        ||      dk(  sJ y |dk(  r<|r:d}	t        j                  t        |	      5  t        ||      }
d d d        
|k(  sJ y t        ||      |k(  sJ y # 1 sw Y   #xY w)N)rR   rS   gramcovr7   r~  r   )r   r   r   r   r  )r   rT  rQ  nprp   rw   rv  
eigen_moder  actual_gcv_modes              rF   test_check_gcv_mode_choicer  a  s     DAqQ15DAqt+HQ6uJ5q(+u444	U	xE\\-|<-a:O =*,,,q(+z999	 =<s   *BB"c                    t         j                  d   }g }| 	t         d}}n | t               d}}t        |      }|j                  |t               |j
                  }|j                  |       t        }t        t        d      }t        d|      }	  ||	j                        |t               |	j
                  t        j                  |      k(  sJ d }
t        |
      }t        d|      }  ||j                        |t               |j
                  t        j                  |      k(  sJ t        d      }t        d|      }|j                  |t               |j
                  t        j                  |      k(  sJ | O|j                  |t        t        j                  |      	       |j
                  t        j                  |      k(  sJ t        j                   t        t        f      j"                  }|j                  ||       |j%                  |      }|j                  |t               |j%                  |      }t'        t        j                   ||f      j"                  |d
       |S )Nr   TFr   )greater_is_better)r   rH  c                     t        | |       S r?   )r   )xry   s     rF   funcz_test_ridge_loo.<locals>.func  s    "1a(((rH   rG  r   rb  r  )r   r   r   r   r   rc  appendr.   r   r   r   r   r   r   r@   r   vstackrg   r   r*   )r   rR   retrp   r   rN  rc  frH  
ridge_gcv2r  
ridge_gcv3scorer
ridge_gcv4r   Y_predrD   s                    rF   _test_ridge_loor  |  s     #I
C%t=+J7=6I MM!Z FJJv 	A,FGug>JAjnna$f 5555) $Gug>JAjnn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q!FMM!Z q!FBIIvv./116EJrH   c                 B   | t         n | t               }t               }|j                  |t               |j	                  |       t        |j                  j                        dk(  sJ t        |j                        t        j                  u sJ t        d      }|j                  |       |j                  |t               |j	                  |       t        |j                  j                        dk(  sJ t        |j                        t        j                  u sJ y )NrV   r   r  )r   r   r   r   r   r  r   r   typer   r@   r7  r   
set_params)r   rp   ridge_cvra  s       rF   _test_ridge_cvr    s    &.
4DZ4PAyHLLJQx~~##$)))##$

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

222rH   zridge, make_dataset)rI  c                 t     |dd      \  }}t        |       } | j                  ||       t        | d      rJ y )N   r   rR   rU   rK  )r   r   hasattr)r   make_datasetrp   ry   s       rF   $test_ridge_gcv_cv_results_not_storedr    s=     !"5DAq%LE	IIaOum,,,,rH   ra  r   c                      |dd      \  }}t        |       } | j                  d|       | j                  ||       t        | d      sJ t	        | j
                  t              sJ y )Nr  r   r  F)rI  ra  best_score_)r   r  r   r  r   r  r   )r   r  ra  rp   ry   s        rF   test_ridge_best_scorer    sc     !"5DAq%LE	e3	IIaO5-(((e''///rH   c            	         t         j                  j                  d      } d\  }}}| j                  ||      }t        j                  |d d dgf   t        j
                  d|f            t        j                  |d d dgf   dt        j
                  d|f      z        z   t        j                  |d d dgf   dt        j
                  d|f      z        z   | j                  ||      z   }d}|j                  D cg c](  }t        |	      j                  ||      j                  * }}t        |d
      j                  ||      }	t        ||	j                         t        t        |	j                        j                  ||      j                  |	j                         t        |d
d
      j                  ||      }	|	j                  j                  |fk(  sJ |	j                  j                  |fk(  sJ |	j                   j                  |t#        |      |fk(  sJ t        dd
d
      j                  ||      }	|	j                  j                  |fk(  sJ |	j                  j                  |fk(  sJ |	j                   j                  ||dfk(  sJ t        |d
d
      j                  ||d d df         }	t        j$                  |	j                        sJ t        j$                  |	j                        sJ |	j                   j                  |t#        |      fk(  sJ t        |d
d      j                  ||      }	t        ||	j                         t        t        |	j                        j                  ||      j                  |	j                         t        |t'               d
      }	d}
t)        j*                  t,        |
      5  |	j                  ||       d d d        t        |dd
      }	t)        j*                  t,        |
      5  |	j                  ||       d d d        y c c}w # 1 sw Y   SxY w# 1 sw Y   y xY w)Nr   )r   r   r   r   rV   g?rJ   rX   )rV   rq    r;  T)r<  alpha_per_targetr   )r<  r  rI  r2)r<  r  rH  )r<  ra  r  z3cv!=None and alpha_per_target=True are incompatibler   r  )r@   rb   rc   r   r   r   rg   r   r   rc  r-   r,   r   r   r   r  rK  r  isscalarr    r   r   r   )ro   rR   rS   r   ry   rp   r<  r   optimal_alphasr  msgs              rF   "test_ridge_cv_individual_penaltiesr    s    ))


#C (0$Iz9		)Y'A
qQCy"''1j/23
&&1qc6D277Az?#;;
<	=
&&1qc6EBGGQ
O$<<
=	> ))Iz
*	+  F RSQTQTUQTvgV,00F;BBQTNU ft<@@AFH~x7 HOO$((A.44hnn
 ftdSWW	1H ??  YL000%%)555%%)S[))LLLL a$NRRSTVWXH??  YL000%%)555%%)Y)BBBB ftdSWW	1QT7H ;;x''';;x++,,,%%)S[)AAAA ftTJNNqRSTH~x7HOO$((A.44hnn fNH
?C	z	-Q 
.fTBH	z	-Q 
.	-a VZ 
.	- 
.	-s   <-P+P0P<0P9<Qc                     | t         n | t               }t        d      }|j                  |t               t	        j
                  |j                  |t              d      S )NFr   r   )r   r   r   r   r@   roundr   )r   rp   r   s      rF   _test_ridge_diabetesr  ,  sH    &.
4DZ4PA&E	IIa88EKK:.22rH   c                    | t         n | t               }t        j                  t        t        f      j                  }t         j
                  d   }t        d      }|j                  ||       |j                  j
                  d|fk(  sJ |j                  |      }|j                  |t               |j                  |      }t        t        j                  ||f      j                  |d       y )NrV   Fr   rJ   r   decimal)r   r@   r  r   rg   r   r   r   r   r   r,   )r   rp   r   rS   r   r  rD   s          rF   _test_multi_ridge_diabetesr  3  s    &.
4DZ4PA
		:z*+--A!!!$J&E	IIaO;;J///]]1F	IIa]]1Fbii(89;;VQOrH   c                 X   t        j                  t              j                  d   }t        j                  d   }| t        n | t              }t               t               fD ]g  }|j                  |t               |j                  j                  ||fk(  sJ |j                  |      }t        j                  t        |k(        dkD  rgJ  t        d      }t        |      }|j                  |t               |j                  |      }t        j                  t        |k(        dk\  sJ y )Nr   rV   gHzG?r   r  g?)r@   uniquey_irisr   X_irisr   r   r   r   r   rA   r   )r   	n_classesrS   rp   regrD   ra  s          rF   _test_ridge_classifiersr  B  s    		&!''*IaJ"*0@0HA!#4#676yy9j"9999Qwwv'(4///	 8 
qB
r
"CGGAv[[^F776V#$+++rH   rH  accuracyr   c                     | t         n | t               }t        |      rt        |      n|}t        ||      }|j	                  |t
              j                  |       y )N)rH  ra  )r  callabler   r   r   r  r   )r   rH  ra  rp   scoring_clfs         rF   "test_ridge_classifier_with_scoringr  T  sN     #*0@0HA'/'8{7#gH
H
4CGGAvq!rH   c                 R   d }| t         n | t               }t        j                  ddd      }t        |t	        |      |      }|j                  |t               |j                  t        j                  d      k(  sJ |j                  t        j                  |d         k(  sJ y )	Nc                      y)NzG?r   rB   s      rF   _dummy_scorez:test_ridge_regression_custom_scoring.<locals>._dummy_scoreh  s    rH   rJ   r   )num)r<  rH  ra  r  r   )r  r@   logspacer   r   r   r  r  r   r   rc  )r   ra  r  rp   r<  r  s         rF   $test_ridge_regression_custom_scoringr  b  s     #*0@0HA[[QA&F
6;|3LQS
TCGGAv??fmmD1111::vay1111rH   c                    | t         n | t               }t        dd      }|j                  |t               |j	                  |t              }t        dd      }|j                  |t               |j	                  |t              }||k\  sJ y )Nrb  F)r   r   rX   )r   r   r   r   r   )r   rp   r   r   ridge2score2s         rF   _test_tolerancer  t  st    &.
4DZ4PAd%0E	IIaKK:&Et51F
JJq*\\!Z(FF??rH   c           	      8   t        |||      \  }}t        j                  |      }t        j                  |      }	|j	                  ||      }
|j	                  |	|      }|j                  ||	       |j                  }|j                  }t        d      5  t        |      j                  |
|      }|j                  }|j                  |j                  k(  sJ |j                  |
j                  k(  sJ t        t        |t        d      ||t        |             |j                  }|j                  |j                  k(  sJ |j                  |
j                  k(  sJ t        t        |t        d      ||t        |             d d d        y # 1 sw Y   y xY w)NdeviceTarray_api_dispatchcpuxpr  r>  r   )r/   r  r?  r  r%  r   r   r   r   r   r   rA  r*   r&   r@   r%   )name	estimatorarray_namespacedevice_name
dtype_namer>  r  r  	X_iris_np	y_iris_np	X_iris_xp	y_iris_xpcoef_npintercept_npestimator_xpcoef_xpintercept_xps                    rF   check_array_api_attributesr    s]    &o{JOJBj)Ij)I

9V
4I

9V
4IMM)Y'ooG''L	4	0Y'++IyA$$}}---}}	///G51
+		
 $..!!\%7%7777!!Y__444LR6
+		
! 
1	0	0s   C0FFz(array_namespace, device_name, dtype_namecheckr  r   )rQ  c                 J    | j                   j                  } ||| |||       y )N)r  r  )	__class____name__)r  r  r  r  r  r  s         rF   test_ridge_array_api_compliancer	    s,    . ''D	rH   c                    t        |||      \  }}t        d      \  }}|j                  |      }|j                  |      }	| j                  ||	      }
|
j	                  |      }|
j
                  j                         }t        d      5  |j                  ||      |j                  |	|      }}| j                  ||      }|j	                  |      }|j                  |j                  cxk(  r|j                  k(  sJ  J t        t        |t        d      |       t        t        |j
                  t        d      |       d d d        y # 1 sw Y   y xY w)Nr   rU   Tr  r  r  r  )r/   r
   r?  r   r   classes_r'  r   r%  r   r*   r&   r@   r-   )r  r  r  r  r  r  rp   ry   X_npy_npridge_nppred_np
classes_npX_xpy_xpridge_xppred_xps                    rF   *test_ridge_classifier_multilabel_array_apir    s    &o{JOJB)q9DAq88JD88JD}}T4(Ht$G""'')J	4	0ZZVZ4bjjfj6Ud==t,""4(}}888888Bu=wG78#4#4EJJW 
1	0	0s   B:EEc           	         t        | ||      \  }}t        ddd      \  }}|j                  |      }|j                  |      }t        j                  g d|      }	t        |	d      j                  ||      }
|
j                  |      }t        d	
      5  |j	                  ||      |j	                  ||      }}|	|j	                  |	|      fD ]  }t        |d      j                  ||      }|j                  |      }|j                  |j                  cxk(  r|j                  k(  sJ  J t        t        |t        d      |t        |              	 ddd       y# 1 sw Y   yxY w)ztCheck that passing an array for alpha works with array API dispatch.

    Non-regression test for issue #34003.
    r   rZ   r   )r   rS   rU   )r   r5  r   )rA  r7   r   Tr  r  r  r  r   N)r/   r   r?  r@   r%  r   r   r   r   r   r*   r&   r%   )r  r  r  r  r  rp   ry   r  r  r<  r  r  r  r  rz   r  r  s                    rF   %test_ridge_per_target_alpha_array_apir    sA    &o{JOJBQ2AFDAq88JD88JDZZ(
;F6%044T4@Ht$G	4	0ZZVZ4bjjfj6Ud bjjj?@E57;;D$GH&&t,G==GMM<QWW<<<<<Bu5#J/	 A	 
1	0	0s   CE%%E.r  )include_numpy_namespacesc                    t        | d       \  }}|j                  t        d d       }|j                  t        d d       }t        j
                  d   d   j                  }|ddhz
  D ]p  }t	        ||dk(        }d	|j                   d
| d}t        j                  t        |      5  t        d      5  |j                  ||       d d d        d d d        r t	        dd      }d|j                   d}t        j                  t        |      5  t        d      5  |j                  ||       d d d        d d d        t	               }d|j                   d}t        j                  t        |      5  t        d      5  |j                  ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   CxY w# 1 sw Y   y xY w)Nr  r   r   r   r  r7   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.)r/   r%  r  r  r   _parameter_constraintsoptionsr  r   r   r   r   r   r   UserWarning)	r  r  rw   r  r  available_solversr   r   r  s	            rF   6test_array_api_error_and_warnings_for_solver_parameterr"    s    !dCEB

6"1:&I

6"1:&I44X>qAII#vuo5Vf.?@.r{{m <""(- 	
 ]]:\:48		)Y/ 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   )F56F)	F5G G3G8G&GG&)F2.F55F?	G	GGG#	G&&G/c                    t        | d       \  }}|j                  t        d d       }|j                  t        d d       }t	               }d}t        j                         5  t        j                  d|t               t        d      5  |j                  ||       d d d        d d d        t        d      5  t	        dd	      j                  ||       d d d        y # 1 sw Y   DxY w# 1 sw Y   HxY w# 1 sw Y   y xY w)
Nr  r   zkResults might be different than when Array API dispatch is disabled, or when a numpy-like namespace is usederror)messagecategoryTr  r  r  )r/   r%  r  r  r   warningscatch_warningsfilterwarningsr   r   r   )r  r  rw   r  r  r   r  s          rF   )test_array_api_numpy_namespace_no_warningr*  2  s     dCEB

6"1:&I

6"1:&IGE	; 
 
	 	 	"Tt4IIi+ 5 
# 
4	0Vd+//	9E 
1	0 54 
#	" 
1	0s0   !)C,
C C,9C8 C)	%C,,C58D	test_funcc                 L     | d       } | |      }||t        ||d       y y y )Nr   r  )r,   )r+  r   	ret_dense
ret_sparses       rF   test_dense_sparser/  J  s6     $I=)J!7!)ZC "8rH   c                     t        j                  ddgddgddgddgddgg      } g d}t        d       }|j                  | |       t	        |j                  ddgg      t        j                  d	g             t        d	d
i      }|j                  | |       t	        |j                  ddgg      t        j                  dg             t        d      }|j                  | |       t	        |j                  ddgg      t        j                  d	g             t        j                  ddgddgddgddgg      } g d}t        d       }|j                  | |       t        d      }|j                  | |       t        |j                        dk(  sJ t        |j                  |j                         t        |j                  |j                         y )N      r   皙r   r   rV   rV   rV   rW   rW   class_weightr8  rV   rX   rW   balanced)rV   rV   rW   rW   rJ   )r@   r   r   r   r-   r   r  r  r,   r   r   )rp   ry   r  regas       rF   test_class_weightsr8  `  s   
4,q	D$<#sc3ZPQAA
t
,CGGAqMs{{S$K=1288QC=A 5z
2CGGAqM s{{S$K=1288RD>B z
2CGGAqMs{{S$K=1288QC=A 	4,q	D$<#sDEAA
t
,CGGAqM
3DHHQNt}}"""cii4cnndoo>rH   r  c                     |        }|j                  t        j                  t        j                          | d      }|j                  t        j                  t        j                         t	        |j
                  |j
                         t        j                  t        j                  j                        }|t        j                  dk(  xx   dz  cc<   dddd} |        }|j                  t        j                  t        j                  |        | |      }|j                  t        j                  t        j                         t	        |j
                  |j
                          |        }|j                  t        j                  t        j                  |dz          | |      }|j                  t        j                  t        j                  |       t	        |j
                  |j
                         y	)
z5Check class_weights resemble sample_weights behavior.r6  r4  rV   rq  r   g      Y@)r   rV   rJ   rJ   N)	r   irisdatar   r+   r   r@   r   r   )r  reg1reg2r   r5  s        rF   "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/rH   c                  @   t        j                  ddgddgddgddgddgg      } g d}t        d g d      }|j                  | |       t        d	d
ig d      }|j                  | |       t	        |j                  ddgg      t        j                  dg             y )Nr1  r   r2  r   r   r3  )r   r5  rV   )r5  r<  rV   rX   )r   r5  rV   rZ   gɿrJ   rW   )r@   r   r   r   r-   r   )rp   ry   r  s      rF   test_class_weights_cvr@    s    
4,q	D$<#sc3ZPQAA
n
ECGGAqM !U<N
OCGGAqMs{{T1I;/2$@rH   rG  c                    t         j                  j                  d      }d}d}|j                  ||      }g d}t	        |      }t        |       rt        |       n| }t        |d d|      }|j                  |      }	|j                  ||	       |j                  j                  ||fk(  sJ d}
|j                  ||
      }	|j                  ||	       |j                  j                  ||
|fk(  sJ t        dd|       }t        j                  t        d	
      5  |j                  ||	       d d d        y # 1 sw Y   y xY w)Nr   r   r   rE  Tr<  ra  rI  rH  r   )ra  rI  rH  zcv!=None and store_cv_resultsr   )r@   rb   rc   r   r  r  r   r   r   rK  r   r   r   r   )rH  ro   rR   rS   r  r<  n_alphasr  rry   r   s              rF   test_ridgecv_store_cv_resultsrE    s    ))


#CIJ		)Z(AF6{H'/'8{7#gHv$xPA 			)AEE!QK==9h"7777 I		)Y'AEE!QK==9i"BBBB1tW=A	z)H	I	a 
J	I	Is   D55D>c                 >   t        j                  ddgddgddgddgddgg      }t        j                  g d      }|j                  d   }g d}t        |      }t	        |       rt        |       n| }t        |d d|	      }d
}|j                  ||       |j                  j                  |||fk(  sJ t        j                  g dg dg dg      j                         }|j                  d
   }|j                  ||       |j                  j                  |||fk(  sJ y )Nr1  r   r2  r   r   r3  rE  TrB  rV   )rV   rW   rV   rW   rV   )rW   rW   rV   rW   rW   )
r@   r   r   r  r  r   r   r   rK  	transpose)	rH  r  ry   rR   r<  rC  r  rD  r   s	            rF   )test_ridge_classifier_cv_store_cv_resultsrH    s   
4,q	D$<#sc3ZPQA
"#A
IF6{H'/'8{7#gH$x	A
 IEE!QK==9i"BBBB 		-/BC	ik  
IEE!QK==9i"BBBBrH   	Estimatorc                    t         j                  j                  d      }d}d\  }}| t        u r|j	                  |      }n|j                  dd|      }|j	                  ||      } | |      }|j                  |u sJ d| j                   d       |j                  ||       t        |j                  t        j                  |             y )Nr   rE  r  rJ   r;  z`alphas` was mutated in `z
.__init__`)r@   rb   rc   r   r   rJ  r<  r  r   r-   r%  )rI  ro   r<  rR   rS   ry   rp   	ridge_ests           rF   test_ridgecv_alphas_conversionrL    s    
))


"CF IzGIIi KK1i(		)Z(A(Iv% 
#I$6$6#7zB% MM!Qy''F);<rH   c                    t         j                  j                  d      }d}d\  }}|t        u r|j	                  |      }n|j                  dd|      }|j	                  ||      } |||       }| 7t        j                  t        d      5  |j                  ||       ddd       y|j                  ||       y# 1 sw Y   yxY w)	z1Check alpha=0.0 raises error only when `cv=None`.r   )r   r   rF  r  rJ   r<  ra  Nz"alphas\[0\] == 0.0, must be > 0.0.r   )
r@   rb   rc   r   r   rJ  r   r   r   r   )	ra  rI  ro   r<  rR   rS   ry   rp   rK  s	            rF   test_ridgecv_alphas_zerorO    s     ))


"CF IzGIIi KK1i(		)Z(AB/I	z]]:-RSMM!Q TS 	a TSs   B<<Cc                     t         j                  j                  d      } d}dD ]  \  }}| j                  |      }| j                  ||      }d| j	                  |      z   }t        d      }t        ||      }|j                  |||       d|i}	t        t               |	|	      }
|
j                  |||       |j                  |
j                  j                  k(  sJ t        |j                  |
j                  j                          y )
Nr   rE  )r  r   r   r   r   rN  r   rz   r  )r@   rb   rc   r   randr   r   r   r   r   rc  best_estimator_rz   r,   r   )ro   r<  rR   rS   ry   rp   r   ra  r1  
parametersgss              rF   test_ridgecv_sample_weightrV    s    
))


"CF "3	:IIi IIi,chhy111XB/Aq6 v&
%':"5
q!=1~~!3!3!9!9999!'--1C1C1I1IJ "3rH   c                     ddg} ddg}t         j                  j                  d      }t        | |      D ]!  \  }}|j	                  ||      |j	                  |      |j	                  |      dz  dz   }d}d}|d d t         j
                  f   |t         j
                  d d f   t        d      j                  |       j                  |       j                  |       fd}fd	}	d
}
t        j                  t        |
      5   |        d d d        d
}
t        j                  t        |
      5   |	        d d d        $ y # 1 sw Y   :xY w# 1 sw Y   <xY w)NrJ   r   r   rV   r   g       @r   c                  ,    j                          y r?   r   )rp   r   sample_weights_not_OKry   s   rF   fit_ridge_not_okzStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_okG  s    IIa12rH   c                  ,    j                          y r?   rY  )rp   r   sample_weights_not_OK_2ry   s   rF   fit_ridge_not_ok_2zUtest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2J  s    IIa34rH   z)Sample weights must be 1D array or scalarr   )r@   rb   rc   r   r   r   r   r   r   r   r   )
n_samplessn_featuressro   rR   rS   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r[  r^  r   rp   r   rZ  r]  ry   s              @@@@@rF   9test_raises_value_error_if_sample_weights_greater_than_1drd  /  sG    QJa&K
))


#C!$Z!=	:IIi,IIi IIi0A59!! 1!RZZ- @"3BJJM"BA 			!Q)*		!Q+,		!Q+,	3	5 >]]:W5 6 >]]:W5  657 ">. 65 65s   EE+E(	+E5	zn_samples,n_featuresrJ   c                    t         j                  j                  d      }t        dd      }t        dd      }|j	                  | |      }|j	                  |       }|j	                  |       dz  dz   } ||      }	|j                  |	||       |j                  |||       t        |j                  |j                  d	       y )
Nr   r   Fr   rJ   rV   r   r  r  )r@   rb   rc   r   r   r   r,   r   )
rR   rS   r   ro   sparse_ridgedense_ridgerp   ry   sample_weightsr  s
             rF   &test_sparse_design_with_sample_weightsri  V  s     ))


#Cs%8Lc7K		)Z(A		)AYYy)Q.2N"HXq?OOAqO7l00+2C2CQOrH   c                      t        j                  ddgddgddgddgddgg      } g d}t        d      }|j                  | |       y )	Nr1  r   r2  r   r   r3  )rV   rZ   rq  r;  )r@   r   r   r   )rp   ry   r   s      rF   test_ridgecv_int_alphasrk  l  sM    
4,q	D$<#sc3ZPQAA <(E	IIaOrH   zparams, err_type, err_msgr<  )rV   rW   iz alphas\[1\] == -1, must be > 0.0)gr1  g      $z"alphas\[0\] == -0.1, must be > 0.0)rV   r   1z1alphas\[2\] must be an instance of float, not strc                     d\  }}t         j                  ||      }t         j                  dd|      }t        j                  ||      5   | di |j                  ||       ddd       y# 1 sw Y   yxY w)z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.r  r   rJ   r   Nr   )ro   r   rJ  r   r   r   )rI  rN   err_typer   rR   rS   rp   ry   s           rF   test_ridgecv_alphas_validationro  u  sb    ( !Iz		)Z(AAq)$A	xw	/F1% 
0	/	/s   
A,,A5c                     d\  }}t         j                  ||      }| t        u rt         j                  |      }nt         j                  dd|      } | d      j	                  ||       y)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   rJ   rV   r;  N)ro   r   r   rJ  r   )rI  rR   rS   rp   ry   s        rF   test_ridgecv_alphas_scalarrq    s[     !Iz		)Z(AGIIi KK1i(QAq!rH   c                      t        dd      } | j                  t        t               | j                  j
                  d   t        j
                  d   k(  sJ y )Nr8   rV   )r   r   r   )r   r   r   r   r   r   )r  s    rF   test_sparse_cg_max_iterrs    sB    
{Q
/CGGJ
#99??1!1!1!!4444rH   z-ignore::sklearn.exceptions.ConvergenceWarningc            	         d} t         t        }}t        j                  || df      j                  }t        dd      D ]S  }dD ]L  }t        ||d      }|j                  ||       t        |j                  t        j                  ||              N U dD ]0  }t        |dd      }|j                  ||       |j                  0J  y )	NrJ   rV   rQ   )r;   r<   r:   r   )r   r   r   )r8   r7   r9   r5  )
r   r   r@   tilerg   ranger   r   r-   n_iter_)r   rp   ry   y_nr   r   r  s          rF   test_n_iterry    s     IzqA
''!i^
$
&
&C!QK-FveDCGGAsOs{{BGGHi,HI .   36A483{{""" 3rH   )r:   r8   r  r  with_sample_weightc                    | dk(  }t        d||      \  }}d}|rAt        j                  j                  |      }d|j	                  |j
                  d         z   }| dk(  rd	n| }	t        |	d
|      }
t        | d
|      }|
j                  |||       |j                   ||      ||       t        |
j                  |j                         t        |
j                  |j                  d       y)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   )rS   rU   r+  Nr   r   r_   r  r8   r   )r   r   r+  r   gƠ>r  )r/  r@   rb   rc   re   r   r   r   r*   r   r   )r   rz  rl   r   r+  rp   ry   r   ro   dense_solverrg  rf  s               rF   test_ridge_fit_intercept_sparser}    s       H)$6DAq Mii##$67ckkqwwqzk:: #)F"2;L|JKEHELOOAqO6]1%qFK**L,C,CDK%%|'9'9ErH   )r<   r7   r9   c                     t        dd      \  }} ||      }t        |       }dj                  |       }t        j                  t
        |      5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   )rS   rU   r  zsolver='{}' does not supportr   )r/  r   formatr   r   r   r   )r   r   rp   ry   X_csrrf  r   s          rF   %test_ridge_fit_intercept_sparse_errorr    sb     *RaHDAq!E'L,33F;G	z	1" 
2	1	1s   A--A6c                    t        dd|d      \  }}| rBt        j                  j                  |      }d|j	                  |j
                  d         z   }nd } ||      }t        ddd	d
d      }t        di |}	t        di |}
|	j                  |||       t        j                         5  t        j                  dt               |
j                  |||       d d d        t        |	j                  |
j                  d       t        |	j                  |
j                  d       t!        j"                  t        d      5  t        dd	dd       j                  ||       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   g      @)rS   rR   rU   r*  r   r   r_   r;   Tr   r   )rz   r   r   r   r   r   r$  -C6?r  z"sag" solver requires.*r   rX   )r   r   r   r   r   )r/  r@   rb   rc   re   r   r   r   r   r'  r(  simplefilterr   r*   r   r   r   r   )rz  rl   r   rp   ry   ro   r   r  rN   rg  rf  s              rF   #test_ridge_fit_intercept_sparse_sagr    sP   
 *1CcDAq ii##$67ckkqwwqzk::!E%tF /&/K?6?LOOAqO6		 	 	"g{3? 
# K**L,C,C$OK%%|'9'9E	k)B	CU$D4HLLUTUV 
D	C 
#	"
 
D	Cs   //E. E:.E7:Freturn_interceptr   r  	container)r  r8   r9   r:   r;   r<   r  c                    t        d      }|j                  dd      }g d}t        j                  ||      }d}| rd}||z  } ||      }	d\  }
}t        rdnd	}|d
k(  }|dvr;| r9t        j                  t        d      5  t        |	||
||| |||	       ddd       yt        |	||
|||| ||	      }| r$|\  }}t        ||d|       t        ||d|       yt        ||d|       y# 1 sw Y   yxY w)z=check if all combinations of arguments give valid estimationsr   r  r   )rV   rJ   r5  r   g     @)rX   ư>rX   r  r  )r;   r  zIn Ridge, only 'sag' solverr   )rz   r   r   r  r+  r   rU   N)rz   r   r   r+  r  r   rU   r   r  )
r#   rR  r@   r   r1   r   r   r   r   r*   )r  r   r  r   ro   rp   
true_coefsry   true_intercept	X_testingrz   r   r   r+  outr   r   s                    rF   .test_ridge_regression_check_arguments_validityr    s     R
 CqAJ
q*AN A!IJE34$D H_$)9]]:-JK+!1! 
 L 	
	#)
C ijqt<	>EZad;? L 	s    C((C1)r7   r8   r9   r:   r;   r<   r  c                    t         j                  j                  d      }d}| dk(  }d\  }}|j                  ||      }|j                  |      }|j	                  t         j
                        }|j	                  t         j
                        }	dt        j                  t         j
                        j                  z  }
t        || d|
|      }|j                  ||	       |j                  }t        || d|
|      }|j                  ||       |j                  }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |      j                  |j                  k(  sJ |j                  |      j                  |j                  k(  sJ t        |j                  |j                  dd	
       y )Nr   r   r  rQ  rJ     )rz   r   r   r   r+  r  gMb@?r  )r@   rb   rc   r   r?  r4  finfo
resolutionr   r   r   rA  r   r*   )r   ro   rz   r+  rR   rS   X_64y_64X_32y_32r   ridge_32coef_32ridge_64coef_64s                  rF   test_dtype_matchr  M  sx    ))


"CE H Iz99Y
+D99YD;;rzz"D;;rzz"D
bhhrzz"--
-CFScHH LLtnnG FScHH LLtnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555HNNHNNDIrH   c                  D   t         j                  j                  d      } t        j                  ddg      }d\  }}}| j	                  ||      }| j	                  ||      }|j                  t         j                        }|j                  t         j                        }t        |d      }	|	j                  ||       |	j                  }
t        |d      }|j                  ||       |j                  }|
j                  |j                  k(  sJ |j                  |j                  k(  sJ |	j                  |      j                  |j                  k(  sJ |j                  |      j                  |j                  k(  sJ t        |	j                  |j                  d       y )	Nr   r   r   )r  r  rJ   r9   r   r   r  )r@   rb   rc   r   r   r?  r4  r   r   r   rA  r   r+   )ro   rz   rR   rS   n_targetr  r  r  r  r  r  r  r  s                rF   test_dtype_match_choleskyr  r  sL    ))


"CHHc3Z E&-#Iz899Y
+D99Y)D;;rzz"D;;rzz"D 54HLLtnnG 54HLLtnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555BrH   )r7   r9   r:   r8   r;   r<   r  seedc                    t         j                  j                  |      }d\  }}|j                  ||      }|j                  |      }t        j                  ||      d|j                  |      z  z   }d}| dk(  }	t               }
| dk(  rdnd}t         j                  t         j                  fD ]9  }t        |j                  |      |j                  |      || |d |	dd	d
d
      |
|<   ; |
t         j                     j                  t         j                  k(  sJ |
t         j                     j                  t         j                  k(  sJ t        |
t         j                     |
t         j                     |       y )NrQ  r   r   r  r8   rX   rb  r  r   F)	rz   r   rU   r   r+  r   r   return_n_iterr  r   )r@   rb   rc   r   r   r   r4  r7  r   r?  rA  r*   )r   r  rU   rR   rS   rp   r   ry   rz   r+  resultsr   current_dtypes                rF   %test_ridge_regression_dtype_stabilityr    sI   
 99((.L Iz9j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HrH   c                      t        d      \  } }t        j                  |       } | d d dd d f   } |d d d   }t        d      j	                  | |       y )Nr   r  rJ   r;   r  )r   r@   asfortranarrayr   r   )rp   ry   s     rF   test_ridge_sag_with_X_fortranr    sS    +DAq
!A	#A#q&	A	#A#A	Aq!rH   zClassifier, paramsc                 n   t        dd      \  }}|j                  dd      }t        j                  ||gd      } | d	i |j	                  ||      }|j                  |      }|j                  |j                  k(  sJ t        |dddf   |dddf          t        d      j	                  ||       y)
zRCheck that multilabel classification is supported and give meaningful
    results.rV   r   )r  rU   rW   r   Nr;   r  r   )	r
   r   r@   r   r   r   r   r-   r   )
ClassifierrN   rp   ry   r   r  r  s          rF   test_ridgeclassifier_multilabelr    s     *AAFDAq			"aA
1vA&A

v

"
"1a
(C[[^F<<177"""vad|VAqD\2	Aq!rH   r  r  )rX   r   r5  r   c                 R   t        j                  ddgddgddgddgg      }t        j                  dd	g      }|rd
}|j                  |      |z   }n|j                  |      }t        |d| |      }|j	                  ||       t        j
                  |j                  dk\        sJ y)z:Test that positive Ridge finds true positive coefficients.rV   rJ   r   rQ   r   r  r  r   rY   r   Trz   r+  r   r   r   N)r@   r   r   r   r   rd   r   )r   r   rz   rp   r   r   ry   r   s           rF   #test_ridge_positive_regression_testr    s    
 	1a&1a&1a&1a&12A88QHD	EE$K)#EE$Kd6E 
IIaO66%++"###rH   c                    t         j                  j                  d      }|j                  dd      }|j	                  dd|j
                  d         }| rd}||z  |z   }n||z  }||j                  |j
                  d         d	z  z  }g }d
D ]<  }t        ||| d      }	|j                  |	j                  ||      j                         > t        |ddd y)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   ,  rq  r5  r   rV   r_   r   r   )TFr   )rz   r+  r   r   r  r=  N)r@   rb   rc   r   re   r   rf   r   r  r   r   r*   )
r   rz   ro   rp   r   r   ry   r  r+  r   s
             rF   %test_ridge_ground_truth_positive_testr    s     ))


#C		#sA;;sCaggaj;1D	Hy H	$t	++AG!(-U
 	uyyA,,-	 "
 W4a0rH   )r7   r9   r:   r8   r;   r<   c           	         d}t        j                  ddgddgg      }t        j                  ddg      }||z  }t        |d| d	      }t        j                  t
        d
      5  |j                  ||       ddd       t        j                  t
        d      5  t        |||d| d      \  }}ddd       y# 1 sw Y   BxY w# 1 sw Y   yxY w)z5Test input validation for positive argument in Ridge.r5  rV   rJ   r   rQ   rW   TFr  zdoes not support positiver   Nzonly 'lbfgs' solver can be used)r+  r   r  )r@   r   r   r   r   r   r   r   )r   rz   rp   r   ry   r   rw   s          rF   test_ridge_positive_error_testr  	  s    
 E
1a&1a&!"A88QGD	DAV5QE	z)D	E		!Q 
F 
z)J	Kq%$v
1 
L	K 
F	E 
L	Ks   $B8C8CCc                 &   	
 t        ddd      \  	
d d}d	 
fd	}t               j                  	
      }t         d	
      j                  	
      } ||      } ||      }||k  sJ t        |      D ]  } |||      }||k  rJ  y)z?Check ridge loss consistency when positive argument is enabled.r  r   r}  r5  rq  Nc                 h   | j                   }|Ut        j                  j                  |      }| j                  |j                  d|| j                  j                        z   }n| j                  }dt        j                  |z  z
  |z
  dz        z  dz  t        j                  |dz        z  z   S )Nr   r_   r   rJ   )r   r@   rb   rc   r   re   r   r   )	r   rU   noise_scaler   ro   r   rp   rz   ry   s	         rF   
ridge_lossz,test_positive_ridge_loss.<locals>.ridge_loss	  s    $$	#))''5C;;Q%++BSBS!TTD;;DRVVQT\I5!;<<sU{RVV!GN
 @
 
 	
rH   r   T)rz   r+  r  )Nr   )r   r   r   rv  )rz   n_checksr  r   model_positivelossloss_positiverU   loss_perturbedrp   ry   s   `        @@rF   test_positive_ridge_lossr  	  s     SSrJDAqEH

 ""1a(E6::1a@N
 eD~.M=    h#NN... (rH   c                     t        ddd      \  }}t        j                  |d      }t        j                  | g      } dddd}t	        ||| fi |}t        |||       }t        ||d	d
       y)zETest that LBGFS gets almost the same coef of svd when positive=False.r  r   r}  rV   Frm  i  )r+  r   r   r  r   r=  N)r   r@   expand_dimsr%  r   r   r*   )rz   rp   ry   config
coef_lbfgsr   s         rF   test_lbfgs_solver_consistencyr  =	  sw     SSrJDAq
q!AJJwEF aE4V4Jq!U+MJDqArH   c                     t        j                  ddgddgg      } t        j                  ddg      }t        ddddd	d
      }t        j                  t
        d      5  |j                  | |       ddd       y# 1 sw Y   yxY w)z1Test that LBFGS solver raises ConvergenceWarning.rV   rW   g    _g    _Br   r  Fr   T)rz   r   r   r   r+  r   zlbfgs solver did not converger   N)r@   r   r   r   r   r   r   )rp   ry   r   s      rF   test_lbfgs_solver_errorr  N	  sw    
1b'Aq6"#A
%AE 
(0O	P		!Q 
Q	P	Ps   A;;Br;  c                 n   | |dk(  s|dv r| rt        j                  d       t        j                  j	                  d      }d}|dk(  r|dz  }n|dz  }|j                  ||      }|j                  |      }	| ||      }t        | d	||d
k(  |d      }
t        di |
j                  ||	d      }|j                  j                         }| r|j                  }t        j                  |	      }|j                  ||	|       t        |j                  |d       | rt        |j                         |j                  dd|j                  d         }d|dd |	ddxxx dz  ccc |j                  ||	|       |j                  j                         }| r|j                  }|j                  |ddddf   |	dd |dd        t        |j                  |d       | rt        |j                         t        di |
j!                  t        j"                  |
d   z        }|j                  ||	t        j"                  |z         |dv r| st        j$                  d| d       t        |j                  |d       | rt        |j                         ||j'                         }t        j(                  ||d|dz   gd      }t        j(                  |	|	d|dz   g      }|j                         }|d|dz  xxx dz  ccc t        j(                  ||d|dz   gd      }| ||      } ||      }t        di |
j                  ||	|      }t        di |
j                  |||      }t        |j                  |j                         | r!t        |j                  |j                         yy)zTest that the impact of sample_weight is consistent.

    Note that this test is stricter than the common test
    check_sample_weight_equivalence alone.
    Nr7   )r9   r<   zunsupported configurationr   rP   rU  rJ   r   r  r   )r   rz   r   r+  rU   r   r   r  r  r   r   r[   r  rz   r   r   zSolver z- does fail test for scaling of sample_weight.r   r   )r   r   r@   rb   rc   rR  r   r   r   r   r'  r   	ones_liker*   re   r   r  pir   toarrayr   )r   r   r;  r   rl   ro   rR   rS   rp   ry   rN   r  r   r   r   r=  X2y2sample_weight_1sample_weight_2r<  s                        rF   $test_ridge_sample_weight_consistencyr  _	  s{    #U?v)==-KK34
 ))


#CIv~!^
]
J'AA#Q#G#'F /&/

a$

7C99>>DNN	LLOMGGAqG.CIIt$/	2
 KKDqqwwqzKBMM"#bcFdNFGGAq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	A.	Q/0q	9B	A.	Q/0	1B#((*O$i1n%*%nn	&6	Q78qO #Qb!?6?q!?CD?6?r2_EDDJJ

+9 rH   )rr  rZ   )rZ   rr  no_swwith_swno_interceptwith_interceptr   c                    |\  }}t        |||d      \  }}|r-t        j                  |j                  d   f      }	d|	ddd<   nd}	t        j                  ddd	      }
t        | |
d
|d      }|j                  |||	       t        j                  g |j                  t        |
            }t               }t        |
      D ]  \  }}t        |j                  ||            D ]h  \  }\  }}t        ||d      }|r|j                  ||   ||   |	|          n|j                  ||   ||          |j                  ||         ||d|f<   j  t        |j                  |d       y)ar  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   rR   rS   r   rU   )r   r   NrJ   r  r  r   rG  T)rQ  r<  rH  r   rI  r   r7   )rz   r   r   .r  r  )r   r@   r   r   r  r   r   emptyr  r    	enumerater  r   r   r*   rK  )rQ  rT  rz  r   r   rR   rS   rp   ry   r   r<  r  r  ra  	alpha_idxrz   idx	train_idxtest_idxr   s                       rF   !test_ridge_cv_results_predictionsr  	  s{   . $Iz
iVWDAq qwwqzm4 cc [[Q"F (#H LLA]L3 ((!8177!8CK!89K	B%f-	5*3BHHQN*C&C&)X]5QE!		iL!I,mI>V   		!I,)5/4}}Qx[/IKS)+, +D . H((+DArH   c                    |\  }}t        ||d|      \  }}t        j                  |      }t        | dd      }|j	                  |||       t               }	t        |j                        }
t        j                  |	j                  |      D cg c]4  \  }}|
j	                  ||   ||   ||         j                  ||         6 c}}      }t        |j                  t        ||              yc c}}w )	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.
    rJ   r  rG  T)rQ  rH  rI  r   r   N)r   r@   r   r   r   r    r   rc  squeezer  r   r*   r  r   )rQ  rT  rl   rR   rS   rp   ry   r   r  ra  r   traintest
y_pred_loos                 rF   'test_ridge_cv_multioutput_sample_weightr  
  s     $Iz'	DAq GGI&M#;dH LLA]L3	B(E
  "xx{		
  +t IIah%e8LIMUU$  +		
J H((+=a+L*LM	
s   9C5
c                    | \  }}t        ||dd      \  }}d fd}t        |      }|j                  ||       t               }t	        |j
                        }t        j                  |j                  |      D 	
cg c]/  \  }	}
|j                  ||	   ||	         j                  ||
         1 c}
}	      }t        |j                   ||              yc c}
}	w )	zECheck that `RidgeCV` works properly with a custom multioutput scorer.rJ   r   r  c                     | |z
  dz  }t        j                  |d      }|j                  dk(  rt        j                  |ddg       S | S )NrJ   r   r   rV   )r  )r@   rA   ndimr  )y_truerD   errorsmean_errorss       rF   custom_errorz=test_ridge_cv_custom_multioutput_scorer.<locals>.custom_error0
  sP    6/a'ggf1-q JJ{QF;;; |rH   c                 6     || j                  |             S )zGMultioutput score that give twice more importance to the second target.)r   )r  rp   ry   r  s      rF   custom_multioutput_scorerzJtest_ridge_cv_custom_multioutput_scorer.<locals>.custom_multioutput_scorer:
  s    Q	 1 1! 4555rH   )rH  r   N)r   r   r   r    r   rc  r@   r  r  r   r*   r  )rT  rR   rS   rp   ry   r  r  ra  r   r  r  r  r  s               @rF   'test_ridge_cv_custom_multioutput_scorerr  (
  s     $Iz
aaDAq6 89HLLA	B(EKM88TU;W;KE41U8QuX	&	.	.qw	7;WJ H((<:+F*FG 	Xs   4C
metaestimator)enable_metadata_routingc                 .     |        j                          y)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    rF   *test_metadata_routing_with_default_scoringr  N
  s     O((*rH   zmetaestimator, make_datasetc                      |ddd      \  }}t        |       } | j                  ||t        j                  |j                  d                y)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.rq  r   r   r}  r   r   N)r   r   r@   r   r   )r  r  rp   ry   s       rF   +test_set_score_request_with_default_scoringr  W
  sF     #!"EDAq-(Ma"''!''!**=>rH   )rq  rq  r   rZ   rV   g      *@rY  rY  TFFNr?   )r'  	itertoolsr   numpyr@   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(   -sklearn.utils._test_common.instance_generatorr)   sklearn.utils._testingr*   r+   r,   r-   r.   sklearn.utils.estimator_checksr/   r0   sklearn.utils.fixesr1   r2   r3   r4   r5   r6   SOLVERSr   r   load_diabetesdiabetesr;  r   r   r   r   r   indrb   rc   ro   r$  	load_irisr:  r  r  rG   rK   fixturer   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  r/  rC  rP  r4  r7  r%  rg  rl  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r"  sortedr*  r/  r8  r>  r@  rE  rH  rL  rO  rV  rd  ri  rk  r   	TypeErrorro  rq  rs  r)  ry  r}  r  r  r   r   r  r  r  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rH   rF   <module>r     sU        ,   2    H G  / ,  S   B 4 #S  !8!!#! 
Jbii
  #$iiA C 	$3i#C*S/ 
Jx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\5, eW%562::rzz":;~(EFWh$7ff=MN4-8)K 9 O G < 7)KX
J 5$-lK5PQ#KL4-8Y	$:@PQ~(EFF G R 9 M R
F2 5$-lK5PQi[14-8$"  
 2::rzz":;~(EF*I G < 9 2 R*IZ 5$-lK5PQeW%564-8$"  
 2::rzz":;~(EFI G < 9 7 RI<K@ eW%56~(EF2w/#=G 0 G 7=G@ +dVn-DE"  
 %=>: ? 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  EI$
N .-/ %'AB   
 Uu%! 	!  


	(
 //1B1DE .-/X	X& .-/	: '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6< C A <6<r 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\:~ Xx$8vv>NO-t}7IBVWeT]9I(J   eW%56q!f-8B . 7 X P8Bv eW%56Xx$8vv>NON P 7ND Xx$8vv>NOH PHJ 74E*FG-+ . H+ !	O$		12 -? .?rH   