
    Wh>             	       f   d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZAmBZB d dlCmDZDmEZEmFZFmGZGmHZHmIZI g dZJdZKdZL e
j                         ZNeNj                  eNj                  cZQZR ej                  eQj                  d          ZUej                  j                  d       ZXeXj                  eU       eUdd ZUeQeU   eReU   cZQZR e
j                         Z[e[j                  e[j                  cZ\Z]d Z^d Z_ ej                  ddg      d        Zaej                  j                  deJ      ej                  j                  ddd g      d!               Zdej                  j                  deJ      ej                  j                  ddd g      d"               Zeej                  j                  deJ      ej                  j                  ddd g      d#               Zfej                  j                  deJ      ej                  j                  ddd g      d$               Zgej                  j                  deJ      ej                  j                  ddd g      d%               Zhej                  j                  deJ      ej                  j                  ddd g      d&               Ziej                  j                  deJ      ej                  j                  ddd g      ej                  j                  d'dgeGz         ej                  j                  d(d)d*g      d+                             Zjd, Zkd- Zld. Zmd/ Znd0 Zod1 Zpej                  j                  d2g d3      ej                  j                  d4eG      d5               Zqej                  j                  d6g d7      ej                  j                  d8dd g      ej                  j                  d4eG      d9                      Zrej                  j                  d6g d7      ej                  j                  d8dd g      ej                  j                  d4eG      d:                      Zs	 	 	 	 	 	 	 	 	 	 	 	 dd<Ztej                  j                  d=d>  eg d?dgeGz         D              ej                  j                  d@g dA      dB               Zuej                  j                  dCdDdEg      ej                  j                  dFej                  geGz         ej                  j                  dGdHdIg      ej                  j                  ddd g      ej                  j                  dJg dK      dL                                    ZwdM Zxej                  j                  dCdDdEg      ej                  j                  dFej                  geGz         ej                  j                  dNdOdPg      ej                  j                  dQg dR      dS                             Zyej                  j                  d'dgeGz         ej                  j                  dTg dU      dV               ZzdW Z{dX Z|ej                  j                  dY ed Z      ef ed Z      efg      d[        Z}ej                  j                  dY e       ef e       efg      ej                  j                  d\dd]g      d^               Z~d_ Zd` Zda Zdb Zej                  j                  dcddde^g      ej                  j                  d\d e*de      g      ej                  j                  d'dgeGz         df                      Zej                  j                  d\d e*de      g      ej                  j                  d'dgeGz         dg               Zdh Zdi Zej                  j                  dj e6       e5k      ej                  j                  dleBege9k      ej                  j                  dm edDn      ge9k      do                      Zej                  j                  dp e7d q            dr        Zej                  j                  dp ee2            ds        Zej                  j                  dte{e|eeeef      ej                  j                  d4eG      du               Zdv Zej                  j                  dweef      dx        Zdy Zej                  j                  dcddze_g      d{        Zej                  j                  dcddde^g      d|        Zej                  j                  d}eeg      d~        Zej                  j                  d\dd]g      ej                  j                  d}eeg      d               Zd Zd Zej                  j                  ddd]gd]dgg      ej                  j                  d'eEeFz   eGz   eHz   eIz         d               Zd Zej                  j                  d}eeg      ej                  j                  dddiedfddiedfddiedfg      d               Zej                  j                  d}eeg      d        Zd Zej                  j9                  d      d        Zej                  j                  dg d      ej                  j                  ddd g      ej                  j                  d4eG      d                      Zej                  j                  dg d      ej                  j                  d4eG      d               Zej                  j                  ddd g      ej                  j                  d4eG      d               Zej                  j                  dd dg      ej                  j                  dd ejB                  d      g      ej                  j                  dejD                  geGz         ej                  j                  dg d      d                             Zej                  j                  dg d      d        Zd Zej                  j                  dg d      ej                  j                  d ed;            d               Zd Zej                  j                  dei fed\difed\d]ifg      d        Zej                  j                  dddg      ej                  j                  ddd g      ej                  j                  d(g d      d                      Zej                  j                  ddd g      ej                  j                  d(g d      d               Zej                  j                  dg d      d        Zej                  j                  d(g d      d        Zej                  j                  d(g d      d        Zd Zej                  j                  dd dg      ej                  j                  d'dgeGz         ej                  j                  dddg      ej                  j                  deJdgz         d                             Zej                  j                  dd dg      ej                  j                  dd dg      ej                  j                  dd;dg      d                      Zd Zd Zej                  j                  deeg       e	d      d               Zej                  j                  d e       ef e       efg       e	d      d               Zy)    N)product)linalg)config_contextdatasets)clone)make_classificationmake_low_rank_matrixmake_multilabel_classificationmake_regression)ConvergenceWarning)LinearRegressionRidgeRidgeClassifierRidgeClassifierCVRidgeCVridge_regression)_check_gcv_mode	_RidgeGCV_solve_cholesky_solve_cholesky_kernel_solve_lbfgs
_solve_svd_X_CenterStackOp)
get_scorermake_scorermean_squared_error)GridSearchCV
GroupKFoldKFoldLeaveOneOutcross_val_predict)minmax_scale)check_random_state)_NUMPY_NAMESPACE_NAMES_atol_for_type_convert_to_numpy_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinationsyield_namespaces)_get_check_estimator_ids)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)_array_api_for_tests check_array_api_input_and_values)	_IS_32BITCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)svd	sparse_cgcholeskylsqrsagsaga)r9   r<   )r9   r:   r;   r<   r=      c                 2    t        j                  | |k(        S N)npmeany_testy_predkwargss      _/var/www/html/jupyter_env/lib/python3.12/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callablerH   Y   s    776V#$$    c                 .    | |z
  dz  j                         S )N   )rB   )rD   rE   s     rG   _mean_squared_error_callablerL   ]   s    f_"((**rI   longwide)paramsc                    |j                   dk(  rd\  }}nd\  }}t        ||      }t        j                  j	                  |       }t        ||||      }d|dddf<   t        j                  |      \  }}}	t        j                  |dkD        sJ |ddd|f   |dd|df   }}
