
    Mpj<k                    p'   S SK r S SKJr  S SKrS SKrS SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJrJrJr  S SKJr  S SKJrJrJrJrJrJr  S S	KJrJrJrJrJ r J!r!J"r"  S S
K#J$r$J%r%J&r&  S SK'J(r(J)r)J*r*J+r+J,r,  S SK-J.r.  S SK/J0r0  S SK1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8  S SK9J:r:J;r;J<r<J=r=J>r>  S SK?J@r@JArA  S SKBJCrCJDrDJErEJFrFJGrGJHrH  / SQrISrJSrK\
R                  " 5       rM\MR                  \MR                  srPrQ\R                  " \PR                  S    5      rT\R                  R                  S 5      rW\WR                  \T5        \TSS rT\P\T   \Q\T   srPrQ\
R                  " 5       rZ\ZR                  \ZR                  sr[r\S r]S r^\R                  " SS/S9S 5       r`\R                  R                  S\I5      \R                  R                  SSS /5      S! 5       5       rc\R                  R                  S\I5      \R                  R                  SSS /5      S" 5       5       rd\R                  R                  S\I5      \R                  R                  SSS /5      S# 5       5       re\R                  R                  S\I5      \R                  R                  SSS /5      S$ 5       5       rf\R                  R                  S\I5      \R                  R                  SSS /5      S% 5       5       rg\R                  R                  S\I5      \R                  R                  SSS /5      S& 5       5       rh\R                  R                  S\I5      \R                  R                  SSS /5      \R                  R                  S'S/\F-   5      \R                  R                  S(S)S*/5      S+ 5       5       5       5       riS, rjS- rkS. rlS/ rmS0 rnS1 ro\R                  R                  S2/ S3Q5      \R                  R                  S4\F5      S5 5       5       rp\R                  R                  S6/ S7Q5      \R                  R                  S8SS /5      \R                  R                  S4\F5      S9 5       5       5       rq\R                  R                  S6/ S7Q5      \R                  R                  S8SS /5      \R                  R                  S4\F5      S: 5       5       5       rr            SS< jrs\R                  R                  S=S> \" / S?QS/\F-   5       5       5      \R                  R                  S@/ SAQ5      SB 5       5       rtSC ru\R                  R                  SDSESF/5      \R                  R                  SG\R                  \R                  /5      \R                  R                  SH\R                  /\F-   5      \R                  R                  SISJSK/SLS/SM9\R                  R                  SSS /5      \R                  R                  SN/ SOQ5      SP 5       5       5       5       5       5       rySQ rz\R                  R                  S(SRSS/STSU/SM9\R                  R                  S/ SVQ5      \R                  R                  SSS /5      \R                  R                  SISWSX/SLS/SM9\R                  R                  SH\R                  /\F-   5      SY 5       5       5       5       5       r{\R                  R                  S(SRSS/STSU/SM9\R                  R                  SDSZ/5      \R                  R                  SSS /5      \R                  R                  SI/ S[Q/ S\QSM9\R                  R                  SG\R                  \R                  /5      \R                  R                  SH\R                  /\F-   5      S] 5       5       5       5       5       5       r|\R                  R                  S(SRSS/STSU/SM9\R                  R                  SDSESF/5      \R                  R                  SSS /5      \R                  R                  SI/ S[Q/ S\QSM9\R                  R                  SG\R                  \R                  /5      \R                  R                  SH\R                  /\F-   5      S^ 5       5       5       5       5       5       r}S_ r~\R                  R                  SDSESF/5      \R                  R                  SH\R                  /\F-   5      \R                  R                  S`SaSb/5      \R                  R                  Sc/ SdQ5      Se 5       5       5       5       r\R                  R                  S'S/\F-   5      \R                  R                  SI/ SfQ/ S\QSM9\R                  R                  SD/ SgQ5      Sh 5       5       5       rSi rSj r\R                  R                  Sk\" S Sl9\4\" S Sl9\4/5      Sm 5       r\R                  R                  Sk\" 5       \4\" 5       \4/5      \R                  R                  SnSSo/5      Sp 5       5       rSq rSr rSs rSt r\R                  R                  SuSSv\]/5      \R                  R                  SnS\*" Sw5      /5      \R                  R                  S'S/\F-   5      Sx 5       5       5       r\R                  R                  SnS\*" Sw5      /5      \R                  R                  S'S/\F-   5      Sy 5       5       rSz r SS{ jr\R                  R                  S|\5" 5       5      \R                  R                  S}\A\/\8SM9\R                  R                  S~\" SES9\" SES9\" SES9\" SFS9\" 5       /\8SM9S 5       5       5       r\R                  R                  S~\" SES9\" 5       /5      \R                  R                  S|\5" 5       5      S 5       5       r\R                  R                  S|\5" 5       5      S 5       r\R                  R                  S\6" S S95      S 5       r\R                  R                  S\" \25      5      S 5       r\R                  R                  S\\\\\\45      \R                  R                  S4\F5      S 5       5       rS r\R                  R                  S\\45      S 5       rS r\R                  R                  SuSS\^/5      S 5       r\R                  R                  SuSSv\]/5      S 5       r\R                  R                  S\\/5      S 5       r\R                  R                  SnSSo/5      \R                  R                  S\\/5      S 5       5       rS rS r\R                  R                  SSSo/SoS//5      \R                  R                  S'\D\E-   \F-   \G-   \H-   5      S 5       5       rS r\R                  R                  S\\/5      \R                  R                  SSS0\S4SS0\S4SS0\S4/5      S 5       5       r\R                  R                  S\\/5      S 5       rS r\R                  GRI                  S5      S 5       r\R                  R                  S/ SQ5      \R                  R                  SSS /5      \R                  R                  S4\F5      S 5       5       5       r\R                  R                  S/ SQ5      \R                  R                  S4\F5      S 5       5       r\R                  R                  SSS /5      \R                  R                  S4\F5      S 5       5       r\R                  R                  SS S/5      \R                  R                  SS\GRR                  " S5      /5      \R                  R                  S\GRT                  /\F-   5      \R                  R                  S/ SQ5      S 5       5       5       5       r\R                  R                  S/ SQ5      S 5       rS r\R                  R                  S/ SQ5      \R                  R                  S\" S;5      5      S 5       5       rS r\R                  R                  S\0 4\SnS04\SnSo04/5      S 5       r\R                  R                  SSS/5      \R                  R                  SSS /5      \R                  R                  S(/ SQ5      S 5       5       5       r\R                  R                  SSS /5      \R                  R                  S(/ SQ5      S 5       5       r\R                  R                  S/ SQ5      S 5       r\R                  R                  S(/ SQ5      S 5       r\R                  R                  S(/ SQ5      S 5       rS r\R                  R                  SS S/5      \R                  R                  S'S/\F-   5      \R                  R                  SSLS/5      \R                  R                  S\IS/-   5      S 5       5       5       5       r\R                  R                  SISS/SLS/SM9\R                  R                  SS S/SS/SM9\R                  R                  SS S/SS/SM9\R                  R                  SDSESF/5      \R                  R                  SS;S/5      S 5       5       5       5       5       r\R                  R                  SDSESF/5      \R                  R                  SISS/SLS/SM9S 5       5       r\R                  R                  SISS/SLS/SM9S 5       r\R                  R                  S\\/5      \	" SS9S 5       5       r\R                  R                  S\" 5       \4\" 5       \4/5      \	" SS9S 5       5       rg)    N)product)linalg)config_contextdatasets)clone)make_classificationmake_low_rank_matrixmake_multilabel_classificationmake_regression)ConvergenceWarning)LinearRegressionRidgeRidgeClassifierRidgeClassifierCVRidgeCVridge_regression)_check_gcv_mode	_RidgeGCV_solve_cholesky_solve_cholesky_kernel_solve_lbfgs
_solve_svd_X_CenterStackOp)
get_scorermake_scorermean_squared_error)GridSearchCV
GroupKFoldKFoldLeaveOneOutcross_val_predict)minmax_scale)check_random_state)_NUMPY_NAMESPACE_NAMES_atol_for_type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    [         R                  " X:H  5      $ N)npmeany_testy_predkwargss      a/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callablerG   X   s    776#$$    c                 ,    X-
  S-  R                  5       $ )N   )rA   )rC   rD   s     rF   _mean_squared_error_callablerK   \   s    _"((**rH   longwide)paramsc                    UR                   S:X  a  Su  p#OSu  p#[        X#5      n[        R                  R	                  U 5      n[        X#XES9nSUSS2S4'   [        R                  " U5      u  pxn	[        R                  " US:  5      (       d   eUSS2SU24   USS2US24   pU	SU2SS24   XS2SS24   pUR                   S:X  a/  UR                  S	S
US9nXn-  nXUR                  X#-
  S9S-  -  -  nOGUR                  S	S
US9nUR                  [        R                  " SU-  5      -  U
R                  -  U-  nSnU[        R                  " U5      -  nSUS'   [        R                  " UR                  U-  U-   UR                  U-  5      nXU-  -
  nXU-  -
  n[        R                  R                  U5      [        R                  R                  U5      :  d   eXoUU4$ )a  Dataset with OLS and Ridge solutions, well conditioned X.

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

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

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

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

Returns
-------
X : ndarray
    Last column of 1, i.e. intercept.
y : ndarray
coef_ols : ndarray of shape
    Minimum norm OLS solutions, i.e. min ||X w - y||_2_2 (with minimum ||w||_2 in
    case of ambiguity)
    Last coefficient is intercept.
coef_ridge : ndarray of shape (5,)
    Ridge solution with alpha=1, i.e. min ||X w - y||_2_2 + ||w||_2^2.
    Last coefficient is intercept.
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   > }} %	: %	I"A
))

 2
