
    h$,f             	       t   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	 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,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9m:Z: g dZ;dZ<dZ= e	j|                         Z?e?j                  e?j                  cZBZC ej                  eBj                  d          ZFej                  j                  d       ZIeIj                  eF       eFdd ZFeBeF   eCeF   cZBZC e	j                         ZLeLj                  eLj                  cZMZNd ZOd ZP ej                  ddg      d        ZRej                  j                  de;      ej                  j                  dddg      d               ZUej                  j                  de;      ej                  j                  dddg      d               ZVej                  j                  de;      ej                  j                  dddg      d               ZWej                  j                  de;      ej                  j                  dddg      d                ZXej                  j                  de;      ej                  j                  dddg      d!               ZYej                  j                  de;      ej                  j                  dddg      d"               ZZej                  j                  de;      ej                  j                  dddg      ej                  j                  d#dge8z         ej                  j                  d$d%d&g      d'                             Z[d( Z\d) Z]d* Z^d+ Z_d, Z`d- Zaej                  j                  d.g d/      ej                  j                  d0e8      d1               Zbej                  j                  d2g d3      ej                  j                  d4ddg      ej                  j                  d0e8      d5                      Zcej                  j                  d2g d3      ej                  j                  d4ddg      ej                  j                  d0e8      d6                      Zd	 	 	 	 	 	 	 	 	 	 	 	 dd8Zeej                  j                  d9d:  eg d;dge8z         D              ej                  j                  d<g d=      ej                  j                  d> ej                  d?            d@                      Zfej                  j                  dAdBdCg      ej                  j                  dDej                  ge8z         ej                  j                  dEdFdGg      ej                  j                  dddg      ej                  j                  dHg dI      dJ                                    ZhdK Ziej                  j                  dAdBdCg      ej                  j                  dDej                  ge8z         ej                  j                  dLdMdNg      ej                  j                  dOg dP      dQ                             Zjej                  j                  d#dge8z         ej                  j                  dRg dS      dT               ZkdU ZldV Zmej                  j                  dW edX      ef edX      efg      dY        Znej                  j                  dW e       ef e       efg      ej                  j                  dZdd?g      d[               Zod\ Zpd] Zqd^ Zrd_ Zsej                  j                  d`ddaeOg      ej                  j                  dZd e'db      g      ej                  j                  d#dge8z         dc                      Ztej                  j                  dZd e'db      g      ej                  j                  d#dge8z         dd               Zude Zvej                  j                  dfelemeqeresevf      ej                  j                  d0e8      dg               Zwdh Zxej                  j                  dieef      dj        Zydk Zzej                  j                  d`ddlePg      dm        Z{ej                  j                  d`ddaeOg      dn        Z|ej                  j                  doeeg      dp        Z}dq Z~dr Zej                  j                  dsdtd?gd?dtgg      ej                  j                  d#e6e7z   e8z   e9z   e:z         du               Zdv Zej                  j                  doeeg      ej                  j                  dwdxdyiedzfdxd{ied|fdxd}ied~fg      d               Zej                  j                  doeeg      d        Zd Ze4d        Zej                  j                  dg d      ej                  j                  dddg      ej                  j                  d0e8      d                      Zej                  j                  dg d      ej                  j                  d0e8      d               Zej                  j                  dddg      ej                  j                  d0e8      d               Zej                  j                  dddg      ej                  j                  dd ej                  d      g      ej                  j                  dej                  ge8z         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> ed7            d               Zd Zej                  j                  dei fedZdifedZd?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e8z         ej                  j                  dddg      ej                  j                  de;dgz         d                             Zy)    N)product)linalg)datasets)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)	_IS_32BITcheck_random_state)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)svd	sparse_cgcholeskylsqrsagsaga)r.   r1   )r.   r/   r0   r1   r2      c                 2    t        j                  | |k(        S N)npmeany_testy_preds     Elib/python3.12/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callabler<   J   s    776V#$$    c                 .    | |z
  dz  j                         S )N   )r7   r8   s     r;   _mean_squared_error_callabler@   N   s    f_"((**r=   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.
    rA   )      )rF   rE   )	n_samples