|	d|ddf   |	|dddf   }}|j                   dk(  r8|j                  d	d
|      }||z  }|||j                  ||z
        dz  z  z  }nI|j                  d	d
|      }|j                  t        j                  d|z        z  |
j                  z  |z  }d}|t        j                  |      z  }d|d<   t        j                  |j                  |z  |z   |j                  |z        }|||z  z
  }|||z  z
  }t        j                  j                  |      t        j                  j                  |      k  sJ ||||fS )aD  Dataset with OLS and Ridge solutions, well conditioned X.

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

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

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

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

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

    We work with a simple constructed data set with known solution.
          ?Tr<   r=   V瞯<绽|=r{   r   r   tolrV   rW   rK   NrX   r   axissample_weight )dictrA   rB   sumr   fit
intercept_pytestapproxr+   coef_scoreonesshapesolver_)r   r   r   rm   rq   rz   rx   coefr{   rO   res_null	res_RidgeR2_Ridgemodel	intercepts                  rG   test_ridge_regressionr      s    &MAq!TE.EE'F 2771:~HAHI266)Q,'"&&1*===HOFOE	!SbS&	AH	AL		IIaO9Dv}}Y7777EKK&;;q!h 7777 OFO1BGGAGGAJ4GHEv}}Y7777EKK&;;q!h 7777==F"""rI   c                 F   |\  }}}}|j                   \  }}	d}
t        |
dz  || | dv rdnd|      }|ddddf   }d	t        j                  ||fd
      z  }t        j                  j                  |      t        ||	d
z
        k  sJ |r|d   }n*||j                  d      z
  }||j                         z
  }d}|j                  ||       |dd }|j                  t        j                  |      k(  sJ t        |j                  t        j                  ||f   d       y)a  Test that Ridge converges for all solvers to correct solution on hstacked data.

    We work with a simple constructed data set with known solution.
    Fit on [X] with alpha is the same as fit on [X, X]/2 with alpha/2.
    For long X, [X, X] is a singular matrix.
    r   rK   r   r   r   r   NrX         ?rW   r   r   :0yE>atol)r   r   rA   concatenater   matrix_rankrb   rB   r   r   r   r   r+   r   r_r   r   r   rm   rq   rz   rx   r   rS   rT   r{   r   r   s                rG    test_ridge_regression_hstacked_Xr      s&    &MAq!TGGIzEai#.EE'E 	
!SbS&	AbnnaV!,,A99  #s9j1n'EEEEH	AL		IIaO9Dv}}Y7777 EKKtTz!2>rI   c                 >   |\  }}}}|j                   \  }}	d}
t        d|
z  || | dv rdnd|      }|ddddf   }t        j                  ||fd	
      }t        j                  j                  |      t        ||	      k  sJ t        j                  ||f   }|r|d   }n*||j                  d	
      z
  }||j                         z
  }d	}|j                  ||       |dd }|j                  t        j                  |      k(  sJ t        |j                  |d       y)aJ  Test that Ridge converges for all solvers to correct solution on vstacked data.

    We work with a simple constructed data set with known solution.
    Fit on [X] with alpha is the same as fit on [X], [y]
                                                [X], [y] with 2 * alpha.
    For wide X, [X', X'] is a singular matrix.
    r   rK   r   r   r   r   NrX   r   r   r   r   )r   r   rA   r   r   r   rb   r   rB   r   r   r   r   r+   r   r   s                rG    test_ridge_regression_vstacked_Xr      s!    &MAq!TGGIzE%i#.EE'E 	
