
    ri F             
       B    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l1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZBmCZC d dlDmEZEmFZFmGZGmHZHmIZImJZJ g dZKdZLdZM e
j                         ZOeOj                  eOj                  cZRZS ej                  eRj                  d          ZVej                  j                  d       ZYeYj                  eV       eVdd ZVeReV   eSeV   cZRZS e
j                         Z\e\j                  e\j                  cZ]Z^d Z_d Z` ej                  ddg      d        Zbej                  j                  deK      ej                  j                  ddd g      d!               Zeej                  j                  deK      ej                  j                  ddd g      d"               Zfej                  j                  deK      ej                  j                  ddd g      d#               Zgej                  j                  deK      ej                  j                  ddd g      d$               Zhej                  j                  deK      ej                  j                  ddd g      d%               Ziej                  j                  deK      ej                  j                  ddd g      d&               Zjej                  j                  deK      ej                  j                  ddd g      ej                  j                  d'dgeHz         ej                  j                  d(d)d*g      d+                             Zkd, Zld- Zmd. Znd/ Zod0 Zpd1 Zqej                  j                  d2g d3      ej                  j                  d4eH      d5               Zrej                  j                  d6g d7      ej                  j                  d8dd g      ej                  j                  d4eH      d9                      Zsej                  j                  d6g d7      ej                  j                  d8dd g      ej                  j                  d4eH      d:                      Zt	 	 	 	 	 	 	 	 	 	 	 	 dd<Zuej                  j                  d=d>  eg d?dgeHz         D              ej                  j                  d@g dA      dB               Zvej                  j                  dCdDdEg      ej                  j                  dFej                  geHz         ej                  j                  dGdHdIg      ej                  j                  ddd g      ej                  j                  dJg dK      dL                                    ZxdM Zyej                  j                  dCdDdEg      ej                  j                  dFej                  geHz         ej                  j                  dNdOdPg      ej                  j                  dQg dR      dS                             Zzej                  j                  d'dgeHz         ej                  j                  dTg dU      dV               Z{dW 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_ Zd` Zda Zdb Zej                  j                  dcddde_g      ej                  j                  d\d e*de      g      ej                  j                  d'dgeHz         df                      Zej                  j                  d\d e*de      g      ej                  j                  d'dgeHz         dg               Zdh Z	 ddiZej                  j                  dj e7       e5k      ej                  j                  dleCege:k      ej                  j                  dm edDn       edDn       e        e       ge:k      do                      Zej                  j                  dm edDn       e       g      ej                  j                  dp e7       e5k      dq               Zej                  j                  dr e8d s            dt        Zej                  j                  dr ee2            du        Zej                  j                  dve|e}eeeef      ej                  j                  d4eH      dw               Zdx Zej                  j                  dyeef      dz        Zd{ Zej                  j                  dcdd|e`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'eFeGz   eHz   eIz   eJz         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                  j=                  d      d        Zej                  j                  dg d      ej                  j                  ddd g      ej                  j                  d4eH      d                      Zej                  j                  dg d      ej                  j                  d4eH      d               Zej                  j                  ddd g      ej                  j                  d4eH      d               Zej                  j                  dd dg      ej                  j                  dd ejF                  d      g      ej                  j                  dejH                  geHz         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eHz         ej                  j                  dddg      ej                  j                  deKdg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_max_precision_float_dtype)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)r:   r=   )r:   r;   r<   r=   r>      c                 2    t        j                  | |k(        S N)npmeany_testy_predkwargss      c/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callablerI   Z   s    776V#$$    c                 .    | |z
  dz  j                         S )N   )rC   )rE   rF   s     rH   _mean_squared_error_callablerM   ^   s    f_"((**rJ   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.
    rN   )      )rS   rR   )	n_samples
n_featureseffective_rankrandom_state   NMbP?
   lowhighsizer`   rL   r   )rY   rY   )paramminrB   randomRandomStater	   r   r9   alluniformnormalTdiagidentitysolvenorm)global_random_seedrequestrT   rU   krngXUsVtU1U2Vt1_coef_olsyalphad