n_featureseffective_rankrandom_state   NMbP?
   lowhighsizerS   r?   r   )rL   rL   )paramminr6   randomRandomStater   r   r-   alluniformnormalTdiagidentitysolvenorm)global_random_seedrequestrG   rH   krngXUsVtU1U2Vt1_coef_olsyalphad
coef_ridgeR_OLSR_Ridges                        r;   ols_ridge_datasetrt   R   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:%%r=   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 y	)zTest that Ridge converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
          ?Tr1   r2   V瞯<绽|=ro   rv   ru   tolrJ   rK   r?   NrL   r   axissample_weight )dictr6   r7   sumr   fit
intercept_pytestapproxr#   coef_scoreonesshape)ru   rv   rt   ra   re   rn   rl   coefro   rC   res_null	res_RidgeR2_Ridgemodel	intercepts                  r;   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7r=   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.
    rx   r?   ry   rz   r{   r|   NrL         ?rK   r~   r   :0yE>atol)r   r   r6   concatenater   matrix_rankrV   r7   r   r   r   r   r#   r   r_ru   rv   rt   ra   re   rn   rl   r   rG   rH   ro   r   r   s                r;    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>r=   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.
    rx   r?   ry   rz   r{   r|   NrL   r   r~   r   r   )r   r   r6   r   r   r   rV   r   r7   r   r   r   r   r#   r   r   s                r;    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1r=   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   ry   rz   r{   r|   NrL   1Ridge does not provide the minimum norm solution.reasonr   )r   r   r   r   r   r   r   r#   r   predictr6   r   r`   r   xfail)ru   rv   rt   ra   re   rn   r   rl   rG   rH   ro   rC   r   r   s                 r;   !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*r=   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   ry   rz   r{   r|   NrL   r   rK   r~   r/   r   r   )r   r   r6   r   r   r   rV   r   r   r   r   skipr#   r   r   r   r`   r   ru   rv   rt   ra   re   rn   r   rl   rG   rH   ro   r   r   s                r;   ,test_ridge_regression_unpenalized_hstacked_Xr   N  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7r=   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   ry   rz   r{   r|   NrL   r~   r   r   )r   r   r6   r   r   r   rV   r   r   r   r   r   r#   r   r   r`   r   r   s                r;   ,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*r=   sparse_containerro   rx   {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   rK   rP   ry   rz   r{   順 )ro   rv   ru   r}   max_iterrJ   rL   r~   r   )SPARSE_SOLVERS_WITH_INTERCEPTr   r    SPARSE_SOLVERS_WITHOUT_INTERCEPTr   rd   rZ   r   r6   r   r   r7   r   r   r   r#   r   )ru   rv   r   ro   rt   ra   re   rn   rl   r   rG   rH   swr   r   s                  r;   $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&r=   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 )NrL   rK   r   ro   )	
y_diabetesreshaper   
X_diabetesr6   dotr\   r   r%   )rn   r   K	dual_coefcoef2s        r;   test_primal_dual_relationshipr     sl    2q!A:q7D
z:<<(A&q!D6:IFF:<<+--EdE*r=   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      rO   z3sparse_cg did not converge after [0-9]+ iterations.matchrx   r.           rK   )ro   ru   r}   r   verbose)r6   rW   rX   randnr   warnsr
   r   )rd   rn   re   warning_messages       r;   &test_ridge_regression_convergence_failr     st    
))


"C		!A		!RAPO	(	@ 
qKS4QR	

 
 
s    A<<Bc                  r   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                  d|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   rO   rK   r   rK   r?   )r?   )r6   rW   rX   r   newaxisc_r   r   r   r   r   
isinstancendarrayfloat)rd   rG   rH   re   rn   Y1Yridges           r;   test_ridge_shapes_typer     s   
))