!SbS&	A
1vA&A99  #s9j'AAAA
adAH	AL		IIaO9Dv}}Y7777 EKKD1rI   c                 B   |\  }}}}|j                   \  }}	d}
t        |
|| | dv rdnd|      }t        d
i |}|r|ddddf   }|d   }|dd }nd}|j                  ||       ||	kD  s|s;|j                  t        j                  |      k(  sJ t        |j                  |       yt        |j                  |      |       t        ||z  |z   |       t        j                  j                  t        j                  |j                  |j                  f         t        j                  j                  t        j                  ||f         kD  sJ t        j                  d	       |j                  t        j                  |      k(  sJ t        |j                  |       y)a  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
    Note: This checks the minimum norm solution for wide X, i.e.
    n_samples < n_features:
        min ||w||_2 subject to X w = y
    r   r   r   r   r   NrX   1Ridge does not provide the minimum norm solution.reasonr   )r   r   r   r   r   r   r   r+   r   predictrA   r   rl   r   xfail)r   r   r   rm   rq   rz   r   rx   rS   rT   r{   rO   r   r   s                 rG   !test_ridge_regression_unpenalizedr   (  s    &MAq$GGIzE#.EE'F OFOE a"fIH	CRy		IIaO
 :]6==#;;;;T* 	a(!,D9,a0yy~~beeE$4$4ekk$ABCbiinnEE)T/"G
 
 	
 
 	OP6==#;;;;T*rI   c                    |\  }}}}|j                   \  }}	d}
t        |
|| | dv rdnd|      }|r|ddddf   }|d   }|dd }nd}dt        j                  ||fd	
      z  }t        j                  j                  |      t        ||	      k  sJ |j                  ||       ||	kD  s|sg|j                  t        j                  |      k(  sJ | dk(  rt        j                          t        |j                  t        j                  ||f          yt        |j                  |      |       t        j                  j!                  t        j                  |j                  |j                  f         t        j                  j!                  t        j                  |||f         kD  sJ t        j"                  d       |j                  t        j                  |      k(  sJ t        |j                  t        j                  ||f          y)a^  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
    OLS fit on [X] is the same as fit on [X, X]/2.
    For long X, [X, X] is a singular matrix and we check against the minimum norm
    solution:
        min ||w||_2 subject to min ||X w - y||_2
    r   r   r   r   r   NrX   r   rW   r   r:   r   r   )r   r   rA   r   r   r   rb   r   r   r   r   skipr+   r   r   r   rl   r   r   r   r   rm   rq   rz   r   rx   rS   rT   r{   r   r   s                rG   ,test_ridge_regression_unpenalized_hstacked_Xr   _  s    &MAq$GGIzE#.EE'E a"fIH	CRy	bnnaV!,,A99  #s9j'AAAA	IIaO:]6==#;;;;ZKKMRUU4:%67
 	a(!,yy~~beeE$4$4ekk$ABCbiinnEE)T4'(G
 
 	
 
 	OP6==#;;;;RUU4:%67rI   c                    |\  }}}}|j                   \  }}	d}
t        |
|| | dv rdnd|      }|r|ddddf   }|d   }|dd }nd}t        j                  ||fd      }t        j                  j                  |      t        ||	      k  sJ t        j                  ||f   }|j                  ||       ||	kD  s|s;|j                  t        j                  |      k(  sJ t        |j                  |       yt        |j                  |      |       t        j                  j                  t        j                  |j                  |j                  f         t        j                  j                  t        j                  ||f         kD  sJ t        j                   d	
       |j                  t        j                  |      k(  sJ t        |j                  |       y)a  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
    OLS fit on [X] is the same as fit on [X], [y]
                                         [X], [y].
    For wide X, [X', X'] is a singular matrix and we check against the minimum norm
    solution:
        min ||w||_2 subject to X w = y
    r   r   r   r   r   NrX   r   r   r   )r   r   rA   r   r   r   rb   r   r   r   r   r   r+   r   r   rl   r   r   s                rG   ,test_ridge_regression_unpenalized_vstacked_Xr     s    &MAq$GGIzE#.EE'E a"fIH	CRy	
1vA&A99  #s9j'AAAA
adA	IIaO:]6==#;;;;T*
 	a(!,yy~~beeE$4$4ekk$ABCbiinnEE)T/"G
 
 	
 
 	OP6==#;;;;T*rI   sparse_containerr{   r   {Gz?c                    |=|r| t         vrt        j                          n|s| t        vrt        j                          |\  }}}}	|j                  \  }
}t
        j                  dd|
      }t        ||| | dv rdndd|	      }|dddd
f   }t        j                  ||fd      }t        j                  ||f   }t        j                  |d|z
  f   |z  }|r|	d
   }n*||j                  d      z
  }||j                         z
  }d}| ||      }|j                  |||       |	dd
 }	|j                  t        j                  |      k(  sJ t        |j                   |	       y)zTest that Ridge with sample weights gives correct results.

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

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

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

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

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