3C1	A AaeHzz!}HA"66!d(q"1"uXqABxAY2q5	}};;3Rj;AL	#**)"8*9Q>>>KKCbyK9552771q5>)BDD014 EJ''AAfIaccAgk13373J HEj. G99>>% 299>>'#:::::%%rH   solverfit_interceptTFc                    Uu  pEpgSn[        USU U S;   a  SOSUS9n	U[        R                  " U5      -
  n
XTU-  -
  nS[        R                  " US-  5      [        R                  " U
S-  5      -  -
  n[	        S0 U	D6nUS	S	2S	S
24   nU(       a  US
   nO%XDR                  SS9-
  nXUR                  5       -
  nSnUR                  XE5        US	S
 nUR                  [        R                  " U5      :X  d   e[        UR                  U5        UR                  XE5      [        R                  " U5      :X  d   e[	        S0 U	D6R                  XE[        R                  " UR                  S   5      S9nUR                  [        R                  " U5      :X  d   e[        UR                  U5        UR                  XE5      [        R                  " U5      :X  d   eUR                  U :X  d   eg	)zTest that Ridge converges for all solvers to correct solution.

We work with a simple constructed data set with known solution.
      ?Tr;   r<   V瞯<绽|=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    &MA!E.EE'F 2771:~HHI266)Q,'"&&1*===HOFOE	!SbS&	AH	AL		IIaO9Dv}}Y7777EKK&;;qh 7777 OFOBGGAGGAJ4GHEv}}Y7777EKK&;;qh 7777==F"""rH   c                 2   Uu  pEpgUR                   u  pSn
[        U
S-  UU U S;   a  SOSUS9nUSS2SS24   nS	[        R                  " XD4S
S9-  n[        R                  R                  U5      [        XS
-
  5      ::  d   eU(       a  US   nO%XDR                  SS9-
  nXUR                  5       -
  nSnUR                  XE5        USS nUR                  [        R                  " U5      :X  d   e[        UR                  [        R                  Xw4   SS9  g)zTest that Ridge converges for all solvers to correct solution on hstacked data.

We work with a simple constructed data set with known solution.
Fit on [X] with alpha is the same as fit on [X, X]/2 with alpha/2.
For long X, [X, X] is a singular matrix.
r   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    &MA!GGIEai#.EE'E 	
!SbS&	AbnnaV!,,A99  #s91n'EEEEH	AL		IIaO9Dv}}Y7777 EKKtz!2>rH   c                 *   Uu  pEpgUR                   u  pSn
[        SU
-  UU U S;   a  SOSUS9nUSS2SS24   n[        R                  " XD4S	S
9n[        R                  R                  U5      [        X5      ::  d   e[        R                  XU4   nU(       a  US   nO%XDR                  S	S
9-
  nXUR                  5       -
  nS	nUR                  XE5        USS nUR                  [        R                  " U5      :X  d   e[        UR                  USS9  g)a6  Test that Ridge converges for all solvers to correct solution on vstacked data.

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

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

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

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

We use the following trick:
    ||y - Xw||_2 = (z - Aw)' W (z - Aw)
for z=[y, y], A' = [X', X'] (vstacked), and W[:n/2] + W[n/2:] = 1, W=diag(W)
Nr   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     sU   $ #V+HHKKM61Q#QKKM%MA!GGI		3B#.EE'E 	
!SbS&	A
vA&A
adA	r1r6z	U	"BH	AL	#Q	IIa"I%9Dv}}Y7777EKK&rH   c                  ,   [         R                  SS5      n [        [        U S/S9n[        R
                  " [        [        R                  5      n[        X S/S9n[        R
                  " [        R                  U5      R                  n[        X5        g )NrW   rV   r   rz   )	
y_diabetesreshaper   
X_diabetesr@   dotrg   r   r,   )ry   r   K	dual_coefcoef2s        rF   test_primal_dual_relationshipr     sh    2q!A:q7D
z:<<(A&qD6:IFF:<<+--Ed*rH   c                     [         R                  R                  S5      n U R                  S5      nU R                  SS5      nSn[        R
                  " [        US9   [        X!SSSS S	S
9  S S S 5        g ! , (       d  f       g = f)Nr      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     sj    
))


"C		!A		!RALO	(	@KS4QR	
 
A	@	@s   A66
Bc                     [         R                  R                  S5      n Su  pU R                  X5      nU R                  U5      nUS S 2[         R                  4   n[         R
                  USU-   4   n[        5       nUR                  X45        UR                  R                  U4:X  d   eUR                  R                  S:X  d   e[        UR                  [         R                  5      (       d   e[        UR                  [        5      (       d   eUR                  X55        UR                  R                  U4:X  d   eUR                  R                  S:X  d   e[        UR                  [         R                  5      (       d   e[        UR                  [         R                  5      (       d   eUR                  X65        UR                  R                  SU4:X  d   eUR                  R                  S:X  d   e[        UR                  [         R                  5      (       d   e[        UR                  [         R                  5      (       d   eg )Nr   r   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!I		)(A		)A	
1bjj=	B
aQhAGE	IIaO;;---!!R'''ekk2::....e&&....	IIa;;---!!T)))ekk2::....e&&

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

3333rH   c                     [         R                  R                  S5      n Su  pU R                  X5      nU R                  U5      n[         R                  USU-   4   n[        5       nUR                  X45        UR                  nUR                  X55        [        UR                  S   U5        [        UR                  S   US-   5        g )Nr   r   r   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!I		)(A		)A
aqjAGE	IIaO  I	IIaO((+Y7((+Y_=rH   c                     [         R                  R                  S5      n Su  pU R                  U5      nU R                  X5      n[	        SSS9n[        SS9nUR                  XC5        UR                  XC5        [        UR                  UR                  5        UR                  XC5        UR                  XC5        [        UR                  UR                  5        g )Nr   )r   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 I		)A		)(A51E

/C	IIaOGGAMSYY/	IIaOGGAMSYY/rH   c                     [         R                  R                  S5      n Su  pnU R                  X5      nU R                  X5      n[         R                  " U5      n[         R
                  " [        XeR                  5       VVs/ s H(  u  px[        USS9R                  XH5      R                  PM*     snn5      n	S V
s/ s H&  n
[        XjSS9R                  XE5      R                  PM(     nn
U H  n[        X5        M     [        US S S	9nS
n[        R                  " [        US9   UR                  XE5        S S S 5        g s  snnf s  sn
f ! , (       d  f       g = f)N*   )   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   [  s4    ))


#C'0$I9		)(A		)'A		)$IHH "%Y!4	
!4 j155a@FF!4	
M NMF 	I%8<<QBHHM   *!-@ * 	#2'ESG	z	1		! 
2	1!	
 
2	1s   /E
 -E*E
En_col)r   r   )   csr_containerc                 R   [         R                  R                  S5      nUR                  SS5      nUR                  S5      nUR                  [	        U5      5      nUR                  " S/U Q76 nUR                  " S/U Q76 n[        U" U5      XE5      n[         R                  " X5S S 2S 4   U-  -
  US S 2S 4   /5      n	[        U	R                  U5      UR                  U5      5        [        U	R                  R                  U5      UR                  R                  U5      5        g )Nr         	   )
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#?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                    [         R                  R                  S5      nUR                  " U 6 nU(       a$  [         R                  " UR
                  S   5      nOUR                  SU S   5      n[         R                  " U5      n[         R                  " USUS9nXG-
  US S 2S 4   -  nUR                  UR                  5      n	U" XFS S 2S 4   -  5      n
[        SS9nUR                  XU5      n[        X5        g 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*4 00Jz||,IQD!112H
$
'C%%h@MI-rH   c                    [         R                  R                  S5      nUR                  " U 6 nU(       a$  [         R                  " UR
                  S   5      nOUR                  SU S   5      n[         R                  " U5      n[         R                  " USUS9nXG-
  US S 2S 4   -  nUR                  R                  U5      n	U" XFS S 2S 4   -  5      n
[        SS9nUR                  XU5      n[        X5        g 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*4 00J ll&&z2OQD!112H
$
'C**8WELO2rH   rV   c                    [        U UUUUUUSUS9	u  pnUS:X  a  [        R                  " U/5      nX-  n[        R                  R	                  U5      R                  SX,R                  5      S:  nUR                  5       nSX) '   SUU'   UUR                  U5      -  nU
(       aF  XR                  [        R                  " U5      S-   U-
  5      -  n[        R                  " U5      S-   nUS:X  a  US   nU	(       a  XU4$ X4$ )NT)	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    #!
GA! QJJsOMA
		l+44Q8JGGTWXX 	 IAeHIdOq	A	UU266!9q=1$%%FF1IMQaDQw4KrH   zsolver, sparse_containerc              #   B   #    U  H  u  pUb  US;   d  M  X4v   M     g 7f)N)r8   ridgecvr   ).0r   r   s      rF   	<genexpr>r3    s3      +
&V #v1I'I 	#"+
s   
)r9   r;   r8   r:   r<   r1  z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r4  r   )r   float64皙?c           	         SnUS:  a  SOSn[        SSUUUUS9u  p[        U5      n[        SUS	9R                  X5      n
UR	                  US
S9nU	R	                  US
S9n	Ub  U" U5      nU S:X  a  [        U/S9nO,U R                  S5      (       a  SnSnOSnS n[        UU UUUS9nUR                  X5        [        UR                  U
R                  SSS9  [        UR                  U
R                  SSS9  g )Nr   g?g      I@g     @@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)-'DA 	QAU%044Q:I	U#A	U#A#Qw'U##CHCH+
 
IIaOEKKt$GE$$i&:&:DQrH   c                  V   Su  p[         R                  R                  S5      nUR                  SSX4S9nUR                  SSU 4S9nUR	                  [         R
                  5      nUR	                  [         R
                  5      n[        / SQSSS9nUR                  X45        [        U5      nUR                  XV5        [        UR                  UR                  5        [        UR                  UR                  5        UR                  R                  [         R
                  :X  d   eg )	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    "I
))


"CAq	67AAq	|,Ahhrzz"Ghhrzz"G)ATXI MM!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           
         U S:X  a   U[         ;   a  [        R                  " S5        Uu  px[        U5      S:X  a  US   OSn	[	        UUU	SSUSS	9u  pUR                  U5      n/ S
Qn[        UUUSS9n[        U UUS9nUR                  X5        U" U
5      n
U
R                  U5      n
UR                  U5      nUR                  X5        U[        R                  :X  a  SOSnUR                  [        R                  " UR                  5      :X  d   e[        UR                  UR                  US9  [        UR                  UR                  US9  g )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  s=     5k^;<=#I"7|q0aI)DA 	
		'A(F#(	I #I MM!AA	A	AMM!BJJ&4EDv}}Y-=-=>>>>IOOY__4@I(()*>*>TJrH   c                 (   [         R                  " U S5      (       a2  [        US9nUR                  X5        UR                  UR
                  4$ UR                  S   n[         R                  " U5      U(       a  [         R                  " U5      4$ S4$ )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  ss    	zz%"?A}}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                    U[         ;   nUS:X  a  U(       a  [        R                  " S5        US:X  a$  U(       a  U(       a  [        R                  " S5        Uu  pg[        XgSSSS9u  p[	        XX5      u  pU" U5      n[        XUS	S
9nUR                  X5        [        UR                  U
SS9  [        UR                  USS9  g)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	
 $I!"SUDA )E!)%M 	AAMuUE	IIaOEKKU;E$$&8uErH   ignored)rp  )rr  rr  rs  )rU  squarerM   c                    U[         ;   nU /nUu  p[        XSS9u  pSU-  S-
  n[        R                  " U S5      (       a7  X:  a  [        R
                  " S5        OX:X  a  [        R
                  " S5        [        X
X5      u  pU" U
5      n
U
R                  U5      n
UR                  U5      n[        XrS9nUS	:X  a=  U(       a6  S
n[        R                  " [        US9   UR                  X5        SSS5        OUR                  X5        U[        R                  :X  a  SOSn[        UR                  UUS9  [        UR                  UUS9  g! , (       d  f       NQ= f)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    s?    n,HWF#IDA 	
A	A	zz%!LL5 $LL7 )E!)%M 	AA	A	A!MI5XE\\-|<MM! =< 	aBJJ&4EDIOO]>I((*<4H =<s   !E
Ec                    U[         ;   nU /nUu  p[        XSSSS9u  p[        X
X5      u  pU" U
5      n
U
R                  U5      n
UR                  U5      n[	        XqUS9nUS:X  a=  U(       a6  Sn[
        R                  " [        US9   UR                  X5        S	S	S	5        OUR                  X5        U[        R                  :X  a  S
OSn[        UR                  UUS9  [        UR                  UUS9  g	! , (       d  f       NQ= f)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#I!"SUDA )E!)%M 	AA	A	AvVI5XE\\-|<MM! =< 	aBJJ&4EDIOO]>I((*<4H =<s   	C88
Dc            
         Sn Su  pSn[        UUUSSSSS9u  pE/ SQn[        US	X`S
9n[        S	X`S9nUR                  XE5        UR                  XE5        UR                  [        R
                  " UR                  5      :X  d#   SUR                  < SUR                  < 35       e[        UR                  UR                  SS9  [        UR                  UR                  SS9  g )Nexplained_variance)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!II)DA )FDI d6KIMM!MM!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           	      r   U S:X  a   U[         ;   a  [        R                  " S5        / SQn[        R                  R                  S5      n[        U5      S:X  a  US   OSn[        SUUSS	US
9u  pU
R                  U5      n
SUR                  [        U	5      5      -  nXR                  5       -
  S-   R                  [        5      n[        R                  " [        R                  " U	R                  S   5      U5      nUR                  [         5      nX   X   p[#        U	R                  S   S9nUR%                  XUS9n['        UUSUS9nUR)                  X5        [+        UR,                  US9nUR%                  XUS9n[/        UXUS9nUR                  UR                  :w  a  UR                  UR                  5      nUU-
  S-  n[        R                  " U	R                  S   5       Vs/ s H  n[        R0                  " UUU:H     SS9PM      nn[        R2                  " U5      nU" U	5      n['        USU US9nUR)                  UXS9  [        U5      S:X  a0  UR4                  S S 2S S 2UR7                  UR,                  5      4   nO,UR4                  S S 2UR7                  UR,                  5      4   nUR,                  [        R8                  " UR,                  5      :X  d   e[;        UUSS9  [;        UR<                  UR<                  SS9  [;        UR>                  UR>                  SS9  g s  snf )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)DA 	
		'A		#a&))M"%6%6%881<DDSIMii		!''!*-}=G!((/Mz1:W	QWWQZ	(BXXgwX7F(#	E 
IIgELLFIXXgwX7F#IwFKKGMM)!))'--8k)a/L<>IIaggaj<Q<Qq|GqL)2<Q   ::l+LNE#	I MM%M8
7|q**1aell1K+KL
**1fll5<<.H+HI
<<6==)9)9::::J48IOOU[[t<I((%*:*:F+s   .%L4))r   rJ   r   r   )rJ   r   )autor7   rR  c                 f   Uu  p4[        X4S9u  pVU S LnU(       a  U " U5      nX4::  a  SOSnUS:X  a  U(       d  [        XR5      S:X  d   eg US:X  a?  U(       a8  Sn	[        R                  " [        U	S9   [        XR5      n
S S S 5        W
U:X  d   eg [        XR5      U:X  d   eg ! , (       d  f       N)= f)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     DAQ5DAt+HQ6uJ5q+u444	U	xE\\-|<-a:O =*,,,q+z999	 =<s   3B""
B0c                    [         R                  S   n/ nU c  [         SpCOU " [         5      SpC[        US9nUR                  U[        5        UR
                  nUR                  U5        [        n[        [        SS9n[        SUS9n	U" U	R                  5      " U[        5        U	R
                  [        R                  " U5      :X  d   eS n
[        U
5      n[        SUS9nU" UR                  5      " U[        5        UR
                  [        R                  " U5      :X  d   e[        S5      n[        SUS9nUR                  U[        5        UR
                  [        R                  " U5      :X  d   eU cO  UR                  U[        [        R                  " U5      S	9  UR
                  [        R                  " U5      :X  d   e[        R                   " [        [        45      R"                  nUR                  X>5        UR%                  U5      nUR                  U[        5        UR%                  U5      n['        [        R                   " UU45      R"                  US
S9  U$ )Nr   TFr   )greater_is_better)r   rH  c                     [        X5      * $ r?   )r   )xry   s     rF   func_test_ridge_loo.<locals>.func  s    "1(((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jnna$f 5555) $Gug>Jjnna$f 5555 01Fuf=JNN1j!f 5555 a27793EF6==#8888 			:z*+--AMM!q!FMM!Z q!FBIIvv./116EJrH   c                 F   U c  [         OU " [         5      n[        5       nUR                  U[        5        UR	                  U5        [        UR                  R                  5      S:X  d   e[        UR                  5      [        R                  L d   e[        S5      nUR                  US9  UR                  U[        5        UR	                  U5        [        UR                  R                  5      S:X  d   e[        UR                  5      [        R                  L d   eg )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    U" SSS9u  p#[        U 5      n U R                  X#5        [        U S5      (       a   eg )N   r   rR   rU   rK  )r   r   hasattr)r   make_datasetrp   ry   s       rF   $test_ridge_gcv_cv_results_not_storedr    s<     !"5DA%LE	IIaOum,,,,,rH   ra  r   c                     U" SSS9u  p4[        U 5      n U R                  SUS9  U R                  X45        [        U S5      (       d   e[	        U R
                  [        5      (       d   eg )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    se     !"5DA%LE	e3	IIaO5-((((e''////rH   c            	      x   [         R                  R                  S5      n Su  pnU R                  X5      n[         R                  " US S 2S/4   [         R
                  " SU45      5      [         R                  " US S 2S/4   S[         R
                  " SU45      -  5      -   [         R                  " US S 2S/4   S[         R
                  " SU45      -  5      -   U R                  X5      -   nSnUR                   Vs/ s H%  n[        US	9R                  XW5      R                  PM'     nn[        US
S9R                  XT5      n	[        XR                  5        [        [        U	R                  S9R                  XT5      R                  U	R                  5        [        US
S
S9R                  XT5      n	U	R                  R                  U4:X  d   eU	R                  R                  U4:X  d   eU	R                   R                  U[#        U5      U4:X  d   e[        SS
S
S9R                  XT5      n	U	R                  R                  U4:X  d   eU	R                  R                  U4:X  d   eU	R                   R                  XS4:X  d   e[        US
S
S9R                  XTS S 2S4   5      n	[         R$                  " U	R                  5      (       d   e[         R$                  " U	R                  5      (       d   eU	R                   R                  U[#        U5      4:X  d   e[        US
SS9R                  XT5      n	[        XR                  5        [        [        U	R                  S9R                  XT5      R                  U	R                  5        [        U['        5       S
S9n	Sn
[(        R*                  " [,        U
S9   U	R                  XT5        S S S 5        [        USS
S9n	[(        R*                  " [,        U
S9   U	R                  XT5        S S S 5        g s  snf ! , (       d  f       NR= f! , (       d  f       g = f)Nr   )r   r   r   r   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$I9		)'A
qQCy"''1j/23
&&1qc6D277Az?#;;
<	=
&&1qc6EBGGQ
O$<<
=	> ))I
*	+  F RSQTQTUQTvgV,00;BBQTNU ft<@@FH~7 HOO$((.44hnn
 ftdSWW	H ??  YL000%%)555%%)S[))LLLL a$NRRSTXH??  YL000%%)555%%))BBBB ftdSWW	QT7H ;;x'''';;x++,,,,%%)S[)AAAA ftTJNNqTH~7HOO$((.44hnn fNH
?C	z	-Q 
.fTBH	z	-Q 
.	-a VZ 
.	- 
.	-s   ?,P<P:P+
P(+
P9c                     U c  [         OU " [         5      n[        SS9nUR                  U[        5        [        R
                  " UR                  U[        5      S5      $ )NFr   r   )r   r   r   r   r@   roundr   )r   rp   r   s      rF   _test_ridge_diabetesr  ,  sH    &.
4DZ4PA&E	IIa88EKK:.22rH   c                    U c  [         OU " [         5      n[        R                  " [        [        45      R                  n[         R
                  S   n[        SS9nUR                  X5        UR                  R
                  SU4:X  d   eUR                  U5      nUR                  U[        5        UR                  U5      n[        [        R                  " Xf45      R                  USS9  g )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	IIaO;;J///]]1F	IIa]]1Fbii(89;;VQOrH   c                 b   [         R                  " [        5      R                  S   n[        R                  S   nU c  [        OU " [        5      n[        5       [        5       4 Hj  nUR                  U[        5        UR                  R                  X4:X  d   eUR                  U5      n[         R                  " [        U:H  5      S:  a  Mj   e   [        S5      n[        US9nUR                  U[        5        UR                  U5      n[         R                  " [        U:H  5      S:  d   eg )Nr   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9"9999Qwwv'(4///	 8 
qB
r
"CGGAv[[^F776V#$+++rH   rH  accuracyr   c                     U c  [         OU " [         5      n[        U5      (       a  [        U5      OUn[        XBS9nUR	                  U[
        5      R                  U5        g )N)rH  ra  )r  callabler   r   r   r  r   )r   rH  ra  rp   scoring_clfs         rF   "test_ridge_classifier_with_scoringr  T  sO     #*0@0HA'/'8'8{7#gH
H
4CGGAvq!rH   c                 R   S nU c  [         OU " [         5      n[        R                  " SSSS9n[        U[	        U5      US9nUR                  U[        5        UR                  [        R                  " S5      :X  d   eUR                  [        R                  " US   5      :X  d   eg )	Nc                     g)NzG?r   rB   s      rF   _dummy_score: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                    U c  [         OU " [         5      n[        SSS9nUR                  U[        5        UR	                  U[        5      n[        SSS9nUR                  U[        5        UR	                  U[        5      nX5:  d   eg )Nrb  F)r   r   rX   )r   r   r   r   r   )r   rp   r   r   ridge2score2s         rF   _test_tolerancer  t  sr    &.
4DZ4PAd%0E	IIaKK:&Et51F
JJq*\\!Z(F??rH   c           	         [        X#U5      u  pg[        R                  U5      n[        R                  U5      n	UR	                  XS9n
UR	                  XS9nUR                  X5        UR                  nUR                  n[        SS9   [        U5      R                  X5      nUR                  nUR                  UR                  :X  d   eUR                  U
R                  :X  d   e[        [        U[        SS9UU[        U5      S9  UR                  nUR                  UR                  :X  d   eUR                  U
R                  :X  d   e[        [        U[        SS9UU[        U5      S9  S S S 5        g ! , (       d  f       g = f)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    sQ    &oJOJBj)Ij)I

9
4I

9
4IMM)'ooG''L	4	0Y'++IA$$}}---}}	///G51
+		
 $..!!\%7%7777!!Y__444LR6
+		
! 
1	0	0s   	C'E99
Fz(array_namespace, device_name, dtype_namecheckr  r   )rQ  c                 D    U R                   R                  nU" UU UUUS9  g )N)r  r  )	__class____name__)r  r  r  r  r  r  s         rF   test_ridge_array_api_compliancer    s,    . ''D	rH   c           	         [        XU5      u  pE[        SS9u  pgUR                  U5      nUR                  U5      n	U R                  X5      n
U
R	                  U5      nU
R
                  R                  5       n[        SS9   UR                  XS9UR                  XS9pU R                  X5      nUR	                  U5      nUR                  UR                  s=:X  a  UR                  :X  d   e   e[        [        U[        SS9U5        [        [        UR
                  [        SS9U5        S S S 5        g ! , (       d  f       g = f)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    &oJOJB)q9DA88JD88JD}}T(Ht$G""'')J	4	0ZZZ4bjjj6Ud==,""4(}}888888Bu=wG78#4#4EJJW 
1	0	0s   B,D66
Ec           
         [        XU5      u  p4[        SSSS9u  pVUR                  U5      nUR                  U5      n[        R                  " / SQUS9n	[        U	SS9R                  Xx5      n
U
R                  U5      n[        S	S
9   UR	                  XtS9UR	                  XS9pXR	                  XS94 H~  n[        USS9R                  X5      nUR                  U5      nUR                  UR                  s=:X  a  UR                  :X  d   e   e[        [        U[        SS9U[        U5      S9  M     SSS5        g! , (       d  f       g= f)zlCheck 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    s-    &oJOJBQ2AFDA88JD88JDZZ(
;F6%044T@Ht$G	4	0ZZZ4bjjj6Ud jjj?@E57;;DGH&&t,G==GMM<QWW<<<<<Bu5#J/	 A	 
1	0	0s   B0E
Er  )include_numpy_namespacesc                    [        U S S9u  pUR                  [        S S 5      nUR                  [        S S 5      n[        R
                  S   S   R                  nUSS1-
   Hg  n[	        XfS:H  S9nS	UR                   S
U S3n[        R                  " [        US9   [        SS9   UR                  X45        S S S 5        S S S 5        Mi     [	        SSS9nSUR                   S3n[        R                  " [        US9   [        SS9   UR                  X45        S S S 5        S S S 5        [	        5       nSUR                   S3n[        R                  " [        US9   [        SS9   UR                  X45        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       GMK  = f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N]= f! , (       d  f       g = f)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V.?@.r{{m <""(- 	
 ]]:\:48		)/ 9 ;: 6 $/E	++-;;- 8.	.  
z	6t4IIi+ 5 
7 GE
0 >D 	D  
k	6t4IIi+ 5 
7	6- 98 ;: 54 
7	6 54 
7	6sl   
F)F;F
GF2G!
G%+G=G%
FF
F/	2
G 	<G
G
G"	G%%
G3c                    [        U S S9u  pUR                  [        S S 5      nUR                  [        S S 5      n[	        5       nSn[
        R                  " 5          [
        R                  " SU[        S9  [        SS9   UR                  X45        S S S 5        S S S 5        [        SS9   [	        SSS	9R                  X45        S S S 5        g ! , (       d  f       NB= f! , (       d  f       NK= f! , (       d  f       g = f)
Nr  r   zkResults might be different than when Array API dispatch is disabled, or when a numpy-like namespace is usederror)messagecategoryTr  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+//	E 
1	0 54 
#	" 
1	0s0   $C!CC!-C2
C	C!!
C/2
D 	test_funcc                 H    U " S 5      nU " U5      nUb  Ub  [        X#SS9  g g g )Nr   r  )r,   )r-  r   	ret_dense
ret_sparses       rF   test_dense_sparser1  J  s4     $I=)J!7!)C "8rH   c                     [         R                  " SS/SS/SS/SS/SS//5      n / SQn[        S S9nUR                  X5        [	        UR                  SS//5      [         R                  " S	/5      5        [        S	S
0S9nUR                  X5        [	        UR                  SS//5      [         R                  " S/5      5        [        SS9nUR                  X5        [	        UR                  SS//5      [         R                  " S	/5      5        [         R                  " SS/SS/SS/SS//5      n / SQn[        S S9nUR                  X5        [        SS9nUR                  X5        [        UR                  5      S:X  d   e[        UR                  UR                  5        [        UR                  UR                  5        g )N      r   皙r   r   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_weightsr:  `  sy   
4,q	D$<#sc3ZPQAA
t
,CGGAMs{{S$K=1288QC=A 5z
2CGGAM s{{S$K=1288RD>B z
2CGGAMs{{S$K=1288QC=A 	4,q	D$<#sDEAA
t
,CGGAM
3DHHQNt}}"""cii4cnndoo>rH   r  c                    U " 5       nUR                  [        R                  [        R                  5        U " SS9nUR                  [        R                  [        R                  5        [	        UR
                  UR
                  5        [        R                  " [        R                  R                  5      nU[        R                  S:H  ==   S-  ss'   SSSS.nU " 5       nUR                  [        R                  [        R                  U5        U " US9nUR                  [        R                  [        R                  5        [	        UR
                  UR
                  5        U " 5       nUR                  [        R                  [        R                  US-  5        U " US9nUR                  [        R                  [        R                  U5        [	        UR
                  UR
                  5        g	)
z5Check class_weights resemble sample_weights behavior.r8  r6  rV   rq  r   g      Y@)r   rV   rJ   rJ   N)	r   irisdatar   r+   r   r@   r   r   )r  reg1reg2r   r7  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                  4   [         R                  " SS/SS/SS/SS/SS//5      n / SQn[        S / SQS9nUR                  X5        [        S	S
0/ SQS9nUR                  X5        [	        UR                  SS//5      [         R                  " S/5      5        g )Nr3  r   r4  r   r   r5  )r   r5  rV   )r7  r<  rV   rX   )r   r5  rV   rZ   gɿrJ   rW   )r@   r   r   r   r-   r   )rp   ry   r  s      rF   test_class_weights_cvrB    s    
4,q	D$<#sc3ZPQAA
n
ECGGAM !U<N
OCGGAMs{{T1I;/2$@rH   rG  c                 |   [         R                  R                  S5      nSnSnUR                  X#5      n/ SQn[	        U5      n[        U 5      (       a  [        U 5      OU n[        US SUS9nUR                  U5      n	UR                  XI5        UR                  R                  X&4:X  d   eSn
UR                  X*5      n	UR                  XI5        UR                  R                  X*U4:X  d   e[        SSU S9n[        R                  " [        S	S
9   UR                  XI5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   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_resultsrG    s    ))


#CIJ		)(AF6{H'/'8'8{7#gHv$xPA 			)AEE!K==9"7777 I		)'AEE!K==9"BBBB1tW=A	z)H	I	a 
J	I	Is   D--
D;c                 D   [         R                  " SS/SS/SS/SS/SS//5      n[         R                  " / SQ5      nUR                  S   n/ SQn[        U5      n[	        U 5      (       a  [        U 5      OU n[        US SUS	9nS
nUR                  X5        UR                  R                  X8U4:X  d   e[         R                  " / SQ/ SQ/ SQ/5      R                  5       nUR                  S
   nUR                  X5        UR                  R                  X8U4:X  d   eg )Nr3  r   r4  r   r   r5  rE  TrD  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<  rE  r  rF  r   s	            rF   )test_ridge_classifier_cv_store_cv_resultsrJ    s   
4,q	D$<#sc3ZPQA
"#A
IF6{H'/'8'8{7#gH$x	A
 IEE!K==9"BBBB 		-/BC	ik  
IEE!K==9"BBBBrH   	Estimatorc                    [         R                  R                  S5      nSnSu  p4U [        L a  UR	                  U5      nOUR                  SSU5      nUR	                  X45      nU " US9nUR                  UL d   SU R                   S35       eUR                  Xe5        [        UR                  [         R                  " U5      5        g )Nr   rE  r  rJ   r;  z`alphas` was mutated in `z
.__init__`)r@   rb   rc   r   r   rJ  r<  r
  r   r-   r%  )rK  ro   r<  rR   rS   ry   rp   	ridge_ests           rF   test_ridgecv_alphas_conversionrN    s    
))


"CF IGIIi KK1i(		)(A(Iv% 
#I$6$6#7zB% MM!y''F);<rH   c                    [         R                  R                  S5      nSnSu  pEU[        L a  UR	                  U5      nOUR                  SSU5      nUR	                  XE5      nU" X0S9nU c4  [        R                  " [        SS9   UR                  Xv5        SSS5        gUR                  Xv5        g! , (       d  f       g= f)	z1Check alpha=0.0 raises error only when `cv=None`.r   )r   r   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  rK  ro   r<  rR   rS   ry   rp   rM  s	            rF   test_ridgecv_alphas_zerorQ    s     ))


"CF IGIIi KK1i(		)(A/I	z]]:-RSMM! TS 	a TSs   B44
Cc                     [         R                  R                  S5      n SnS H  u  p#U R                  U5      nU R                  X#5      nSU R	                  U5      -   n[        S5      n[        XS9nUR                  XTUS9  SU0n	[        [        5       XS	9n
U
R                  XTUS9  UR                  U
R                  R                  :X  d   e[        UR                  U
R                  R                  5        M     g )
Nr   rE  )r  r   r   r   r   rP  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_weightrX    s    
))


"CF "3	IIi IIi,chhy111X/A6 v&
%':5
q=1~~!3!3!9!9999!'--1C1C1I1IJ "3rH   c                    ^^^^^ SS/n SS/n[         R                  R                  S5      n[        X5       GH  u  p4UR	                  X45      mUR	                  U5      mUR	                  U5      S-  S-   nSnSnUS S 2[         R
                  4   mU[         R
                  S S 24   m[        SS9mTR                  TTU5        TR                  TTU5        TR                  TTU5        UUUU4S jnUUUU4S	 jn	S
n
[        R                  " [        U
S9   U" 5         S S S 5        S
n
[        R                  " [        U
S9   U	" 5         S S S 5        GM     g ! , (       d  f       N?= f! , (       d  f       GMB  = f)NrJ   r   r   rV   r   g       @r   c                  ,   > TR                  T TT5        g r?   r   )rp   r   sample_weights_not_OKry   s   rF   fit_ridge_not_okStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_okG  s    IIa12rH   c                  ,   > TR                  T TT5        g r?   r[  )rp   r   sample_weights_not_OK_2ry   s   rF   fit_ridge_not_ok_2Utest_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]  ra  r   rp   r   r\  r`  ry   s              @@@@@rF   9test_raises_value_error_if_sample_weights_greater_than_1drh  /  sK    QJa&K
))


#C!$Z!=	IIi,IIi IIi0A59!! 1!RZZ- @"3BJJM"BA 			!Q)*		!Q+,		!Q+,	3 	3	5 	5 >]]:W5 6 >]]:W5  657 ">. 65 65s   EE*
E'	*
E:	zn_samples,n_featuresrJ   c                 j   [         R                  R                  S5      n[        SSS9n[        SSS9nUR	                  X5      nUR	                  U 5      nUR	                  U 5      S-  S-   nU" U5      n	UR                  XUS9  UR                  XgUS9  [        UR                  UR                  SS	9  g )
Nr   r   Fr   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_weightsrm  V  s     ))


#Cs%8Lc7K		)(A		)AYYy)Q.2N"HX?OOAO7l00+2C2CQOrH   c                      [         R                  " SS/SS/SS/SS/SS//5      n / SQn[        SS9nUR                  X5        g )	Nr3  r   r4  r   r   r5  )rV   rZ   rq  r;  )r@   r   r   r   )rp   ry   r   s      rF   test_ridgecv_int_alphasro  l  sK    
4,q	D$<#sc3ZPQAA <(E	IIaOrH   zparams, err_type, err_msgr<  )rV   rW   iz alphas\[1\] == -1, must be > 0.0)gr3  g      $z"alphas\[0\] == -0.1, must be > 0.0)rV   r   1z1alphas\[2\] must be an instance of float, not strc                     Su  pE[         R                  XE5      n[         R                  SSU5      n[        R                  " X#S9   U " S0 UD6R                  Xg5        SSS5        g! , (       d  f       g= f)z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.r  r   rJ   r   Nr   )ro   r   rJ  r   r   r   )rK  rN   err_typer   rR   rS   rp   ry   s           rF   test_ridgecv_alphas_validationrs  u  sZ    ( !I		)(AAq)$A	x	/F% 
0	/	/s   A&&
A4c                     Su  p[         R                  X5      nU [        L a  [         R                  U5      nO[         R                  SSU5      nU " SS9R	                  X45        g)zCheck the case when `alphas` is a scalar.
This case was supported in the past when `alphas` where converted
into array in `__init__`.
We add this test to ensure backward compatibility.
r  r   rJ   rV   r;  N)ro   r   r   rJ  r   )rK  rR   rS   rp   ry   s        rF   test_ridgecv_alphas_scalarru    sU     !I		)(AGIIi KK1i(QA!rH   c                      [        SSS9n U R                  [        [        5        U R                  R
                  S   [        R
                  S   :X  d   eg )Nr8   rV   )r   r   r   )r   r   r   r   r   r   )r  s    rF   test_sparse_cg_max_iterrw    sB    
{Q
/CGGJ
#99??1!1!1!!4444rH   z-ignore::sklearn.exceptions.ConvergenceWarningc            	         Sn [         [        p![        R                  " X S45      R                  n[        SS5       HQ  nS HH  n[        XTSS9nUR                  X5        [        UR                  [        R                  " X@5      5        MJ     MS     S H.  n[        USSS9nUR                  X5        UR                  c  M.   e   g )	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_iterr}    s     Izq
''!^
$
&
&C!QK-FveDCGGAOs{{BGGH,HI .   36A48{{""" 3rH   )r:   r8   r  r  with_sample_weightc                    U S:H  n[        SX$S9u  pVSnU(       a>  [        R                  R                  U5      nSUR	                  UR
                  S   S9-   nU S:X  a  S	OU n	[        U	S
US9n
[        U S
US9nU
R                  XVUS9  UR                  U" U5      XgS9  [        U
R                  UR                  5        [        U
R                  UR                  SS9  g)a  Check that ridge finds the same coefs and intercept on dense and sparse input
in the presence of sample weights.

For now only sparse_cg and lbfgs can correctly fit an intercept
with sparse X with default tol and max_iter.
'sag' is tested separately in test_ridge_fit_intercept_sparse_sag because it
requires more iterations and should raise a warning if default max_iter is used.
Other solvers raise an exception, as checked in
test_ridge_fit_intercept_sparse_error
r  r   )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   r~  rl   r   r+  rp   ry   r   ro   dense_solverrk  rj  s               rF   test_ridge_fit_intercept_sparser    s       H)$6DA Mii##$67ckkqwwqzk:: #)F"2;L|JKEHELOOAO6]1%qFK**L,C,CDK%%|'9'9ErH   )r<   r7   r9   c                     [        SSS9u  p#U" U5      n[        U S9nSR                  U 5      n[        R                  " [
        US9   UR                  XC5        S S S 5        g ! , (       d  f       g = f)Nr   r   )rS   rU   r  zsolver='{}' does not supportr   )r/  r   formatr   r   r   r   )r   r   rp   ry   X_csrrj  r   s          rF   %test_ridge_fit_intercept_sparse_errorr    s^     *RaHDA!E'L,33F;G	z	1" 
2	1	1s   A##
A1c                    [        SSUSS9u  p4U (       a?  [        R                  R                  U5      nSUR	                  UR
                  S   S9-   nOS nU" U5      n[        SSS	S
SS9n[        S0 UD6n	[        S0 UD6n
U	R                  X4US9  [        R                  " 5          [        R                  " S[        5        U
R                  XtUS9  S S S 5        [        U	R                  U
R                  SS9  [        U	R                  U
R                  SS9  [         R"                  " [        SS9   [        SS	SS S9R                  Xt5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   g      @)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   )r~  rl   r   rp   ry   ro   r   r  rN   rk  rj  s              rF   #test_ridge_fit_intercept_sparse_sagr    sG   
 *1CcDA ii##$67ckkqwwqzk::!E%tF /&/K?6?LOOAO6		 	 	"g{3? 
# K**L,C,C$OK%%|'9'9E	k)B	CU$D4HLLUV 
D	C 
#	"
 
D	Cs   ',E2E(
E%(
E6return_interceptr   r  	container)r  r8   r9   r:   r;   r<   r  c                    [        S5      nUR                  SS5      n/ SQn[        R                  " XV5      nSnU (       a  SnXx-  nU" U5      n	Su  p[        (       a  SOS	nUS
:H  nUS;  a;  U (       a4  [
        R                  " [        SS9   [        U	UU
UUU UUUS9	  SSS5        g[        U	UU
UUUU UUS9	nU (       a  Uu  nn[        XSUS9  [        UUSUS9  g[        XSUS9  g! , (       d  f       g= f)z=check if all combinations of arguments give valid estimationsr   r  r   )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#   rT  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JE94$D H_$)9]]:-JK+!1! 
 L 	
	#)
C iqt<	>Ead;? LK 	s   C))
C7)r7   r8   r9   r:   r;   r<   r  c                 v   [         R                  R                  S5      nSnU S:H  nSu  pEUR                  XE5      nUR                  U5      nUR	                  [         R
                  5      nUR	                  [         R
                  5      n	S[         R                  " [         R
                  5      R                  -  n
[        X SXS9nUR                  X5        UR                  n[        X SXS9nUR                  Xg5        UR                  nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  U5      R                  UR                  :X  d   eUR                  U5      R                  UR                  :X  d   e[        UR                  UR                  SS	S
9  g )Nr   r   r  rS  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  sh    ))


"CE H I99Y+D99YD;;rzz"D;;rzz"D
bhhrzz"--
-CScH LLnnG ScH LLnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555HNNHNNDIrH   c                  2   [         R                  R                  S5      n [         R                  " SS/5      nSu  p#nU R	                  X#5      nU R	                  X$5      nUR                  [         R                  5      nUR                  [         R                  5      n[        USS9n	U	R                  Xx5        U	R                  n
[        USS9nUR                  XV5        UR                  nU
R                  UR                  :X  d   eUR                  UR                  :X  d   eU	R                  U5      R                  UR                  :X  d   eUR                  U5      R                  UR                  :X  d   e[        U	R                  UR                  SS9  g )	Nr   r   r   )r  r  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  sB    ))


"CHHc3Z E&-#I899Y+D99Y)D;;rzz"D;;rzz"D 54HLLnnG 54HLLnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555BrH   )r7   r9   r:   r8   r;   r<   r  seedc                    [         R                  R                  U5      nSu  p4UR                  X45      nUR                  U5      n[         R                  " XV5      SUR                  U5      -  -   nSnU S:H  n	[        5       n
U S:X  a  SOSn[         R                  [         R                  4 H6  n[        UR                  U5      UR                  U5      UU US U	SS	S
S
S9X'   M8     U
[         R                     R                  [         R                  :X  d   eU
[         R                     R                  [         R                  :X  d   e[        U
[         R                     U
[         R                     US9  g )NrS  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    sA   
 99((.L I91Aj)D
q$!3!3I!>>>AE HfG [(4dD**bjj1!1HH]#HH]#%""
 2 2::$$

2222::$$

222GBJJ')<4HrH   c                      [        SS9u  p[        R                  " U 5      n U S S S2S S 24   n US S S2   n[        SS9R	                  X5        g )Nr   r  rJ   r;   r  )r   r@   asfortranarrayr   r   )rp   ry   s     rF   test_ridge_sag_with_X_fortranr    sO    +DA
!A	#A#q&	A	#A#A	A!rH   zClassifier, paramsc                 X   [        SSS9u  p#UR                  SS5      n[        R                  " X3/SS9nU " S	0 UD6R	                  X$5      nUR                  U5      nUR                  UR                  :X  d   e[        USS2S4   USS2S4   5        [        SS9R	                  X#5        g)
zNCheck that multilabel classification is supported and give meaningful
results.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FDA			"aA
vA&A

v

"
"1
(C[[^F<<177"""vad|VAqD\2	A!rH   r  r  )rX   r   r5  r   c                 b   [         R                  " SS/SS/SS/SS//5      n[         R                  " SS	/5      nU(       a  S
nUR                  U5      U-   nOUR                  U5      n[        USXS9nUR	                  X65        [         R
                  " UR                  S:  5      (       d   eg)z:Test that positive Ridge finds true positive coefficients.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 
IIaO66%++"####rH   c                    [         R                  R                  S5      nUR                  SS5      nUR	                  SSUR
                  S   S9nU (       a
  SnX4-  U-   nOX4-  nXbR                  UR
                  S   S9S	-  -  n/ nS
 H8  n[        XU SS9n	UR                  U	R                  X65      R                  5        M:     [        USSS.6  g)zTest that Ridge w/wo positive converges to the same solution.

Ridge with positive=True and positive=False must give the same
when the ground truth coefs are all positive.
r   ,  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,,-	 "
 W4a0rH   )r7   r9   r:   r8   r;   r<   c           
         Sn[         R                  " SS/SS//5      n[         R                  " SS/5      nX#-  n[        USU SS	9n[        R                  " [
        S
S9   UR                  X$5        SSS5        [        R                  " [
        SS9   [        X$USU SS9u    nSSS5        g! , (       d  f       NA= f! , (       d  f       g= f)z5Test input validation for positive argument in Ridge.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	AV5QE	z)D	E		! 
F 
z)J	K%$v
1 
L	K 
F	E 
L	Ks    B-B>-
B;>
Cc                   ^ ^	^
 [        SSSS9u  m	m
Sm SnSU	U U
4S jjn[        T S9R                  T	T
5      n[        T S	S
9R                  T	T
5      nU" U5      nU" U5      nXV::  d   e[        U5       H  nU" XGS9nXh::  a  M   e   g)z?Check ridge loss consistency when positive argument is enabled.r  r   r}  r5  rq  Nc                 f  > U R                   nUbQ  [        R                  R                  U5      nU R                  UR                  SX R                  R                  S9-   nOU R                  nS[        R                  " TTU-  -
  U-
  S-  5      -  ST-  [        R                  " US-  5      -  -   $ )Nr   r_   r   rJ   )r   r@   rb   rc   r   re   r   r   )	r   rU   noise_scaler   ro   r   rp   rz   ry   s	         rF   
ridge_loss,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   rz  )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                     [        SSSS9u  p[        R                  " US5      n[        R                  " U /5      n SSSS.n[	        XU 40 UD6n[        XU 5      n[        XES	S
S9  g)zETest that LBGFS gets almost the same coef of svd when positive=False.r  r   r}  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  =	  so     SSrJDA
q!AJJwEF aE4V4JqU+MJDqArH   c            	         [         R                  " SS/SS//5      n [         R                  " SS/5      n[        SSSSS	SS
9n[        R                  " [
        SS9   UR                  X5        SSS5        g! , (       d  f       g= f)z1Test that LBFGS solver raises ConvergenceWarning.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	  su    
1b'Aq6"#A
%AE 
(0O	P		! 
Q	P	Ps   A77
Br=  c           	      r   Ub)  US:X  d  US;   a  U (       a  [         R                  " S5        [        R                  R	                  S5      nSnUS:X  a  US-  nOUS-  nUR                  Xg5      nUR                  U5      n	Ub  U" U5      n[        U S	UUS
:H  USS9n
[        S0 U
D6R                  XSS9nUR                  R                  5       nU (       a  UR                  n[        R                  " U	5      nUR                  XUS9  [        UR                  USS9  U (       a  [        UR                  W5        UR                  SSUR                  S   S9nSUSS& U	SS=== S-  sss& UR                  XUS9  UR                  R                  5       nU (       a  UR                  nUR                  USS2SS24   U	SS USS S9  [        UR                  USS9  U (       a  [        UR                  W5        [        S0 U
D6R!                  [        R"                  U
S   -  S9nUR                  X[        R"                  U-  S9  US;   a!  U (       d  [         R$                  " SU S35        [        UR                  USS9  U (       a  [        UR                  W5        Ub  UR'                  5       n[        R(                  " XSUS-   /SS9n[        R(                  " XSUS-   /5      nUR                  5       nUSUS-  === S-  sss& [        R(                  " XSUS-   /SS9nUb  U" U5      nU" U5      n[        S0 U
D6R                  XUS9n[        S0 U
D6R                  UUUS9n[        UR                  UR                  5        U (       a!  [        UR                  UR                  5        gg)zTest that the impact of sample_weight is consistent.

Note that this test is stricter than the common test
check_sample_weight_equivalence alone.
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   rT  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  _	  si    #U?v)==-KK34
 ))


#CIv~!^
]
'AA#Q#G#'F /&/

a$

7C99>>DNN	LLOMGGAG.CIIt$/	2
 KKDqqwwqzKBMM"#bcFdNFGGAG.99>>DNN	GGAcrc1fIq"v]3B-?G@CIIt$/	2 ?6?%%BEEF7O,C%DDHHQ!6H7 wvh&STUDJJ403 #IIK	.	Q/0q	9B	.	Q/0	1B#((*O$i1n%*%nn	&6	Q78qO #Qb!?6?q?CD?6?r2_EDDJJ

+9 rH   )rr  rZ   )rZ   rr  no_swwith_swno_interceptwith_interceptr   c                    Uu  pV[        XVUSS9u  pxU(       a+  [        R                  " UR                  S   4S9n	SU	SSS2'   OSn	[        R                  " SSS	5      n
[        U U
S
USS9nUR                  XxU	S9  [        R                  " / UR                  Q[        U
5      P7S9n[        5       n[        U
5       H  u  p[        UR                  Xx5      5       Hg  u  nu  nn[        XSS9nU(       a  UR                  UU   UU   U	U   S9  OUR                  UU   UU   5        UR                  UU   5      UUSU4'   Mi     M     [        UR                  USS9  g)aN  Check that the predictions stored in `cv_results_` are on the original scale.

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

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

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/13998
r   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  r~  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  	  sm   . $IiVWDA qwwqzm4 cc [[Q"F (#H LL]L3 ((!8177!8CK!89K	B%f-	*3BHHQN*C&C&)X5QE!		iL!I,mI>V   		!I,)5/4}}Qx[/IKS)+, +D . H((+DArH   c                    Uu  p4[        UUSUS9u  pV[        R                  " U5      n[        U SSS9nUR	                  XVUS9  [        5       n	[        UR                  S9n
[        R                  " U	R                  U5       VVs/ s H-  u  pU
R	                  X[   Xk   X{   S9R                  X\   5      PM/     snn5      n[        UR                  [        Xm5      * 5        gs  snnf )	zCheck that `RidgeCV` works properly with multioutput and sample_weight
when `scoring != None`.

We check the error reported by the RidgeCV is close to a naive LOO-CV using a
Ridge estimator.
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     $I'	DA GGI&M#;dH LL]L3	B(E
  "xx{		
  + IIah8LIMUU  +		
J H((+=a+L*LM	
s   4C"
c                   ^ U u  p[        XSSS9u  p4S mU4S jn[        US9nUR                  X45        [        5       n[	        UR
                  S9n[        R                  " UR                  U5       V	V
s/ s H,  u  pUR                  X9   XI   5      R                  X:   5      PM.     sn
n	5      n[        UR                  T" XK5      * 5        gs  sn
n	f )	zECheck that `RidgeCV` works properly with a custom multioutput scorer.rJ   r   r  c                     X-
  S-  n[         R                  " USS9nUR                  S:X  a  [         R                  " USS/S9* $ U* $ )NrJ   r   r   rV   )r  )r@   rA   ndimr  )y_truerD   errorsmean_errorss       rF   custom_error=test_ridge_cv_custom_multioutput_scorer.<locals>.custom_error0
  sN    /a'ggf1-q JJ{QF;;; |rH   c                 4   > T" X R                  U5      5      * $ )zGMultioutput score that give twice more importance to the second target.)r   )r  rp   ry   r  s      rF   custom_multioutput_scorerJtest_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     $IaaDA6 89HLL	B(EKM88TU;W;KE18QX	&	.	.qw	7;WJ H((<+F*FG 	Xs   73C
metaestimator)enable_metadata_routingc                 .    U " 5       R                  5         g)zTest that `RidgeCV` or `RidgeClassifierCV` with default `scoring`
argument (`None`), don't enter into `RecursionError` when metadata is routed.
N)get_metadata_routing)r  s    rF   *test_metadata_routing_with_default_scoringr  N
  s     O((*rH   zmetaestimator, make_datasetc                     U" SSSS9u  p#[        U 5      n U R                  X#[        R                  " UR                  S   5      S9  g)zTest that `set_score_request` is set within `RidgeCV.fit()` and
`RidgeClassifierCV.fit()` when using the default scoring and no
UnsetMetadataPassedError is raised. Regression test for the fix in PR #29634.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
  sB     #!"EDA-(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,  r1  r:  r@  rB  rG  rJ  rN  rQ  rX  rh  rm  ro  r   	TypeErrorrs  ru  rw  r+  r}  r  r  r  r   r   r  r  r  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rH   rF   <module>r     sK        ,   2    H G  / ,  S   B 4 #S  !!#! 
Jii
  #$iiA C 	$3i#C*S/ 
JDKK%+ '(C& )C&L 7+4-8)# 9 ,)#X 7+4-8#? 9 ,#?L 7+4-8%2 9 ,%2P 7+4-82+ 9 ,2+j 7+4-828 9 ,28j 7+4-82+ 9 ,2+j 7+4-8+dVn-DE3+./' / F 9 ,/'d+
4<>$0*@ "23.9
D : 4
D "NO*T5M:.9. : ; P." "NO*T5M:.93 : ; P3$ 	
	*Z *1GF^#+

 (F+R	
+R\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   