"C!Iz		)Z(A		)A	
1bjj=	B
aQhAGE	IIaO;;---!!R'''ekk2::...e&&...	IIa;;J///!!T)))ekk2::...e&&

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

333r=   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   rx   rK   )	r6   rW   rX   r   r   r   r   r   r$   )rd   rG   rH   re   rn   r   r   r   s           r;   test_ridge_interceptr   $  s    
))


"C!Iz		)Z(A		)A
aqjAGE	IIaO  I	IIaO((+Y7((+Y_=r=   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   rF   r   Fro   rv   rv   )	r6   rW   rX   r   r   r   r   r$   r   )rd   rG   rH   rn   re   r   olss          r;   test_ridge_vs_lstsqr   6  s     ))


"C Iz		)A		)Z(A51E

/C	IIaOGGAqMSYY/	IIaOGGAqMSYY/r=   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*   )   rO   r   r/   ro   ru   )r-   r.   r0   r/   r1   r2   -q=)ro   ru   r}   rL   r   zCNumber of targets and number of penalties do not correspond: 4 != 5r   )r6   rW   rX   r   arangearrayzipr\   r   r   r   r%   r   raises
ValueError)rd   rG   rH   	n_targetsre   rn   	penaltiesro   targetcoef_choleskyru   coefs_indiv_pencoef_indiv_penr   err_msgs                  r;   test_ridge_individual_penaltiesr   K  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         	   )
r6   rW   rX   r   lenr   hstackr#   r   r\   )
r   r   rd   re   X_msqrt_swr   Aoperatorreference_operators
             r;   test_X_CenterStackOpr   k  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Cr=   r   ))rO   rK   )   r   )r      )r?   r?   )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   rK   )r   weightsTr   )r6   rW   rX   r   r   r   	chisquaresqrtaverager   r\   r   _compute_gramr#   )r   r   r   rd   re   r   r   X_mean
X_centered	true_gramX_sparsegcvcomputed_gramcomputed_means                 r;   test_compute_gramr  z  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}-r=   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  )r6   rW   rX   r   r   r   r  r  r  r\   r   r   _compute_covariancer#   )r   r   r   rd   re   r   r   r  r	  true_covariancer  r  computed_covr  s                 r;   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\2r=   rK   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)	rG   rH   n_informativer   biasnoiseshuffler   rJ   rK   r   r   )
r	   r6   asarrayrW   rX   binomialr   copyr   abs)rG   rH   proportion_nonzeror  r   r  X_offsetr  r  r   positiverJ   re   rn   cmask	removed_Xs                    r;   _make_sparse_offset_regressionr$    s    #!
GAq! QJJsOMA
		l+44Q8JAGGTWXX 	 IAteHIdOq	A	QUU266!9q=1$%%FF1IMQaD!Qwa4Kr=   zsolver, sparse_containerc              #   6   K   | ]  \  }}||dv r||f  y w)N)r.   ridgecvr   ).0ru   r   s      r;   	<genexpr>r(    s3      &V% #v1I'I 
!"s   )r/   r1   r.   r0   r2   r&  z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r)  rx   )r   float64皙?seedr   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t        | d|      }|j                  ||	       t        |j                  |
j                  dd       t        |j                  |
j                  dd       y )Nrx   g?g      I@g     @@rO      )r  rH   r  r  rJ   rG   r-   )ru   ro   F)r  r&  alphasr{   )ru   r}   ro   rM   r   rtol)	r$  r    r   r   astyper   r#   r   r   )ru   r  rG   dtyper   r.  ro   r  re   rn   	svd_ridger   s               r;   test_solver_consistencyr8    s    & E&,D%E)-DAq 	QAU%044Q:I	U#A	U#A#Qw'Ve<	IIaOEKKt$GE$$i&:&:DQr=   gcv_moder-   eigenX_containerX_shape)r   r   )r   r   zy_shape, noise))r   rx   )r   rK         >@)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 )Nr?   rL   rK   r   Fr   rG   rH   r   rJ   r  r  r  rM   r*  rx         $@g     @@neg_mean_squared_errorcvrv   r2  scoring)r9  rv   r2  rM   r4  )r   r$  r   r   r   alpha_r   r   r#   r   r   )r9  r;  r<  y_shaperv   r  rG   rH   r   re   rn   r2  	loo_ridge	gcv_ridgeX_gcvs                  r;   test_ridge_gcv_vs_ridge_loo_cvrP    s     $Iz"7|q0aI)DAq 	
		'A(F#(	I #I MM!QNEMM%v}}Y-=-=>>>>IOOY__4@I(()*>*>TJr=   c            	         d} d\  }}d}t        |||dddd      \  }}g d}t        |d	|| 
      }t        d	||       }|j                  ||       |j                  ||       |j                  t	        j
                  |j                        k(  sJ t        |j                  |j                  d       t        |j                  |j                  d       y )Nexplained_variance)rO   r   rK   r   Fr   rC  rD  TrG  )rv   r2  rI  rM   rJ  )	r$  r   r   rK  r   r   r#   r   r   )	rI  rG   rH   r   re   rn   r2  rM  rN  s	            r;   test_ridge_loo_cv_asym_scoringrS  5  s    "G!IzI)DAq )FDI d67KIMM!QMM!Qv}}Y-=-=>>>>IOOY__4@I(()*>*>TJr=   rH   r   r   zy_shape, fit_intercept, noise))r=  Trx   )r>  Tg      4@)r@  TrA  )r@  Fr?  c                    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)        ||||      }||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 )NrD  r   r?   rL   rK   r   F)rG   rH   r   rJ   r  r  r   )n_splits)groupsrF  )r2  rH  rI  rv   r   rH  r~   T)r2  store_cv_valuesr9  rv   r   rM   rJ  )r6   rW   rX   r   r$  r   r   rV   r5  intrepeatr   r   r   r   splitr   r   r   rK  r   r   r  
cv_values_indexr   r   r#   r   r   )r9  r;  rv   rH   rL  r  r2  rd   r   re   rn   r   indicesX_tiledy_tiledrH  splitskfold	ridge_regpredictionskfold_errorsirO  rN  
gcv_errorss                            r;   test_ridge_gcv_sample_weightsrh  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k)a/L<>IIaggaj<Q78|GqL)2L  ::l+LNE#	I MM%-M8
7|q))!QU\\0J*JK
))!V\\%,,-G*GH
<<6==)9)9::::J48IOOU[[t<I((%*:*:F+s   -$K>z2mode, mode_n_greater_than_p, mode_p_greater_than_n))Nr-   r:  )autor-   r:  )r:  r:  r:  )r-   r-   r-   c                     t        dd      \  }}|  | |      }t        ||      |k(  sJ t        |j                  |      |k(  sJ y )Nr   r?   )rG   rH   )r	   r   r\   )r   modemode_n_greater_than_pmode_p_greater_than_nre   rl   s         r;   test_check_gcv_mode_choicern    sT     Q15DAq#Q1d#'<<<<133%)>>>>r=   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)rv   rI  c                     t        | |       S r5   )r   )xrn   s     r;   funcz_test_ridge_loo.<locals>.func  s    "1a(((r=   rF  r   h㈵>rJ  )r   r   r   r   r   rK  appendr'   r   r   r   r   r   r   r6   r   vstackr\   r   r#   )r   rG   retre   rv   	ridge_gcvrK  frI  
ridge_gcv2rs  
ridge_gcv3scorer
ridge_gcv4r   Y_predr:   s                    r;   _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Jr=   c                 F   | t         n | t               }t               }|j                  |t               |j	                  |       t        |j                  j                        dk(  sJ t        |j                        t        j                  k(  sJ t        d      }|j                  |       |j                  |t               |j	                  |       t        |j                  j                        dk(  sJ t        |j                        t        j                  k(  sJ y )NrK   r   rW  )r   r   r   r   r   r   r   r   typer   r6   r,  r   
set_params)r   re   ridge_cvrH  s       r;   _test_ridge_cvr    s    &.
4DZ4PAyHLLJQx~~##$)))##$

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

222r=   zridge, make_dataset)rX  c                 ^     |dd      \  }}| j                  ||       t        | d      rJ y )N   r   rG   rJ   r\  )r   hasattr)r   make_datasetre   rn   s       r;   #test_ridge_gcv_cv_values_not_storedr    s4     !"5DAq	IIaOul++++r=   rH  c                      |dd      \  }}| j                  d|       | j                  ||       t        | d      sJ t        | j                  t
              sJ y )Nr  r   r  F)rX  rH  best_score_)r  r   r  r   r  r   )r   r  rH  re   rn   s        r;   test_ridge_best_scorer    sZ     !"5DAq	Ur2	IIaO5-(((e''///r=   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   rK   g?r?   rM   )rK   d     r1  T)r2  alpha_per_targetr   )r2  r  rX  r2)r2  r  rI  )r2  rH  r  z3cv!=None and alpha_per_target=True are incompatibler   r  )r6   rW   rX   r   r   r   r\   r   r   rK  r&   r%   r   r   r   r  r\  r   isscalarr   r   r   r   )rd   rG   rH   r   rn   re   r2  r   optimal_alphasr  msgs              r;   "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
 ftTRVV	1H ??  YL000%%)555$$CK(KKKK a$MQQRSUVWH??  YL000%%)555$$Iq(AAAA ftTRVV	1QT7H ;;x''';;x++,,,$$CK(@@@@ 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   r6   roundr   )r   re   r   s      r;   _test_ridge_diabetesr  ]  sH    &.