9V
4I

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

 $..!!R'''!!Y__444lr2
+	

 
 
s   CE,,E5z#array_namespace, device, dtype_name)idscheckr  r   c                 J    | j                   j                  } ||| |||       y )N)r  r  )	__class____name__)r  r  r  r  r  r  s         rG   test_ridge_array_api_compliancer    s%    $ ''D	$	?6jQrI   r  )include_numpy_namespacesc                    t        | d       }|j                  t        d d       }|j                  t        d d       }t        j
                  d   d   j                  }|ddhz
  D ]p  }t	        ||dk(        }d	|j                   d
| d}t        j                  t        |      5  t        d      5  |j                  ||       d d d        d d d        r t	        dd      }d|j                   d}t        j                  t        |      5  t        d      5  |j                  ||       d d d        d d d        t	               }d|j                   d}t        j                  t        |      5  t        d      5  |j                  ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   CxY w# 1 sw Y   y xY w)Nr  r   r   r   rv  r8   lbfgsr   r-  z Array API dispatch to namespace z" only supports solver 'svd'. Got 'z'.r   Tr  zYThe solvers that support positive fitting do not support Array API dispatch to namespace zc. Please either disable Array API dispatch, or use a numpy-like namespace, or set `positive=False`.z&Using Array API dispatch to namespace z with `solver='auto'` will result in using the solver 'svd'. The results may differ from those when using a Numpy array, because in that case the preferred solver would be cholesky. Set `solver='svd'` to suppress this warning.)r0   r'  r  r  r   _parameter_constraintsoptionsr  r   r   r   r   r   r   UserWarning)r  r  r  r  available_solversr   r   expected_msgs           rG   6test_array_api_error_and_warnings_for_solver_parameterr    s    
od	;B

6"1:&I

6"1:&I44X>qAII#vuo5 	0Vf.?@.r{{m <""(- 	
 ]]:\: 	048 0		)Y/0	0 	0	0 $/E	++-;;- 8.	.  
z	6 ,t4 	,IIi+	,, GE
0 >D 	D  
k	6 ,t4 	,IIi+	,, ,-0 0	0 	0	, 	,, ,	, 	,, ,sl   &F23F&F2GF?0G5G#GG#&F/+F22F<	?G	GGG 	G##G,c                    t        | d       }|j                  t        d d       }|j                  t        d d       }t	               }d}t        j                         5  t        j                  d|t               t        d      5  |j                  ||       d d d        d d d        t        d      5  t	        dd	      j                  ||       d d d        y # 1 sw Y   DxY w# 1 sw Y   HxY w# 1 sw Y   y xY w)
Nr  r   zkResults might be different than when Array API dispatch is disabled, or when a numpy-like namespace is usederror)messagecategoryTr  rv  r  )r0   r'  r  r  r   warningscatch_warningsfilterwarningsr  r   r   )r  r  r  r  r   r  s         rG   )test_array_api_numpy_namespace_no_warningr  :  s    	od	;B

6"1:&I

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

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

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

DJJ/rI   c                  @   t        j                  ddgddgddgddgddgg      } g d}t        d g d      }|j                  | |       t        d	d
ig d      }|j                  | |       t	        |j                  ddgg      t        j                  dg             y )Nr  r   r  r   r   r  )r   r7  rW   )r  r>  rW   rY   )r   r7  rW   r[   gɿrK   rX   )rA   r   r   r   r.   r   )rq   rz   r  s      rG   test_class_weights_cvr    s    
4,q	D$<#sc3ZPQAA
n
ECGGAqM !U<N
OCGGAqMs{{T1I;/2$@rI   rS  c                    t         j                  j                  d      }d}d}|j                  ||      }g d}t	        |      }t        |       rt        |       n| }t        |d d|      }|j                  |      }	|j                  ||	       |j                  j                  ||fk(  sJ d}
|j                  ||
      }	|j                  ||	       |j                  j                  ||
|fk(  sJ t        dd|       }t        j                  t        d	
      5  |j                  ||	       d d d        y # 1 sw Y   y xY w)Nr   r  r   r7  r   rR  Tr>  rU  re  rV  r   )rU  re  rV  zcv!=None and store_cv_resultsr   )rA   rc   rd   r   r  r  r   r   r   ri  r   r   r   r   )rV  rp   rS   rT   r  r>  n_alphasr  rrz   r   s              rG   test_ridgecv_store_cv_resultsr    s    ))


#CIJ		)Z(AF6{H'/'8{7#gHv$xPA 			)AEE!QK==9h"7777 I		)Y'AEE!QK==9i"BBBB1tW=A	z)H	I 	a  s   D55D>c                 >   t        j                  ddgddgddgddgddgg      }t        j                  g d      }|j                  d   }g d}t        |      }t	        |       rt        |       n| }t        |d d|	      }d
}|j                  ||       |j                  j                  |||fk(  sJ t        j                  g dg dg dg      j                         }|j                  d
   }|j                  ||       |j                  j                  |||fk(  sJ y )Nr  r   r  r   r   r  r	  Tr
  rW   )rW   rX   rW   rX   rW   )rX   rX   rW   rX   rX   )
rA   r   r   r  r  r   r   r   ri  	transpose)	rV  r  rz   rS   r>  r  r  r  r   s	            rG   )test_ridge_classifier_cv_store_cv_resultsr    s   
4,q	D$<#sc3ZPQA
"#A
IF6{H'/'8{7#gH$x	A
 IEE!QK==9i"BBBB 		-/BC	ik  
IEE!QK==9i"BBBBrI   	Estimatorc                    t         j                  j                  d      }d}d\  }}| t        u r|j	                  |      }n|j                  dd|      }|j	                  ||      } | |      }|j                  |u sJ d| j                   d       |j                  ||       t        |j                  t        j                  |             y )Nr   r	  r   r   rK   r=  z`alphas` was mutated in `z
.__init__`)rA   rc   rd   r   r   randintr>  r  r   r.   r'  )r  rp   r>  rS   rT   rz   rq   	ridge_ests           rG   test_ridgecv_alphas_conversionr    s    
))


"CF IzGIIi KK1i(		)Z(A(Iv% 
#I$6$6#7zB% MM!Qy''F);<rI   c                    t         j                  j                  d      }d}d\  }}|t        u r|j	                  |      }n|j                  dd|      }|j	                  ||      } |||       }| 7t        j                  t        d      5  |j                  ||       ddd       y|j                  ||       y# 1 sw Y   yxY w)	z1Check alpha=0.0 raises error only when `cv=None`.r   )r   r   rR  r  rK   r>  rU  Nz"alphas\[0\] == 0.0, must be > 0.0.r   )
rA   rc   rd   r   r   r  r   r   r   r   )	rU  r  rp   r>  rS   rT   rz   rq   r  s	            rG   test_ridgecv_alphas_zeror  	  s     ))


"CF IzGIIi KK1i(		)Z(AB/I	z]]:-RS 	 MM!Q	  	  	a	  	 s   B<<Cc                     t         j                  j                  d      } d}dD ]  \  }}| j                  |      }| j                  ||      }d| j	                  |      z   }t        d      }t        ||      }|j                  |||       d|i}	t        t               |	|	      }
|
j                  |||       |j                  |
j                  j                  k(  sJ t        |j                  |
j                  j                          y )
Nr   r	  )r  r   r   r   r   r  r   r{   rd  )rA   rc   rd   r   randr   r   r   r   r   rX  best_estimator_r{   r-   r   )rp   r>  rS   rT   rz   rq   r   rU  r3  
parametersgss              rG   test_ridgecv_sample_weightr     s    
))


"CF "3 K	:IIi IIi,chhy111XB/Aq6 v&
%':"5
q!=1~~!3!3!9!9999!'--1C1C1I1IJKrI   c                     ddg} ddg}t         j                  j                  d      }t        | |      D ]!  \  }}|j	                  ||      |j	                  |      |j	                  |      dz  dz   }d}d}|d d t         j
                  f   |t         j
                  d d f   t        d      j                  |       j                  |       j                  |       fd}fd	}	d
}
t        j                  t        |
      5   |        d d d        d
}
t        j                  t        |
      5   |	        d d d        $ y # 1 sw Y   :xY w# 1 sw Y   <xY w)NrK   r   r   rW   r   g       @r   c                  ,    j                          y r@   r   )rq   r   sample_weights_not_OKrz   s   rG   fit_ridge_not_okzStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_okO  s    IIa12rI   c                  ,    j                          y r@   r#  )rq   r   sample_weights_not_OK_2rz   s   rG   fit_ridge_not_ok_2zUtest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2R  s    IIa34rI   z)Sample weights must be 1D array or scalarr   )rA   rc   rd   r   r   r   r   r   r   r   r   )
n_samplessn_featuressrp   rS   rT   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r%  r(  r   rq   r   r$  r'  rz   s              @@@@@rG   9test_raises_value_error_if_sample_weights_greater_than_1dr.  7  s\    QJa&K
))


#C!$Z!= !	:IIi,IIi IIi0A59!! 1!RZZ- @"3BJJM"BA 			!Q)*		!Q+,		!Q+,	3	5 >]]:W5 		 >]]:W5 	! 	! 	!7!.	 		! 	!s   EE+E(	+E5	zn_samples,n_featuresrK   c                    t         j                  j                  d      }t        dd      }t        dd      }|j	                  | |      }|j	                  |       }|j	                  |       dz  dz   } ||      }	|j                  |	||       |j                  |||       t        |j                  |j                  d	       y )
Nr   r   Fr   rK   rW   r   r  r  )rA   rc   rd   r   r   r   r-   r   )
rS   rT   r   rp   sparse_ridgedense_ridgerq   rz   sample_weightsr  s
             rG   &test_sparse_design_with_sample_weightsr3  ^  s     ))


#Cs%8Lc7K		)Z(A		)AYYy)Q.2N"HXq?OOAqO7l00+2C2CQOrI   c                      t        j                  ddgddgddgddgddgg      } g d}t        d      }|j                  | |       y )	Nr  r   r  r   r   r  )rW   r[   r  r=  )rA   r   r   r   )rq   rz   r   s      rG   test_ridgecv_int_alphasr5  t  sM    
4,q	D$<#sc3ZPQAA <(E	IIaOrI   zparams, err_type, err_msgr>  )rW   rX   iz alphas\[1\] == -1, must be > 0.0)gr  g      $z"alphas\[0\] == -0.1, must be > 0.0)rW   r   1z1alphas\[2\] must be an instance of float, not strc                     d\  }}t         j                  ||      }t         j                  dd|      }t        j                  ||      5   | di |j                  ||       ddd       y# 1 sw Y   yxY w)z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.r  r   rK   r   Nr   )rp   r   r  r   r   r   )r  rO   err_typer   rS   rT   rq   rz   s           rG   test_ridgecv_alphas_validationr9  }  sk    ( !Iz		)Z(AAq)$A	xw	/ &F1%& & &s   
A,,A5c                     d\  }}t         j                  ||      }| t        u rt         j                  |      }nt         j                  dd|      } | d      j	                  ||       y)zCheck the case when `alphas` is a scalar.
    This case was supported in the past when `alphas` where converted
    into array in `__init__`.
    We add this test to ensure backward compatibility.
    r  r   rK   rW   r=  N)rp   r   r   r  r   )r  rS   rT   rq   rz   s        rG   test_ridgecv_alphas_scalarr;    s[     !Iz		)Z(AGIIi KK1i(QAq!rI   c                      t        dd      } | j                  t        t               | j                  j
                  d   t        j
                  d   k(  sJ y )Nr9   rW   )r   r   r   )r   r   r   r   r   r   )r  s    rG   test_sparse_cg_max_iterr=    sB    
{Q
/CGGJ
#99??1!1!1!!4444rI   z-ignore::sklearn.exceptions.ConvergenceWarningc            	         d} t         t        }}t        j                  || df      j                  }t        dd      D ]S  }dD ]L  }t        ||d      }|j                  ||       t        |j                  t        j                  ||              N U dD ]0  }t        |dd      }|j                  ||       |j                  0J  y )	NrK   rW   rR   )r<   r=   r;   r   )r   r   r   )r9   r8   r:   r7  )
r   r   rA   tilerh   ranger   r   r.   n_iter_)r   rq   rz   y_nr   r   r  s          rG   test_n_iterrC    s     IzqA
''!i^
$
&
&C!QK J- 	JFveDCGGAsOs{{BGGHi,HI	JJ 3 #6A483{{"""#rI   )r;   r9   r  rv  with_sample_weightc                    | dk(  }t        d||      \  }}d}|rAt        j                  j                  |      }d|j	                  |j
                  d         z   }| dk(  rd	n| }	t        |	d
|      }
t        | d
|      }|
j                  |||       |j                   ||      ||       t        |
j                  |j                         t        |
j                  |j                  d       y)a  Check that ridge finds the same coefs and intercept on dense and sparse input
    in the presence of sample weights.

    For now only sparse_cg and lbfgs can correctly fit an intercept
    with sparse X with default tol and max_iter.
    'sag' is tested separately in test_ridge_fit_intercept_sparse_sag because it
    requires more iterations and should raise a warning if default max_iter is used.
    Other solvers raise an exception, as checked in
    test_ridge_fit_intercept_sparse_error
    r  r   )rT   rV   r-  Nr   r   r`   rv  r9   r   )r   r   r-  r   gƠ>rW  )r1  rA   rc   rd   rf   r   r   r   r+   r   r   )r   rD  rm   r   r-  rq   rz   r   rp   dense_solverr1  r0  s               rG   test_ridge_fit_intercept_sparserG    s       H)$6DAq Mii##$67ckkqwwqzk:: #)F"2;L|JKEHELOOAqO6]1%qFK**L,C,CDK%%|'9'9ErI   )r=   r8   r:   c                     t        dd      \  }} ||      }t        |       }dj                  |       }t        j                  t
        |      5  |j                  ||       d d d        y # 1 sw Y   y xY w)Nr   r   )rT   rV   r  zsolver='{}' does not supportr   )r1  r   formatr   r   r   r   )r   r   rq   rz   X_csrr0  r   s          rG   %test_ridge_fit_intercept_sparse_errorrK    sk     *RaHDAq!E'L,33F;G	z	1 #"# # #s   A--A6c                    t        dd|d      \  }}| rBt        j                  j                  |      }d|j	                  |j
                  d         z   }nd } ||      }t        ddd	d
d      }t        di |}	t        di |}
|	j                  |||       t        j                         5  t        j                  dt               |
j                  |||       d d d        t        |	j                  |
j                  d       t        |	j                  |
j                  d       t!        j"                  t        d      5  t        dd	dd       j                  ||       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   g      @)rT   rS   rV   r,  r   r   r`   r<   Tr   r   )r{   r   r   r   r   r   r  -C6?rW  z"sag" solver requires.*r   rY   )r   r   r   r   r   )r1  rA   rc   rd   rf   r   r   r   r   r  r  simplefilterr  r+   r   r   r   r   )rD  rm   r   rq   rz   rp   r   rJ  rO   r1  r0  s              rG   #test_ridge_fit_intercept_sparse_sagrO    sg   
 *1CcDAq ii##$67ckkqwwqzk::!E%tF /&/K?6?LOOAqO6		 	 	" @g{3?@ K**L,C,C$OK%%|'9'9E	k)B	C WU$D4HLLUTUVW W@ @
W Ws   //E. E:.E7:Freturn_interceptr   r  	container)rv  r9   r:   r;   r<   r=   r  c                    t        d      }|j                  dd      }g d}t        j                  ||      }d}| rd}||z  } ||      }	d\  }
}t        rdnd	}|d
k(  }|dvr:| r8t        j                  t        d      5  t        |	||
||| ||       ddd       yt        |	||
|||| |      }| r$|\  }}t        ||d|       t        ||d|       yt        ||d|       y# 1 sw Y   yxY w)z=check if all combinations of arguments give valid estimationsr   r  r   )rW   rK   r7  r   g     @)rY   ư>rY   rM  r  )r<   rv  zIn Ridge, only 'sag' solverr   )r{   r   r   rP  r-  r   N)r{   r   r   r-  rP  r   r   r@  r   )
r#   r  rA   r   r2   r   r   r   r   r+   )rP  r   rQ  r   rp   rq   
true_coefsrz   true_intercept	X_testingr{   r   r   r-  outr   r   s                    rG   .test_ridge_regression_check_arguments_validityrY    s    R
 CqAJ
q*AN A!IJE34$D H_$)9]]:-JK 
	+!1!	
	 	
	#)	C ijqt<	>EZad;;
	 	s    C&&C/)r8   r9   r:   r;   r<   r=   r  c                    t         j                  j                  d      }d}| dk(  }d\  }}|j                  ||      }|j                  |      }|j	                  t         j
                        }|j	                  t         j
                        }	dt        j                  t         j
                        j                  z  }
t        || d|
|      }|j                  ||	       |j                  }t        || d|
|      }|j                  ||       |j                  }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |      j                  |j                  k(  sJ |j                  |      j                  |j                  k(  sJ t        |j                  |j                  dd	
       y )Nr   r   r  r  rK     )r{   r   r   r   r-  rM  gMb@?rT  )rA   rc   rd   r   rA  r6  finfo
resolutionr   r   r   rC  r   r+   )r   rp   r{   r-  rS   rT   X_64y_64X_32y_32r   ridge_32coef_32ridge_64coef_64s                  rG   test_dtype_matchrf  S  sx    ))


"CE H Iz99Y
+D99YD;;rzz"D;;rzz"D
bhhrzz"--
-CFScHH LLtnnG FScHH LLtnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555HNNHNNDIrI   c                  D   t         j                  j                  d      } t        j                  ddg      }d\  }}}| j	                  ||      }| j	                  ||      }|j                  t         j                        }|j                  t         j                        }t        |d      }	|	j                  ||       |	j                  }
t        |d      }|j                  ||       |j                  }|
j                  |j                  k(  sJ |j                  |j                  k(  sJ |	j                  |      j                  |j                  k(  sJ |j                  |      j                  |j                  k(  sJ t        |	j                  |j                  d       y )	Nr   r   r   )r  r  rK   r:   r   r   r  )rA   rc   rd   r   r   rA  r6  r   r   r   rC  r   r,   )rp   r{   rS   rT   n_targetr^  r_  r`  ra  rb  rc  rd  re  s                rG   test_dtype_match_choleskyri  x  sL    ))


"CHHc3Z E&-#Iz899Y
+D99Y)D;;rzz"D;;rzz"D 54HLLtnnG 54HLLtnnG ==DJJ&&&==DJJ&&&D!''4::555D!''4::555BrI   )r8   r:   r;   r9   r<   r=   r  seedc                    t         j                  j                  |      }d\  }}|j                  ||      }|j                  |      }t        j                  ||      d|j                  |      z  z   }d}| dk(  }	t               }
| dk(  rdnd}t         j                  t         j                  fD ]9  }t        |j                  |      |j                  |      || |d |	dd	d
d
      |
|<   ; |
t         j                     j                  t         j                  k(  sJ |
t         j                     j                  t         j                  k(  sJ t        |
t         j                     |
t         j                     |       y )Nr  r   r   r  r9   rY   r  r[  r   F)	r{   r   rV   r   r-  r   r   return_n_iterrP  r   )rA   rc   rd   r   r   r   r6  r9  r   rA  rC  r+   )r   rj  rV   rS   rT   rq   r   rz   r{   r-  resultsr   current_dtypes                rG   %test_ridge_regression_dtype_stabilityro    sN   
 99((.L Iz9j1Aj)D
q$$!3!3I!>>>AE HfG [(4dD**bjj1 
!1HH]#HH]#%""

 2::$$

2222::$$

222GBJJ')<4HrI   c                      t        d      \  } }t        j                  |       } | d d dd d f   } |d d d   }t        d      j	                  | |       y )Nr   rV   rK   r<   r  )r   rA   asfortranarrayr   r   )rq   rz   s     rG   test_ridge_sag_with_X_fortranrs    sS    +DAq
!A	#A#q&	A	#A#A	Aq!rI   zClassifier, paramsc                 n   t        dd      \  }}|j                  dd      }t        j                  ||gd      } | d	i |j	                  ||      }|j                  |      }|j                  |j                  k(  sJ t        |dddf   |dddf          t        d      j	                  ||       y)
zRCheck that multilabel classification is supported and give meaningful
    results.rW   r   )r  rV   rX   r   Nr<   r  r   )	r
   r   rA   r   r   r   r   r.   r   )
ClassifierrO   rq   rz   r   r  r  s          rG   test_ridgeclassifier_multilabelrv    s     *AAFDAq			"aA
1vA&A

v

"
"1a
(C[[^F<<177"""vad|VAqD\2	Aq!rI   rv  r  )rY   r   r7  r   c                 R   t        j                  ddgddgddgddgg      }t        j                  dd	g      }|rd
}|j                  |      |z   }n|j                  |      }t        |d| |      }|j	                  ||       t        j
                  |j                  dk\        sJ y)z:Test that positive Ridge finds true positive coefficients.rW   rK   r   rR   r   r  r  r  rZ   r   Tr{   r-  r   r   r   N)rA   r   r   r   r   re   r   )r   r   r{   rq   r   r   rz   r   s           rG   #test_ridge_positive_regression_testry    s    
 	1a&1a&1a&1a&12A88QHD	EE$K)#EE$Kd6E 
IIaO66%++"###rI   c                    t         j                  j                  d      }|j                  dd      }|j	                  dd|j
                  d         }| rd}||z  |z   }n||z  }||j                  |j
                  d         d	z  z  }g }d
D ]<  }t        ||| d      }	|j                  |	j                  ||      j                         > t        |ddd y)zTest that Ridge w/wo positive converges to the same solution.

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

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

+9 rI   r   c                 b   t        dd|d      \  }}t        j                  |j                  d   f      }| rd|ddd<   d	}t	        |d
|d      }|j                  |||       t        j                  g |j                  t        |            }t               }	t        |      D ]n  \  }
}t        |	j                  ||            D ]K  \  }\  }}t        ||      }|j                  ||   ||   ||          |j                  ||         ||d|
f<   M p t        |j                  |       y)ar  Check that the predictions stored in `cv_results_` are on the original scale.

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

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

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/13998
    r  r[   r   )rS   rT   r   rV   r   r   NrK   r	  rS  T)r>  rV  r   re  r   r   .)r   rA   r   r   r   r   emptyr  r    	enumeraterh  r   r   r+   ri  )rD  r   r   rq   rz   r   r>  r  rq  rU  	alpha_idxr{   idx	train_idxtest_idxr   s                   rG   !test_ridge_cv_results_predictionsr    s?   " "	DAq GG1771:-0M ccF (#	H LLA]L3 ((!8177!8CK!89K	B%f- J	5*3BHHQN*C 	J&C&)X]CEIIa	lAiL-	2JK/4}}Qx[/IKS)+,	JJ
 H((+6rI   c                    t        d|       \  }}t        j                  |j                  d   f      }t	        dd      }|j                  |||       t               }t        |j                  	      }t        j                  |j                  |      D cg c]4  \  }}|j                  ||   ||   ||         j                  ||         6 c}}      }	t        |j                  t        ||	              y
c c}}w )zCheck that `RidgeCV` works properly with multioutput and sample_weight
    when `scoring != None`.

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