coef_ridgeR_OLSR_Ridges                        rH   ols_ridge_datasetr   b   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:%%rJ   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   tolrW   rX   rL   NrY   r   axissample_weight )dictrB   rC   sumr   fit
intercept_pytestapproxr,   coef_scoreonesshapesolver_)r   r   r   rn   rr   r{   ry   coefr|   rP   res_null	res_RidgeR2_Ridgemodel	intercepts                  rH   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"""rJ   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   rL   r   r   r   r   NrY         ?rX   r   r   :0yE>atol)r   r   rB   concatenater   matrix_rankrc   rC   r   r   r   r   r,   r   r_r   r   r   rn   rr   r{   ry   r   rT   rU   r|   r   r   s                rH    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>rJ   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   rL   r   r   r   r   NrY   r   r   r   r   )r   r   rB   r   r   r   rc   r   rC   r   r   r   r   r,   r   r   s                rH    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1rJ   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   NrY   1Ridge does not provide the minimum norm solution.reasonr   )r   r   r   r   r   r   r   r,   r   predictrB   r   rm   r   xfail)r   r   r   rn   rr   r{   r   ry   rT   rU   r|   rP   r   r   s                 rH   !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*rJ   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   NrY   r   rX   r   r;   r   r   )r   r   rB   r   r   r   rc   r   r   r   r   skipr,   r   r   r   rm   r   r   r   r   rn   rr   r{   r   ry   rT   rU   r|   r   r   s                rH   ,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7rJ   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   NrY   r   r   r   )r   r   rB   r   r   r   rc   r   r   r   r   r   r,   r   r   rm   r   r   s                rH   ,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*rJ   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   rX   r]   r   r   r   順 )r|   r   r   r   max_iterrW   rY   r   r   )SPARSE_SOLVERS_WITH_INTERCEPTr   r    SPARSE_SOLVERS_WITHOUT_INTERCEPTr   rq   rg   r   rB   r   r   rC   r   r   r   r,   r   )r   r   r   r|   r   rn   rr   r{   ry   r   rT   rU   swr   r   s                  rH   $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&rJ   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 )NrY   rX   r   r|   )	
y_diabetesreshaper   
X_diabetesrB   dotri   r   r.   )r{   r   K	dual_coefcoef2s        rH   test_primal_dual_relationshipr     sl    2q!A:q7D
z:<<(A&q!D6:IFF:<<+--EdE*rJ   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   r:           rX   )r|   r   r   r   verbose)rB   rd   re   randnr   warnsr   r   )rq   r{   rr   warning_messages       rH   &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\   rX   r   rX   rL   )rL   )rB   rd   re   r   newaxisc_r   r   r   r   r   
isinstancendarrayfloat)rq   rT   rU   rr   r{   Y1Yridges           rH   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3rJ   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   rX   )	rB   rd   re   r   r   r   r   r   r-   )rq   rT   rU   rr   r{   r   r   r   s           rH   test_ridge_interceptr   6  s    
))


"C!Iz		)Z(A		)A
aqjAGE	IIaO  I	IIaO((+Y7((+Y_=rJ   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   rS   r   Fr|   r   r   )	rB   rd   re   r   r   r   r   r-   r   )rq   rT   rU   r{   rr   r   olss          rH   test_ridge_vs_lstsqr   H  s     ))


"C Iz		)A		)Z(A51E

/C	IIaOGGAqMSYY/	IIaOGGAqMSYY/rJ   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   )r9   r:   r<   r;   r=   r>   -q=)r|   r   r   rY   r   zCNumber of targets and number of penalties do not correspond: 4 != 5r   )rB   rd   re   r   arangearrayzipri   r   r   r   r.   r   raises
ValueError)rq   rT   rU   	n_targetsrr   r{   	penaltiesr|   targetcoef_choleskyr   coefs_indiv_pencoef_indiv_penr   err_msgs                  rH   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         	   )
rB   rd   re   r   lenr   hstackr,   r   ri   )
r   r   rq   rr   X_msqrt_swr   Aoperatorreference_operators
             rH   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CrJ   r   ))r\   rX   )   r  )r      )rL   rL   )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   rX   )r   weightsTr   )rB   rd   re   r   r   r   	chisquaresqrtaverager   ri   r   _compute_gramr,   )r   r  r   rq   rr   r   r  X_mean
X_centered	true_gramX_sparsegcvcomputed_gramcomputed_means                 rH   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}-rJ   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  )rB   rd   re   r   r   r   r  r  r  ri   r   r   _compute_covariancer,   )r   r  r   rq   rr   r   r  r  r  true_covariancer  r  computed_covr  s                 rH   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\2rJ   rX   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)	rT   rU   n_informativer   biasnoiseshuffler   rW   rX   r   r   )
r   rB   asarrayrd   re   binomialr   copyr   abs)rT   rU   proportion_nonzeror$  r   r%  X_offsetr&  r'  r   positiverW   rr   r{   cmask	removed_Xs                    rH   _make_sparse_offset_regressionr2    s    #!
GAq! QJJsOMA
		l+44Q8JAGGTWXX 	 IAteHIdOq	A	QUU266!9q=1$%%FF1IMQaD!Qwa4KrJ   zsolver, sparse_containerc              #   6   K   | ]  \  }}||dv r||f  y w)N)r:   ridgecvr   ).0r   r   s      rH   	<genexpr>r6    s3      &V% #v1I'I 
!"s   )r;   r=   r:   r<   r>   r4  z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r7  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%  rU   r,  r&  rW   rT   r9   )r   r|   F)r*  r4  alphasr=   gHz>r   r   )r|   r   r   r   rW   rZ   r   rtol)
r2  r"   r   r   astyper   
startswithr,   r   r   )r   r,  rT   dtyper   rn   r|   r&  rr   r{   	svd_ridger   r   r   s                 rH   test_solver_consistencyrF    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QrJ   gcv_moder9   eigenX_containerX_shape)r  r  )r  r   zy_shape, noise))r  r   )r  rX         >@)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 )NrL   rY   rX   r   Fr   rT   rU   r   rW   r'  r&  r$  rZ   r8  r         $@g     @@neg_mean_squared_errorcvr   r?  scoring)rG  r   r?  rZ   rA  )r  r2  r   r   r   alpha_r   r   r,   r   r   )rG  rI  rJ  y_shaper   r&  rT   rU   r   rr   r{   r?  	loo_ridge	gcv_ridgeX_gcvs                  rH   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JrJ   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   rX   r   Fr   rQ  rR  TrU  )r   r?  rW  zgcv_ridge.alpha_=z, loo_ridge.alpha_=rZ   rX  )	r2  r   r   rY  r   r   r,   r   r   )	rW  rT   rU   r   rr   r{   r?  r[  r\  s	            rH   test_ridge_loo_cv_asym_scoringra  S  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JrJ   rU   r  r   zy_shape, fit_intercept, noise))rK  Tr   )rL  Tg      4@)rN  TrO  )rN  FrM  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 )NrR  r   rL   rY   rX   r  F)rT   rU   r   rW   r'  r&  r   )n_splits)groupsrT  )r?  rV  rW  r   r   rV  r   T)r?  store_cv_resultsrG  r   r   rZ   rX  )rB   rd   re   r  r2  r   r   rc   rB  intrepeatr   r   r   r   splitr   r   r   rY  r!   r   r(  cv_results_indexr   r   r,   r   r   )rG  rI  r   rU   rZ  r&  r?  rq   r   rr   r{   r   indicesX_tiledy_tiledrV  splitskfold	ridge_regpredictionskfold_errorsir]  r\  
gcv_errorss                            rH   test_ridge_gcv_sample_weightsrv  s  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))Nr9   rH  )autor9   rH  )rH  rH  rH  )r9   r9   r9   c                     t        dd      \  }}|  | |      }t        ||      |k(  sJ t        |j                  |      |k(  sJ y )Nr   rL   )rT   rU   )r   r   ri   )r   modemode_n_greater_than_pmode_p_greater_than_nrr   ry   s         rH   test_check_gcv_mode_choicer|    sT     Q15DAq#Q1d#'<<<<133%)>>>>rJ   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   rW  c                     t        | |       S rA   )r   )xr{   s     rH   funcz_test_ridge_loo.<locals>.func  s    "1a(((rJ   rT  r   h㈵>rX  )r   r   r   r   r   rY  appendr0   r   r   r   r   r   r   rB   r   vstackri   r   r,   )r   rT   retrr   r   	ridge_gcvrY  frW  
ridge_gcv2r  
ridge_gcv3scorer
ridge_gcv4r   Y_predrF   s                    rH   _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JrJ   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 )NrX   r   re  )r   r   r   r   r   r  r   r   typer   rB   r:  r   
set_params)r   rr   ridge_cvrV  s       rH   _test_ridge_cvr  
  s    &.
4DZ4PAyHLLJQx~~##$)))##$

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

222rJ   zridge, make_dataset)rf  c                 t     |dd      \  }}t        |       } | j                  ||       t        | d      rJ y )N   r   rT   rW   rj  )r   r   hasattr)r   make_datasetrr   r{   s       rH   $test_ridge_gcv_cv_results_not_storedr    s=     !"5DAq%LE	IIaOum,,,,rJ   rV  r   c                      |dd      \  }}t        |       } | j                  d|       | j                  ||       t        | d      sJ t	        | j
                  t              sJ y )Nr  r   r  F)rf  rV  best_score_)r   r  r   r  r   r  r   )r   r  rV  rr   r{   s        rH   test_ridge_best_scorer  +  sc     !"5DAq%LE	e3	IIaO5-(((e''///rJ   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   rX   g?rL   rZ   )rX   d     r>  T)r?  alpha_per_targetr   )r?  r  rf  r2)r?  r  rW  )r?  rV  r  z3cv!=None and alpha_per_target=True are incompatibler   r  )rB   rd   re   r   r   r   ri   r   r   rY  r/   r.   r   r   r   r  rj  r  isscalarr    r   r   r   )rq   rT   rU   r   r{   rr   r?  r   optimal_alphasr  msgs              rH   "test_ridge_cv_individual_penaltiesr  :  s    ))


#C (0$Iz9		)Y'A
qQCy"''1j/23
&&1qc6D277Az?#;;
<	=
&&1qc6EBGGQ
O$<<
=	> ))Iz
*	+  F RSQTQT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   rB   roundr   )r   rr   r   s      rH   _test_ridge_diabetesr    sH    &.
4DZ4PA&E	IIa88EKK:.22rJ   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 )NrX   Fr   rL   r   decimal)r   rB   r  r   ri   r   r   r   r   r   r.   )r   rr   r   rU   r   r  rF   s          rH   _test_multi_ridge_diabetesr    s    &.
4DZ4PA
		:z*+--A!!!$J&E	IIaO;;J///]]1F	IIa]]1Fbii(89;;VQOrJ   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   rX   gHzG?r   re  g?)rB   uniquey_irisr   X_irisr   r   r   r   r   rC   r   )r   	n_classesrU   rr   regrF   rV  s          rH   _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#$+++rJ   rW  accuracyr   c                     | t         n | t               }t        |      rt        |      n|}t        ||      }|j	                  |t
              j                  |       y )N)rW  rV  )r  callabler   r   r   r  r   )r   rW  rV  rr   scoring_clfs         rH   "test_ridge_classifier_with_scoringr    sN     #*0@0HA'/'8{7#gH
H
4CGGAvq!rJ   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   rD   s      rH   _dummy_scorez:test_ridge_regression_custom_scoring.<locals>._dummy_score  s    rJ   rL   r   )num)r?  rW  rV  r  r   )r  rB   logspacer   r   r   r  r  r   r   rY  )r   rV  r  rr   r?  r  s         rH   $test_ridge_regression_custom_scoringr    s     #*0@0HA[[QA&F
6;|3LQS
TCGGAv??fmmD1111::vay1111rJ   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   rZ   )r   r   r   r   r   )r   rr   r   r   ridge2score2s         rH   _test_tolerancer    st    &.
4DZ4PAd%0E	IIaKK:&Et51F
JJq*\\!Z(FF??rJ   c           	         t        ||      }t        j                  |      }t        j                  |      }|j	                  ||      }	|j	                  ||      }
|j                  ||       |j                  }|j                  }t        d      5  t        |      j                  |	|
      }|j                  }|j                  |j                  k(  sJ |j                  |	j                  k(  sJ t        t        ||      ||t        |             |j                  }|j                  |j                  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xprA  r   )r1   r  rB  r  r(  r   r   r   r   r   r   rD  r,   r&   r%   )name	estimatorarray_namespacer  
dtype_namerA  r  	X_iris_np	y_iris_np	X_iris_xp	y_iris_xpcoef_npintercept_npestimator_xpcoef_xpintercept_xps                   rH   check_array_api_attributesr    s\    
ov	6Bj)Ij)I

9V
4I

9V
4IMM)Y'ooG''L	4	0 
Y'++IyA$$}}---}}	///g"-
+		
 $..!!\%7%7777!!Y__444lr2
+		
!
 
 
s   C&FFz#array_namespace, device, dtype_name)idscheckr  r   c                     | j                   j                  }i }t        ||      }d|v r&|t        u rt	        ||      |j
                  k(  rd|d<    ||| |f||d| y )NCVrZ   rA  )r  r  )	__class____name__r1   r  r(   r7  )r  r  r  r  r  r  tolsr  s           rH   test_ridge_array_api_compliancer    su    . ''DD	ov	6B//&r62bjj@
 V	i17JRVrJ   z$array_namespace, device_, dtype_namec                 "   t        ||      }t        d      \  }}|j                  |      }|j                  |      }| j                  ||      }	|	j	                  |      }
t        d      5  |j                  ||      |j                  ||      }}| j                  ||      }|j	                  |      }|j                  |
j                  cxk(  r|j                  k(  sJ  J t        t        ||      |
       d d d        y # 1 sw Y   y xY w)Nr   rW   Tr  r  r  )
r1   r
   rB  r   r   r   r(  r   r,   r&   )r  r  device_r  r  rr   r{   X_npy_npridge_nppred_npX_xpy_xpridge_xppred_xps                  rH   *test_ridge_classifier_multilabel_array_apir  &  s     
ow	7B)q9DAq88JD88JD}}T4(Ht$G	4	0 DZZWZ5rzz$wz7Wd==t,""4(}}888888)'b97CD D Ds   -BDD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   rw  r9   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.)r1   r(  r  r  r   _parameter_constraintsoptionsr  r   r   r   r   r   r   UserWarning)r  r  r  r  available_solversr   r   expected_msgs           rH   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  rw  r  )r1   r(  r  r  r   warningscatch_warningsfilterwarningsr  r   r   )r  r  r  r  r   r  s         rH   )test_array_api_numpy_namespace_no_warningr  l  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       rH   test_dense_sparser    s6     $I=)J!7!)ZC "8rJ   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   rX   rX   rX   rY   rY   class_weightr;  rX   rZ   rY   balanced)rX   rX   rY   rY   rL   )rB   r   r   r   r/   r   r  classes_r.   r   r   )rr   r{   r  regas       rH   test_class_weightsr    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>rJ   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  rX   r  r   g      Y@)r   rX   rL   rL   N)	r   irisdatar   r-   r   rB   r   r   )r  reg1reg2r   r  s        rH   "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/rJ   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   r8  rX   )r  r?  rX   rZ   )r   r8  rX   r\   gɿrL   rY   )rB   r   r   r   r/   r   )rr   r{   r  s      rH   test_class_weights_cvr    s    
4,q	D$<#sc3ZPQAA
n
ECGGAqM !U<N
OCGGAqMs{{T1I;/2$@rJ   rT  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   r8  r   rS  Tr?  rV  rf  rW  r   )rV  rf  rW  zcv!=None and store_cv_resultsr   )rB   rd   re   r   r  r  r   r   r   rj  r   r   r   r   )rW  rq   rT   rU   r  r?  n_alphasr  rr{   r   s              rH   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  rX   )rX   rY   rX   rY   rX   )rY   rY   rX   rY   rY   )
rB   r   r   r  r  r   r   r   rj  	transpose)	rW  r  r{   rT   r?  r  r  r  r   s	            rH   )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BrJ   	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   rL   r>  z`alphas` was mutated in `z
.__init__`)rB   rd   re   r   r   randintr?  r  r   r/   r(  )r"  rq   r?  rT   rU   r{   rr   	ridge_ests           rH   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);<rJ   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   rS  r$  rL   r?  rV  Nz"alphas\[0\] == 0.0, must be > 0.0.r   )
rB   rd   re   r   r   r%  r   r   r   r   )	rV  r"  rq   r?  rT   rU   r{   rr   r&  s	            rH   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|   re  )rB   rd   re   r   randr   r   r   r   r   rY  best_estimator_r|   r.   r   )rq   r?  rT   rU   r{   rr   r   rV  r4  
parametersgss              rH   test_ridgecv_sample_weightr1  Q  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rJ   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)NrL   r   r   rX   r   g       @r   c                  ,    j                          y rA   r   )rr   r   sample_weights_not_OKr{   s   rH   fit_ridge_not_okzStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok  s    IIa12rJ   c                  ,    j                          y rA   r4  )rr   r   sample_weights_not_OK_2r{   s   rH   fit_ridge_not_ok_2zUtest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2  s    IIa34rJ   z)Sample weights must be 1D array or scalarr   )rB   rd   re   r   r   r   r   r   r   r   r   )
n_samplessn_featuressrq   rT   rU   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r6  r9  r   rr   r   r5  r8  r{   s              @@@@@rH   9test_raises_value_error_if_sample_weights_greater_than_1dr?  i  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_featuresrL   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   rL   rX   r   r  r  )rB   rd   re   r   r   r   r.   r   )
rT   rU   r   rq   sparse_ridgedense_ridgerr   r{   sample_weightsr  s
             rH   &test_sparse_design_with_sample_weightsrD    s     ))


#Cs%8Lc7K		)Z(A		)AYYy)Q.2N"HXq?OOAqO7l00+2C2CQOrJ   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
  )rX   r\   r  r>  )rB   r   r   r   )rr   r{   r   s      rH   test_ridgecv_int_alphasrF    sM    
4,q	D$<#sc3ZPQAA <(E	IIaOrJ   zparams, err_type, err_msgr?  )rX   rY   iz alphas\[1\] == -1, must be > 0.0)gr  g      $z"alphas\[0\] == -0.1, must be > 0.0)rX   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   rL   r   Nr   )rq   r   r%  r   r   r   )r"  rP   err_typer   rT   rU   rr   r{   s           rH   test_ridgecv_alphas_validationrJ    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   rL   rX   r>  N)rq   r   r   r%  r   )r"  rT   rU   rr   r{   s        rH   test_ridgecv_alphas_scalarrL    s[     !Iz		)Z(AGIIi KK1i(QAq!rJ   c                      t        dd      } | j                  t        t               | j                  j
                  d   t        j
                  d   k(  sJ y )Nr:   rX   )r   r   r   )r   r   r   r   r   r   )r  s    rH   test_sparse_cg_max_iterrN    sB    
{Q
/CGGJ
#99??1!1!1!!4444rJ   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 )	NrL   rX   rS   )r=   r>   r<   r   )r   r   r   )r:   r9   r;   r8  )
r   r   rB   tileri   ranger   r   r/   n_iter_)r   rr   r{   y_nr   r   r  s          rH   test_n_iterrT    s     IzqA
''!i^
$
&
&C!QK J- 	JFveDCGGAsOs{{BGGHi,HI	JJ 3 #6A483{{"""#rJ   )r<   r:   r  rw  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   )rU   rW   r.  Nr   r   ra   rw  r:   r   )r   r   r.  r   gƠ>rX  )r2  rB   rd   re   rg   r   r   r   r,   r   r   )r   rU  rn   r   r.  rr   r{   r   rq   dense_solverrB  rA  s               rH   test_ridge_fit_intercept_sparserX    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ErJ   )r>   r9   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   )rU   rW   r  zsolver='{}' does not supportr   )r2  r   formatr   r   r   r   )r   r   rr   r{   X_csrrA  r   s          rH   %test_ridge_fit_intercept_sparse_errorr\    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      @)rU   rT   rW   r-  r   r   ra   r=   Tr   r   )r|   r   r   r   r   r   r  -C6?rX  z"sag" solver requires.*r   rZ   )r   r   r   r   r   )r2  rB   rd   re   rg   r   r   r   r   r  r  simplefilterr  r,   r   r   r   r   )rU  rn   r   rr   r{   rq   r   r[  rP   rB  rA  s              rH   #test_ridge_fit_intercept_sparse_sagr`  *  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)rw  r:   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   )rX   rL   r8  r   g     @)rZ   ư>rZ   r^  r  )r=   rw  zIn Ridge, only 'sag' solverr   )r|   r   r   ra  r.  r   N)r|   r   r   r.  ra  r   r   r  )
r#   r-  rB   r   r3   r   r   r   r   r,   )ra  r   rb  r   rq   rr   
true_coefsr{   true_intercept	X_testingr|   r   r   r.  outr   r   s                    rH   .test_ridge_regression_check_arguments_validityri  H  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/)r9   r:   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,  rL     )r|   r   r   r   r.  r^  gMb@?r  )rB   rd   re   r   rB  r7  finfo
resolutionr   r   r   rD  r   r,   )r   rq   r|   r.  rT   rU   X_64y_64X_32y_32r   ridge_32coef_32ridge_64coef_64s                  rH   test_dtype_matchrv    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IrJ   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  rL   r;   r   r   r  )rB   rd   re   r   r   rB  r7  r   r   r   rD  r   r-   )rq   r|   rT   rU   n_targetrn  ro  rp  rq  rr  rs  rt  ru  s                rH   test_dtype_match_choleskyry    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BrJ   )r9   r;   r<   r:   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  r:   rZ   r  rk  r   F)	r|   r   rW   r   r.  r   r   return_n_iterra  r   )rB   rd   re   r   r   r   r7  r:  r   rB  rD  r,   )r   rz  rW   rT   rU   rr   r   r{   r|   r.  resultsr   current_dtypes                rH   %test_ridge_regression_dtype_stabilityr    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HrJ   c                      t        d      \  } }t        j                  |       } | d d dd d f   } |d d d   }t        d      j	                  | |       y )Nr   r  rL   r=   r  )r   rB   asfortranarrayr   r   )rr   r{   s     rH   test_ridge_sag_with_X_fortranr    sS    +DAq
!A	#A#q&	A	#A#A	Aq!rJ   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.rX   r   )r  rW   rY   r   Nr=   r  r   )	r
   r   rB   r   r   r   r   r/   r   )