4DZ4PA&E	IIa88EKK:.22r=   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 )NrK   Fr   r?   r   decimal)r   r6   rv  r   r\   r   r   r   r   r   r%   )r   re   r   rH   r   r~  r:   s          r;   _test_multi_ridge_diabetesr  d  s    &.
4DZ4PA
		:z*+--A!!!$J&E	IIaO;;J///]]1F	IIa]]1Fbii(89;;VQOr=   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   rK   gHzG?r   rW  g?)r6   uniquey_irisr   X_irisr   r   r   r   r   r7   r   )r   	n_classesrH   re   regr:   rH  s          r;   _test_ridge_classifiersr  s  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#$+++r=   rI  accuracyr   c                     | t         n | t               }t        |      rt        |      n|}t        ||      }|j	                  |t
              j                  |       y )N)rI  rH  )r  callabler   r   r   r  r   )r   rI  rH  re   scoring_clfs         r;   "test_ridge_classifier_with_scoringr    sN     #*0@0HA'/'8{7#gH
H
4CGGAvq!r=   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   r8   s     r;   _dummy_scorez:test_ridge_regression_custom_scoring.<locals>._dummy_score  s    r=   r?   r   )num)r2  rI  rH  r  r   )r  r6   logspacer   r   r   r  r  r   r   rK  )r   rH  r  re   r2  r  s         r;   $test_ridge_regression_custom_scoringr    s     #*0@0HA[[QA&F
6;|3LQS
TCGGAv??fmmD1111::vay1111r=   c                    | t         n | t               }t        dd      }|j                  |t               |j	                  |t              }t        dd      }|j                  |t               |j	                  |t              }||k\  sJ y )Nrt  F)r}   rv   rM   )r   r   r   r   r   )r   re   r   r   ridge2score2s         r;   _test_tolerancer    st    &.
4DZ4PAd%0E	IIaKK:&Et51F
JJq*\\!Z(FF??r=   	test_funcc                 L     | d       } | |      }||t        ||d       y y y )Nr   r  )r%   )r  r   	ret_dense
ret_sparses       r;   test_dense_sparser    s6     $I=)J!7!)ZC "8r=   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   皙rx   r   rK   rK   rK   rL   rL   class_weightr-  rK   rM   rL   balanced)rK   rK   rL   rL   r?   )r6   r   r   r   r&   r   r   classes_r%   r   r   )re   rn   r  regas       r;   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>r=   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  rK   r  rx   g      Y@)r   rK   r?   r?   N)	r   irisdatar   r$   r   r6   r   r   )r  reg1reg2r   r  s        r;   "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/r=   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  rx   r   r  )r   r*  rK   )r  r2  rK   rM   )r   r*  rK   rO   gɿr?   rL   )r6   r   r   r   r&   r   )re   rn   r  s      r;   test_class_weights_cvr  	  s    
4,q	D$<#sc3ZPQAA
n
ECGGAqM !U<N
OCGGAqMs{{T1I;/2$@r=   rF  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   r*  rx   rE  Tr2  rH  rX  rI  r   )rH  rX  rI  zcv!=None and store_cv_valuesr   )r6   rW   rX   r   r   r  r   r   r   r\  r   r   r   r   )rI  rd   rG   rH   rr  r2  n_alphasr  rrn   r   s              r;   test_ridgecv_store_cv_valuesr    s    ))


#CIJ		)Z(AF6{H'/'8{7#gHv$hOA 			)AEE!QK<<)X!6666 I		)Y'AEE!QK<<)Y!AAAA1dG<A	z)G	H 	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  rx   r   r  r  Tr  rK   )rK   rL   rK   rL   rK   )rL   rL   rK   rL   rL   )
r6   r   r   r   r  r   r   r   r\  	transpose)	rI  rr  rn   rG   r2  r  r  r  r   s	            r;   (test_ridge_classifier_cv_store_cv_valuesr  8  s   
4,q	D$<#sc3ZPQA
"#A
IF6{H'/'8{7#gH$h	A
 IEE!QK<<)Y!AAAA 		-/BC	ik  
IEE!QK<<)Y!AAAAr=   	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   r?   r1  z`alphas` was mutated in `z
.__init__`)r6   rW   rX   r   r   randintr2  __name__r   r&   r  )r  rd   r2  rG   rH   rn   re   	ridge_ests           r;   test_ridgecv_alphas_conversionr  U  s    
))


"CF IzGIIi KK1i(		)Z(A(IF"B	"9#5#5"6jAB" MM!Qy''F);<r=   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   rx   r   )r2  rH  r   ro   rW  )r6   rW   rX   r   randr   r   r   r   r   rK  best_estimator_ro   r%   r   )rd   r2  rG   rH   rn   re   r   rH  r&  
parametersgss              r;   test_ridgecv_sample_weightr  j  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r=   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)Nr?   r   r   rK   rx   g       @r   c                  ,    j                          y r5   r   )re   r   sample_weights_not_OKrn   s   r;   fit_ridge_not_okzStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok  s    IIa12r=   c                  ,    j                          y r5   r  )re   r   sample_weights_not_OK_2rn   s   r;   fit_ridge_not_ok_2zUtest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2  s    IIa34r=   z)Sample weights must be 1D array or scalarr   )r6   rW   rX   r   r   r   r   r   r   r   r   )
n_samplessn_featuressrd   rG   rH   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r  r  r   re   r   r  r  rn   s              @@@@@r;   9test_raises_value_error_if_sample_weights_greater_than_1dr    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_featuresr?   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   rx   Fr   r?   rK   r   r  r  )r6   rW   rX   r   r   r   r%   r   )
rG   rH   r   rd   sparse_ridgedense_ridgere   rn   sample_weightsr  s
             r;   &test_sparse_design_with_sample_weightsr    s     ))