ClassifierrP   rr   r{   r   r  r  s          rH   test_ridgeclassifier_multilabelr    s     *AAFDAq			"aA
1vA&A

v

"
"1a
(C[[^F<<177"""vad|VAqD\2	Aq!rJ   rw  r  )rZ   r   r8  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.rX   rL   r   rS   r   r  r  r  r[   r   Tr|   r.  r   r   r   N)rB   r   r   r   r   rf   r   )r   r   r|   rr   r   r   r{   r   s           rH   #test_ridge_positive_regression_testr    s    
 	1a&1a&1a&1a&12A88QHD	EE$K)#EE$Kd6E 
IIaO66%++"###rJ   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  r8  r   rX   ra   r   r   )TFr   )r|   r.  r   r   rd  r@  N)rB   rd   re   r   rg   r   rh   r   r  r   r   r,   )
r   r|   rq   rr   r   r   r{   r}  r.  r   s
             rH   %test_ridge_ground_truth_positive_testr     s     ))


#C		#sA;;sCaggaj;1D	Hy H	$t	++AG! .(-U
 	uyyA,,-	.
 W4a0rJ   )r9   r;   r<   r:   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.r8  rX   rL   r   rS   rY   TFr  zdoes not support positiver   Nzonly 'lbfgs' solver can be used)r.  r   ra  )rB   r   r   r   r   r   r   r   )r   r|   rr   r   r{   r   ry   s          rH   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   rT   rU   rW   r8  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   ra   r   rL   )r   rB   rd   re   r   rg   r   r   )	r   rW   noise_scaler   rq   r   rr   r|   r{   s	         rH   
ridge_lossz,test_positive_ridge_loss.<locals>.ridge_lossV  s    $$	#))''5C;;Q%++BSBS!TTD;;DRVVQT\I5!;<<sU{RVV!GN
 @
 
 	
rJ   r   T)r|   r.  r  )Nr   )r   r   r   rQ  )r|   n_checksr  r   model_positivelossloss_positiverW   loss_perturbedrr   r{   s   `        @@rH   test_positive_ridge_lossr  O  s     SSrJDAqEH

 ""1a(E6::1a@N
 eD~.M=    h /#NN.../rJ   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  rX   FgؗҜ<i  )r.  r   r   r^  r   r@  N)r   rB   expand_dimsr(  r   r   r,   )r|   rr   r{   config
coef_lbfgsr   s         rH   test_lbfgs_solver_consistencyr  u  sw     SSrJDAq
q!AJJwEF aE4V4Jq!U+MJDqArJ   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.rX   rY   g    _g    _Br   r  Fr   T)r|   r   r   r   r.  r   zlbfgs solver did not converger   N)rB   r   r   r   r   r   r   )rr   r{   r   s      rH   test_lbfgs_solver_errorr    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.
    Nr9   )r;   r>   zunsupported configurationr   rR   r  rL   r   r  r   )r   r|   r   r.  rW   r   r   rd  rX  r   r   r]   r  r|   r   r   zSolver z- does fail test for scaling of sample_weight.r   r   )r   r   rB   rd   re   r-  r   r   r   r   r*  r   	ones_liker,   rg   r   r  pir   toarrayr   )r   r   r  r   rn   rq   rT   rU   rr   r{   rP   r  r   r   r   r  X2y2sample_weight_1sample_weight_2r  s                        rH   $test_ridge_sample_weight_consistencyr    s{    #U?v)==-KK34
 ))


#CIv~!^
]
J'AA#Q#G#'F /&/

a$

7C99>>DNN	LLOMGGAqG.CIIt$/	2
 KKDqqwwqzKBMM"#bcFdNFGGAqG.99>>DNN	GGAcrc1fIq"v]3B-?G@CIIt$/	2 ?6?%%BEEF7O,C%DDHHQ!6H7 wvh&STUDJJ403 #IIK	A.	Q/0q	9B	A.	Q/0	1B#((*O$i1n%*%nn	&6	Q78qO #Qb!?6?q!?CD?6?r2_EDDJJ

+9 rJ   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   )rT   rU   r   rW   r   r   NrL   r  rT  T)r?  rW  r   rf  r   r   .)r   rB   r   r   r   r   emptyr  r    	enumerateri  r   r   r,   rj  )rU  r   r   rr   r{   r   r?  r  rr  rV  	alpha_idxr|   idx	train_idxtest_idxr   s                   rH   !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((+6rJ   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.
    rL   r   rW   r   r  rT  T)rW  rf  r   r   N)r   rB   r   r   r   r   r    r   rY  squeezeri  r   r,   r  r   )
rn   rr   r{   r   r  rV  r   traintest
y_pred_loos
             rH   '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.rL   r   r  c                     | |z
  dz  }t        j                  |d      }|j                  dk(  rt        j                  |ddg       S | S )NrL   r   r   rX   )r  )rB   rC   ndimr  )y_truerF   errorsmean_errorss       rH   custom_errorz=test_ridge_cv_custom_multioutput_scorer.<locals>.custom_errorF	  sP    6/a'ggf1-q JJ{QF;;; |rJ   c                 6     || j                  |             S )zGMultioutput score that give twice more importance to the second target.)r   )r  rr   r{   r  s      rH   custom_multioutput_scorerzJtest_ridge_cv_custom_multioutput_scorer.<locals>.custom_multioutput_scorerP	  s    Q	 1 1! 4555rJ   )rW  r   N)r   r   r   r    r   rY  rB   r  ri  r   r,   r  )
rr   r{   r  r  rV  r   r  r  r  r  s
            @rH   'test_ridge_cv_custom_multioutput_scorerr  B	  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    rH   *test_metadata_routing_with_default_scoringr  d	  s     O((*rJ   zmetaestimator, make_datasetc                      |ddd      \  }}t        |       } | j                  ||t        j                  |j                  d                y)zTest that `set_score_request` is set within `RidgeCV.fit()` and
    `RidgeClassifierCV.fit()` when using the default scoring and no
    UnsetMetadataPassedError is raised. Regression test for the fix in PR #29634.r  r   r   r  r   r   N)r   r   rB   r   r   )r  r  rr   r{   s       rH   +test_set_score_request_with_default_scoringr  m	  sF     #!"EDAq-(Ma"''!''!**=>rJ   )r  r  r   r\   rX   g      *@rM  rM  TFFNrA   )r  	itertoolsr   numpyrB   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)   r*   -sklearn.utils._test_common.instance_generatorr+   sklearn.utils._testingr,   r-   r.   r/   r0   sklearn.utils.estimator_checksr1   r2   sklearn.utils.fixesr3   r4   r5   r6   r7   r8   SOLVERSr   r   load_diabetesdiabetesr  r   r   r   r   r   indrd   re   rq   r'  	load_irisr  r  r  rI   rM   fixturer   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r"  r2  rF  r(  r^  ra  rv  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  sortedr  r  r  r  r  r  r!  r'  r*  r1  r?  rD  rF  r   	TypeErrorrJ  rL  rN  r   rT  rX  r\  r`  r   r   ri  rv  ry  rQ  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rJ   rH   <module>r     sn        ,   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  @D$
N )-/'  
 %'AB   
 Uu%		 	!  		(( //1B1DE *-/'  
DD" '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 -? .?rJ   