#Cs%8Lc7K		)Z(A		)AYYy)Q.2N"HXq?OOAqO7l00+2C2CQOr=   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  rx   r   r  )rK   rO   r  r1  )r6   r   r   r   )re   rn   r   s      r;   test_ridgecv_int_alphasr    sM    
4,q	D$<#sc3ZPQAA <(E	IIaOr=   zparams, err_type, err_msgr2  )rK   rL   iz alphas\[1\] == -1, must be > 0.0)gr  g      $z"alphas\[0\] == -0.1, must be > 0.0)rK   rx   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   r?   r   Nr   )rd   r   r  r   r   r   )r  rC   err_typer   rG   rH   re   rn   s           r;   test_ridgecv_alphas_validationr    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   r?   rK   r1  N)rd   r   r   r  r   )r  rG   rH   re   rn   s        r;   test_ridgecv_alphas_scalarr    s[     !Iz		)Z(AGIIi KK1i(QAq!r=   c                      t        dd      } | j                  t        t               | j                  j
                  d   t        j
                  d   k(  sJ y )Nr.   rK   )ru   r   r   )r   r   r   r   r   r   )r  s    r;   test_sparse_cg_max_iterr    sB    
{Q
/CGGJ
#99??1!1!1!!4444r=   c            	         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 )	Nr?   rK   rF   )r1   r2   r0   r   )ru   r   r}   )r.   r-   r/   r*  )
r   r   r6   tiler\   ranger   r   r&   n_iter_)r   re   rn   y_nr   ru   r  s          r;   test_n_iterr    s     IzqA
''!i^
$
&
&C!QK J- 	JFveDCGGAsOs{{BGGHi,HI	JJ 3 #6A483{{"""#r=   )r0   r.   lbfgsri  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   )rH   rJ   r   Nrx   r   rT   ri  r.   r   )ru   r}   r   r   gƠ>rJ  )r$  r6   rW   rX   rZ   r   r   r   r#   r   r   )ru   r	  ra   r   r   re   rn   r   rd   dense_solverr  r  s               r;   test_ridge_fit_intercept_sparser    s       H)$6DAq Mii##$67ckkqwwqzk:: #)F"2;L|JKEHELOOAqO6]1%qFK**L,C,CDK%%|'9'9Er=   )r2   r-   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   )rH   rJ   ru   zsolver='{}' does not supportr   )r$  r   formatr   r   r   r   )ru   r   re   rn   X_csrr  r   s          r;   %test_ridge_fit_intercept_sparse_errorr  8  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      @)rH   rG   rJ   r  rx   r   rT   r1   Tr{   r   )ro   ru   rv   r}   r   r   error-C6?rJ  z"sag" solver requires.*r   rM   )ru   rv   r}   r   r   )r$  r6   rW   rX   rZ   r   r   r   r   warningscatch_warningssimplefilterUserWarningr#   r   r   r   r   )r	  ra   r   re   rn   rd   r   r  rC   r  r  s              r;   #test_ridge_fit_intercept_sparse_sagr  C  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)ri  r.   r/   r0   r1   r2   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   )rK   r?   r*  r   g     @)rM   ư>rM   r  r  )r1   ri  zIn Ridge, only 'sag' solverr   )ro   ru   r   r  r   r}   N)ro   ru   r   r   r  r}   r   r4  r   )
r"   r  r6   r   r!   r   r   r   r   r#   )r  r   r  ru   rd   re   
true_coefsrn   true_intercept	X_testingro   r}   r   r   outr   r   s                    r;   .test_ridge_regression_check_arguments_validityr#  a  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/)r-   r.   r/   r0   r1   r2   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   rx   r  r  r?     )ro   ru   r   r}   r   r  gMb@?r  )r6   rW   rX   r   r5  r)  finfo
resolutionr   r   r   r6  r   r#   )ru   rd   ro   r   rG   rH   X_64y_64X_32y_32r}   ridge_32coef_32ridge_64coef_64s                  r;   test_dtype_matchr0    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Ir=   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   rx   r   )r  r   r?   r/   r   r   r  )r6   rW   rX   r   r   r5  r)  r   r   r   r6  r   r$   )rd   ro   rG   rH   n_targetr(  r)  r*  r+  r,  r-  r.  r/  s                r;   test_dtype_match_choleskyr3    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Br=   )r-   r/   r0   r.   r1   r2   r  c                    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   rx   r  r.   rM   rt  r%  r{   F)	ro   ru   rJ   r   r   r   r}   return_n_iterr  r   )r6   rW   rX   r   r   r   r)  r,  r   r5  r6  r#   )ru   r.  rJ   rG   rH   re   r   rn   ro   r   resultsr   current_dtypes                r;   %test_ridge_regression_dtype_stabilityr8    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Hr=   c                      t        d      \  } }t        j                  |       } | d d dd d f   } |d d d   }t        d      j	                  | |       y )Nr   rJ   r?   r1   r  )r	   r6   asfortranarrayr   r   )re   rn   s     r;   test_ridge_sag_with_X_fortranr<    sS    +DAq
!A	#A#q&	A	#A#A	Aq!r=   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.rK   r   )r  rJ   rL   r~   Nr1   r  r   )	r   r   r6   r   r   r   r   r&   r   )
ClassifierrC   re   rn   r   r  r~  s          r;   test_ridgeclassifier_multilabelr?    s     *AAFDAq			"aA
1vA&A

v

"
"1a
(C[[^F<<177"""vad|VAqD\2	Aq!r=   ri  r  )rM   r   r*  rx   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.rK   r?   r   rF   r   r  r   r   rN   r   Tro   r   ru   rv   r   N)r6   r   r   r   r   rY   r   )ru   rv   ro   re   r   r   rn   r   s           r;   #test_ridge_positive_regression_testrB  %  s    
 	1a&1a&1a&1a&12A88QHD	EE$K)#EE$Kd6E 
IIaO66%++"###r=   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  r*  rx   rK   rT   r   r   )TFr{   )ro   r   rv   r}   r  r3  N)r6   rW   rX   r   rZ   r   r[   r   ru  r   r   r#   )
rv   ro   rd   re   r   r   rn   r6  r   r   s
             r;   %test_ridge_ground_truth_positive_testrE  9  s     ))


#C		#sA;;sCaggaj;1D	Hy H	$t	++AG! .(-U
 	uyyA,,-	.
 W4a0r=   )r-   r/   r0   r.   r1   r2   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.r*  rK   r?   r   rF   rL   TFrA  zdoes not support positiver   Nzonly 'lbfgs' solver can be used)r   ru   r  )r6   r   r   r   r   r   r   r   )ru   ro   re   r   rn   r   rl   s          r;   test_ridge_positive_error_testrG  T  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.rD  r   rG   rH   rJ   r*  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   rT   r   r?   )r   r6   rW   rX   r   rZ   r   r   )	r   rJ   noise_scaler   rd   r   re   ro   rn   s	         r;   
ridge_lossz,test_positive_ridge_loss.<locals>.ridge_losso  s    $$	#))''5C;;Q%++BSBS!TTD;;DRVVQT\I5!;<<sU{RVV!GN
 @
 
 	
r=   r   T)ro   r   r:  )Nr   )r	   r   r   r  )ro   n_checksrL  r   model_positivelossloss_positiverJ   loss_perturbedre   rn   s   `        @@r;   test_positive_ridge_lossrR  h  s     SSrJDAqEH

 ""1a(E6::1a@N
 eD~.M=    h /#NN.../r=   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.rD  r   rI  rK   FgؗҜ<i  )r   r}   r   r  r   r3  N)r	   r6   expand_dimsr  r   r   r#   )ro   re   rn   config
coef_lbfgsr   s         r;   test_lbfgs_solver_consistencyrW    sw     SSrJDAq
q!AJJwEF aE4V4Jq!U+MJDqAr=   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.rK   rL   g    _g    _Br   r  Fr   T)ro   ru   rv   r}   r   r   zlbfgs solver did not converger   N)r6   r   r   r   r   r
   r   )re   rn   r   s      r;   test_lbfgs_solver_errorrY    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_weights_invariance alone.
    Nr-   )r/   r2   zunsupported configurationr   rE   rZ  r?   rx   r  r   )rv   ro   ru   r   rJ   r}   r   r  rJ  r   r   rP   r  ro   r   ry   zSolver z- does fail test for scaling of sample_weight.r~   r   )r   r   r6   rW   rX   r  r   r   r   r   r  r   	ones_liker#   rZ   r   r  pir   toarrayr   )rv   r   r  ru   ra   rd   rG   rH   re   rn   rC   r  r   r   r   r  X2y2sample_weight_1sample_weight_2r  s                        r;   $test_ridge_sample_weight_consistencyrd    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 r=   )r  r  r   rO   rK   g      *@r?  r?  TFFN)r  	itertoolsr   numpyr6   r   scipyr   sklearnr   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!   r"   sklearn.utils._testingr#   r$   r%   r&   r'   sklearn.utils.fixesr(   r)   r*   r+   r,   SOLVERSr   r   load_diabetesdiabetesr  r   r   r   r   r   indrW   rX   rd   r  	load_irisr  r  r  r<   r@   fixturert   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r$  r8  r  rP  rS  rh  rn  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   	TypeErrorr  r  r  r  r  r  r  r   r   r#  r0  r3  r  r8  r<  r?  rB  rE  rG  rR  rW  rY  rd  r   r=   r;   <module>r|     s          2    H G  / 7   B 4 #S  !8!!#! 
Jbii
  #$iiA C 	$3i#C*S/ 
JxDKK%+ '(C& )C&L 7+4-8'8 9 ,'8T 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 1.R /	
 RB eW%56~(EFWh$784-8$K 9 9 G 7$KNK< eW%56~(EF2w/#9G 0 G 79Gx +dVn-DE8? F?6r3$ 		'9	5	13FG,, 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  "
 .9D :
D ?F 2C DE0 F08A .0LM: T:7I$JKB LB8 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 # #$ #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\:r=   