
    _nd	             	       ^   d dl Zd dlmZ d dlm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 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dl!m&Z& d dl!m'Z' d dl!m(Z( d dl!m)Z) d dl!m*Z* d dl!m+Z+ d dl,m-Z- d dl,m.Z. d dl,m/Z/ d d l,m0Z0 d d!l1m2Z2 d d"l1m3Z3 d d#l1m4Z4 d d$l1m5Z5 d d%l1m6Z6 d d&l7m8Z8 d d'lm9Z9 d(Z:d)Z;d*Z< ej=                    Z>e>j?        e>j@        cZAZB ejC        eAjD        d                    ZEejF        G                    d           ZHeHI                    eE           eEdd+         ZEeAeE         eBeE         cZAZB ejJ                    ZK ejL        eKj?                  ZMeKj@        ZNd, ZOd- ZPd. ZQd/ ZR e	jS        d0d1g2          d3             ZTe	jU        V                    d4e:          e	jU        V                    d5d6d7g          d8                         ZWe	jU        V                    d4e:          e	jU        V                    d5d6d7g          d9                         ZXe	jU        V                    d4e:          e	jU        V                    d5d6d7g          d:                         ZYe	jU        V                    d4e:          e	jU        V                    d5d6d7g          d;                         ZZe	jU        V                    d4e:          e	jU        V                    d5d6d7g          d<                         Z[e	jU        V                    d4e:          e	jU        V                    d5d6d7g          d=                         Z\e	jU        V                    d4e:          e	jU        V                    d5d6d7g          e	jU        V                    d>d6d7g          e	jU        V                    d?d@dAg          dB                                                 Z]dC Z^dD Z_dE Z`dF ZadG ZbdH Zce	jU        V                    dIg dJ          dK             Zde	jU        V                    dLg dM          e	jU        V                    dNd6d7g          dO                         Zee	jU        V                    dLg dM          e	jU        V                    dNd6d7g          dP                         Zf	 	 	 	 	 	 	 	 	 	 	 	 ddWZge	jU        V                    dXdY  eg dZd7d6g          D                       e	jU        V                    d[g d\          e	jU        V                    d] ejC        d^                    d_                                     Zhe	jU        V                    d`dadbg          e	jU        V                    dceji        ejL        g          e	jU        V                    dddedfg          e	jU        V                    d5d6d7g          e	jU        V                    dgg dh          di                                                             Zjdj Zke	jU        V                    d`dadbg          e	jU        V                    dceji        ejL        g          e	jU        V                    dkdldmg          e	jU        V                    dng do          dp                                                 Zle	jU        V                    dqd6d7g          e	jU        V                    drg ds          dt                         Zmdu Zndv Zoe	jU        V                    dw e#d7x          e.f e%d7x          e/fg          dy             Zpe	jU        V                    dw e#            e.f e%            e/fg          e	jU        V                    dzdd^g          d{                         Zqd| Zrd} Zsd~ Ztd Zue	jU        V                    dddeQg          e	jU        V                    dzd e3d          g          e	jU        V                    deOePg          d                                     Zve	jU        V                    dzd e3d          g          e	jU        V                    deOePg          d                         Zwd Zxd Zye	jU        V                    deneoeseteuexf          d             Zzd Z{e	jU        V                    de$e%f          d             Z|d Z}e	jU        V                    dddeRg          d             Z~e	jU        V                    dddeQg          d             Ze	jU        V                    de#e%g          d             Zd Zd Zd Zd Ze	jU        V                    de#e%g          e	jU        V                    dddiedfddiedfddiedfg          d                         Ze	jU        V                    de#e%g          d             Zd Zd Zed             Ze	jU        V                    d4g d          e	jU        V                    dd6d7g          d                         Ze	jU        V                    d4g d          d             Ze	jU        V                    dd6d7g          d             Ze	jU        V                    dd7d6g          e	jU        V                    dd ej        d          g          e	jU        V                    dej        ejL        g          e	jU        V                    d4g d          d                                                 Ze	jU        V                    d4g d          d             Zd Ze	jU        V                    d4g d          e	jU        V                    d] edT                    d                         Zd Ze	jU        V                    de$i fe%dzdife%dzd^ifg          d             Ze	jU        V                    d4ddg          e	jU        V                    d5d6d7g          e	jU        V                    d?g d          d                                     Ze	jU        V                    d5d6d7g          e	jU        V                    d?g d          d                         Ze	jU        V                    d4g d          d             Ze	jU        V                    d?g d          d             Ze	jU        V                    d?g d          d             Zd Ze	jU        V                    d4g d¢          dÄ             ZdS )    N)linalg)product)	_IS_32BIT)assert_almost_equal)assert_allclose)assert_array_almost_equal)assert_array_equal)ignore_warnings)check_sample_weights_invariance)ConvergenceWarning)datasetsmean_squared_error)make_scorer)
get_scorer)LinearRegression)ridge_regression)Ridge)	_RidgeGCV)RidgeCV)RidgeClassifier)RidgeClassifierCV)_solve_cholesky)_solve_cholesky_kernel)
_solve_svd)_solve_lbfgs)_check_gcv_mode)_X_CenterStackOp)make_low_rank_matrix)make_regression)make_classification)make_multilabel_classification)GridSearchCV)KFold)
GroupKFold)cross_val_predict)LeaveOneOut)minmax_scale)check_random_state)svd	sparse_cgcholeskylsqrsagsaga)r+   r.   )r+   r,   r-   r.   r/      c                     | S N Xs    Elib/python3.11/site-packages/sklearn/linear_model/tests/test_ridge.pyDENSE_FILTERr7   F   s    H    c                 *    t          j        |           S r2   )sp
csr_matrixr4   s    r6   SPARSE_FILTERr<   J   s    =r8   c                 2    t          j        | |k              S r2   )npmeany_testy_preds     r6   _accuracy_callablerC   N   s    76V#$$$r8   c                 6    | |z
  dz                                   S )N   )r?   r@   s     r6   _mean_squared_error_callablerF   R   s    f_"((***r8   longwide)paramsc                    |j         dk    rd\  }}nd\  }}t          ||          }t          j                            |           }t          ||||          }d|dddf<   t          j        |          \  }}}	t          j        |dk              sJ |ddd|f         |dd|df         }}
|	d|ddf         |	|dddf         }}|j         dk    r@|	                    d	d
|          }||z  }|||
                    ||z
            dz  z  z  }nB|	                    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                            |          t          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 mininum ||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.
    rG   )      )rL   rK   )	n_samples
n_featureseffective_rankrandom_state   NMbP?
   lowhighsizerY   rE   r   )rR   rR   )paramminr>   randomRandomStater   r   r*   alluniformnormalTdiagidentitysolvenorm)global_random_seedrequestrM   rN   krngr5   UsVtU1U2Vt1_coef_olsyalphad
coef_ridgeR_OLSR_Ridges                        r6   ols_ridge_datasetry   V   s,   > } %	:: %	:Iz""A
)

 2
3
3C
1SV	 	 	A AaaaeHz!}}HAq"6!d(qqq"1"uXqABBxBAAAY122qqq5	C};;3Rj;AAL	R#**)j"8*99Q>>>KKCbyK995271q5>>)BD014 EJ'''AAfIacAgk13733J HE!j. G9>>%  29>>'#:#:::::a:%%r8   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
         }n2||                    d          z
  }||                                z
  }d}|                    ||           |d	d
         }|j        t          j        |          k    sJ t          |j
        |           |                    ||          t          j        |          k    sJ t	          di |	                    ||t          j        |j        d                             }|j        t          j        |          k    sJ t          |j
        |           |                    ||          t          j        |          k    sJ d	S )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瞯<绽|=rt   r{   rz   tolrP   rQ   rE   NrR   r   axissample_weightr3   )dictr>   r?   sumr   fit
intercept_pytestapproxr   coef_scoreonesshape)rz   r{   ry   rg   r5   rs   rq   coefrt   rI   res_null	res_RidgeR2_Ridgemodel	intercepts                  r6   test_ridge_regressionr      s    &MAq!TE..EEE'  F 271::~HAHI26)Q,''"&1*=*===HOOFOOE	!!!SbS&	A H		AL		IIaOOO9Dv}Y777777EK&&&;;q!h 7 77777 OOFOO1BGAGAJ4G4GHHEv}Y777777EK&&&;;q!h 7 7777777r8   c                 n   |\  }}}}|j         \  }}	d}
t          |
dz  || | dv rdnd|          }|ddddf         }d	t          j        ||fd
          z  }t          j                            |          t          ||	d
z
            k    sJ |r	|d         }n2||                    d          z
  }||                                z
  }d}|                    ||           |dd         }|j	        t          j        |          k    sJ t          |j        t          j        ||f         d           dS )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}   rE   r~   r   r   r   NrR         ?rQ   r   r   :0yE>atol)r   r   r>   concatenater   matrix_rankr\   r?   r   r   r   r   r   r   r_rz   r{   ry   rg   r5   rs   rq   r   rM   rN   rt   r   r   s                r6    test_ridge_regression_hstacked_Xr      s_    &MAq!TGIzEai#..EEE'  E 	
!!!SbS&	AbnaV!,,,,A9  ##s9j1n'E'EEEEE H		AL		IIaOOO9Dv}Y777777 EKtTz!2>>>>>>r8   c                 f   |\  }}}}|j         \  }}	d}
t          d|
z  || | dv rdnd|          }|ddddf         }t          j        ||fd	
          }t          j                            |          t          ||	          k    sJ t          j        ||f         }|r	|d         }n2||                    d	
          z
  }||                                z
  }d	}|	                    ||           |dd         }|j
        t          j        |          k    sJ t          |j        |d           dS )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}   rE   r~   r   r   r   NrR   r   r   r   r   )r   r   r>   r   r   r   r\   r   r?   r   r   r   r   r   r   r   s                r6    test_ridge_regression_vstacked_Xr      sZ    &MAq!TGIzE%i#..EEE'  E 	
!!!SbS&	A
1vA&&&A9  ##s9j'A'AAAAA
adA H		AL		IIaOOO9Dv}Y777777 EKD111111r8   c                 N   |\  }}}}|j         \  }}	d}
t          |
|| | dv rdnd|          }t          d
i |}|r!|ddddf         }|d         }|dd         }nd}|                    ||           ||	k    s|s6|j        t          j        |          k    sJ t          |j        |           dS t          |	                    |          |           t          ||z  |z   |           t          j                            t          j        |j        |j        f                   t          j                            t          j        ||f                   k    sJ t          j        d	           |j        t          j        |          k    sJ t          |j        |           dS )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   NrR   1Ridge does not provide the minimum norm solution.reasonr3   )r   r   r   r   r   r   r   r   r   predictr>   r   rf   r   xfail)rz   r{   ry   rg   r5   rs   r   rq   rM   rN   rt   rI   r   r   s                 r6   !test_ridge_regression_unpenalizedr     s    &MAq$GIzE#..EEE'  F OOFOOE  aaa"fIH	CRCy		IIaOOO
 :]6=#;#;;;;;T***** 	a((!,,,D9,a000y~~beE$4ek$ABCCbinnE)T/"G
 G
 
 
 
 
 	OPPPP6=#;#;;;;;T*****r8   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                            |          t          ||	          k    sJ |                    ||           ||	k    s|sa|j        t          j
        |          k    sJ | dk    rt          j                     t          |j        t          j        ||f                    dS t          |                    |          |           t          j                            t          j        |j        |j        f                   t          j                            t          j        |||f                   k    sJ t          j        d           |j        t          j
        |          k    sJ t          |j        t          j        ||f                    dS )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   NrR   r   rQ   r   r,   r   r   )r   r   r>   r   r   r   r\   r   r   r   r   skipr   r   r   r   rf   r   rz   r{   ry   rg   r5   rs   r   rq   rM   rN   rt   r   r   s                r6   ,test_ridge_regression_unpenalized_hstacked_Xr   R  s    &MAq$GIzE#..EEE'  E  aaa"fIH	CRCy	bnaV!,,,,A9  ##s9j'A'AAAAA	IIaOOO:]6=#;#;;;;;ZKMMMRU4:%677777
 	a((!,,,y~~beE$4ek$ABCCbinnE)T4'(G
 G
 
 
 
 
 	OPPPP6=#;#;;;;;RU4:%677777r8   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                            |          t          ||	          k    sJ t          j        ||f         }|                    ||           ||	k    s|s6|j	        t          j        |          k    sJ t          |j        |           dS t          |                    |          |           t          j                            t          j        |j	        |j        f                   t          j                            t          j        ||f                   k    sJ t          j        d	
           |j	        t          j        |          k    sJ t          |j        |           dS )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   NrR   r   r   r   )r   r   r>   r   r   r   r\   r   r   r   r   r   r   r   r   rf   r   r   s                r6   ,test_ridge_regression_unpenalized_vstacked_Xr     s    &MAq$GIzE#..EEE'  E  aaa"fIH	CRCy	
1vA&&&A9  ##s9j'A'AAAAA
adA	IIaOOO:]6=#;#;;;;;T*****
 	a((!,,,y~~beE$4ek$ABCCbinnE)T/"G
 G
 
 
 
 
 	OPPPP6=#;#;;;;;T*****r8   sparseXrt   r}   {Gz?c                    |r=|r| t           vrt          j                     n|s| t          vrt          j                     |\  }}}}	|j        \  }
}t
                              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
         }n2||                    d          z
  }||                                z
  }d}|rt          j        |          }|                    |||           |	d	d
         }	|j        t          j        |          k    sJ t#          |j        |	           d	S )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)
    r   rQ   rV   r~   r   r   順 )rt   r{   rz   r   max_iterrP   NrR   r   r   )SPARSE_SOLVERS_WITH_INTERCEPTr   r    SPARSE_SOLVERS_WITHOUT_INTERCEPTr   rj   r`   r   r>   r   r   r?   r:   r;   r   r   r   r   r   )rz   r{   r   rt   ry   rg   r5   rs   rq   r   rM   rN   swr   r   s                  r6   $test_ridge_regression_sample_weightsr     s      	V+HHHKMMMM 	61Q#Q#QKMMM%MAq!TGIz		3	3B#..EEE'  E 	
!!!SbS&	A
1vA&&&A
adA	r1r6z	U	"B H		AL	 M!	IIa"I%%%9Dv}Y777777EK&&&&&r8   c                  B   t                               dd          } t          t          | dg          }t	          j        t          t          j                  }t          || dg          }t	          j        t          j        |          j        }t          ||           d S )NrR   rQ   r   rt   )	
y_diabetesreshaper   
X_diabetesr>   dotrb   r   r   )rs   r   K	dual_coefcoef2s        r6   test_primal_dual_relationshipr     s    2q!!A:q777D
z:<((A&q!D6:::IF:<++-EdE*****r8   c            
      2   t           j                            d          } |                     d          }|                     dd          }d}t	          j        t          |          5  t          ||dddd d	
           d d d            d S # 1 swxY w Y   d S )Nr      rU   z3sparse_cg did not converge after [0-9]+ iterations.matchr}   r+           rQ   )rt   rz   r   r   verbose)r>   r]   r^   randnr   warnsr   r   )rj   rs   r5   warning_messages       r6   &test_ridge_regression_convergence_failr     s    
)


"
"C		!A		!RAPO	(	@	@	@ 
 
qKS4QR	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   (BBBc                     t           j                            d          } d\  }}|                     ||          }|                     |          }|d d t           j        f         }t           j        |d|z   f         }t                      }|                    ||           |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	        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	        d|fk    sJ |j
        j	        dk    sJ t          |j        t           j                  sJ t          |j
        t           j                  sJ d S )Nr   r   rU   rQ   r3   rQ   rE   )rE   )r>   r]   r^   r   newaxisc_r   r   r   r   r   
isinstancendarrayfloat)rj   rM   rN   r5   rs   Y1Yridges           r6   test_ridge_shapes_typer     s   
)


"
"C!Iz		)Z((A		)A	
111bj=	B
aQhAGGE	IIaOOO;----!R''''ek2:.....e&.....	IIa;J////!T))))ek2:.....e&
33333	IIaOOO;J////!T))))ek2:.....e&
3333333r8   c                     t           j                            d          } d\  }}|                     ||          }|                     |          }t           j        |d|z   f         }t                      }|                    ||           |j        }|                    ||           t          |j        d         |           t          |j        d         |dz              d S )Nr   r   r}   rQ   )	r>   r]   r^   r   r   r   r   r   r   )rj   rM   rN   r5   rs   r   r   r   s           r6   test_ridge_interceptr   #  s    
)


"
"C!Iz		)Z((A		)A
aqjAGGE	IIaOOO I	IIaOOO(+Y777(+Y_=====r8   c                     t           j                            d          } d\  }}|                     |          }|                     ||          }t	          dd          }t          d          }|                    ||           |                    ||           t          |j        |j                   |                    ||           |                    ||           t          |j        |j                   d S )Nr   )r   rL   r   Frt   r{   r{   )	r>   r]   r^   r   r   r   r   r   r   )rj   rM   rN   rs   r5   r   olss          r6   test_ridge_vs_lstsqr   5  s     )


"
"C Iz		)A		)Z((A5111E

/
/
/C	IIaOOOGGAqMMMSY///	IIaOOOGGAqMMMSY/////r8   c                  N  	
 t           j                            d          } d\  }}}|                     ||          	|                     ||          t          j        |          
t          j        	fdt          
j                  D                       }	
fddD             }|D ]}t          ||           t          
d d                   }d}t          j        t          |	          5  |                    	           d d d            d S # 1 swxY w Y   d S )
N*   )   rU   r   c                 j    g | ]/\  }}t          |d                               |          j        0S )r,   rt   rz   r   r   r   ).0rt   targetr5   s      r6   
<listcomp>z3test_ridge_individual_penalties.<locals>.<listcomp>V  sM     	
 	
 	
v j11155a@@F	
 	
 	
r8   c                 f    g | ]-}t          |d                                         j        .S )-q=)rt   rz   r   r   )r   rz   r5   	penaltiesrs   s     r6   r   z3test_ridge_individual_penalties.<locals>.<listcomp>\  sK        	If%888<<QBBH  r8   )r*   r+   r-   r,   r.   r/   rR   r   zCNumber of targets and number of penalties do not correspond: 4 != 5r   )r>   r]   r^   r   arangearrayziprb   r   r   r   raises
ValueErrorr   )rj   rM   rN   	n_targetscoef_choleskycoefs_indiv_pencoef_indiv_penr   err_msgr5   r   rs   s            @@@r6   test_ridge_individual_penaltiesr   J  s    )


#
#C'0$Iz9		)Z((A		)Y''A	)$$IH	
 	
 	
 	
!$Y!4!4	
 	
 	
 M     M  O * A A!-@@@@ 	#2#'''ESG	z	1	1	1  		!Q                 s   6DD!Dn_col)r3   r   )   c                    t           j                            d          }|                    dd          }|                    d          }|                    t	          |                    } |j        dg| R  } |j        dg| R  }t          t          j        |          ||          }t          j        ||d d d f         |z  z
  |d d d f         g          }t          |
                    |          |
                    |                     t          |j        
                    |          |j        
                    |                     d S )Nr         	   )r>   r]   r^   r   lenr   r:   r;   hstackr   r   rb   )	r   rj   r5   X_msqrt_swr   Aoperatorreference_operators	            r6   test_X_CenterStackOpr  j  s5   
)


"
"C		"aA
))A,,CiiAG	"uA	!eAa 0 0#w??HA4(83(>$>4@P#QRR&**1--x||A???&(,,Q//1B1BCCCCCr8   r   ))rU   rQ   )   r   )r      )rE   rE   )r   r   uniform_weightsc                 V   t           j                            d          } |j        |  }|r t          j        |j        d                   }n|                    d| d                   }t          j        |          }t          j        |d|          }||z
  |d d d f         z  }|	                    |j
                  }t          j        ||d d d f         z            }	t          d          }
|
                    |	|          \  }}t          ||           t          ||           d S Nr   rQ   )r   weightsTr   )r>   r]   r^   r   r   r   	chisquaresqrtaverager   rb   r:   r;   r   _compute_gramr   )r   r  rj   r5   r   r  X_mean
X_centered	true_gramX_sparsegcvcomputed_gramcomputed_means                r6   test_compute_gramr  x  s    )


"
"C	5A (WQWQZ  ]]1eAh''gbkkGZ2...Ff*4 00Jz|,,I}QD!1122H
$
'
'
'C#&#4#4Xw#G#G M=FM***I}-----r8   c                 V   t           j                            d          } |j        |  }|r t          j        |j        d                   }n|                    d| d                   }t          j        |          }t          j        |d|          }||z
  |d d d f         z  }|j	        
                    |          }t          j        ||d d d f         z            }	t          d          }
|
                    |	|          \  }}t          ||           t          ||           d S r
  )r>   r]   r^   r   r   r   r  r  r  rb   r   r:   r;   r   _compute_covariancer   )r   r  rj   r5   r   r  r  r  true_covariancer  r  computed_covr  s                r6   test_compute_covariancer    s!    )


"
"C	5A (WQWQZ  ]]1eAh''gbkkGZ2...Ff*4 00J l&&z22O}QD!1122H
$
'
'
'C"%"9"9(G"L"LL-FM***O\22222r8   d   r   rU   rQ         *@      >@c                 &   t          | ||||||d|	  	        \  }}}|dk    rt          j        |g          }||z  }t          j                            |                              d||j                  dk    }|                                }d|| <   d||<   ||                    |          z  }|
rG||                    t          j	        |          dz   |z
            z  }t          j	        |          dz   }|dk    r|d         }|	r|||fS ||fS )NT)	rM   rN   n_informativer   biasnoiseshuffler   rP   rQ   r   r   )
r    r>   asarrayr]   r^   binomialr   copyr   abs)rM   rN   proportion_nonzeror!  r   r"  X_offsetr#  r$  r   positiverP   r5   rs   cmask	removed_Xs                    r6   _make_sparse_offset_regressionr/    s6    #!
 
 
GAq! QJsOOMA
	l++44Q8JAGTTWXX 	 IAteHIdOq		A 	QUU26!99q=1$%%%F1IIMQaD !Qwa4Kr8   zsolver, sparse_Xc              #   0   K   | ]\  }}|r|d v||fV  dS ))r+   ridgecvNr3   )r   rz   sparse_Xs      r6   	<genexpr>r3    sR        VX  $+CCC 

 DCCC r8   )r,   r.   r+   r-   r/   r1  z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r4  r}   )r   float64皙?seedr   c                 2   d}|dk    rdnd}t          dd||||          \  }}	t          |          }t          d|	                              ||	          }
|                    |d
          }|	                    |d
          }	|rt          j        |          }| dk    rt          |g          }nt          | d|          }|                    ||	           t          |j	        |
j	        dd           t          |j
        |
j
        dd           d S )Nr}   g?g      I@g     @@rU      )r"  rN   r)  r#  rP   rM   r*   )rz   rt   F)r'  r1  alphasr   )rz   r   rt   rS   r   rtol)r/  r(   r   r   astyper:   r;   r   r   r   r   )rz   r)  rM   dtyper2  r9  rt   r#  r5   rs   	svd_ridger   s               r6   test_solver_consistencyrC    s8   & E&,,DD%E)-  DAq 	QAU%00044Q::I	U##A	U##A M!w'''Ve<<<	IIaOOOEKt$GGGGE$i&:DQQQQQQr8   gcv_moder*   eigenX_constructorX_shape)r   r   )r   r   zy_shape, noise))r   r}   )r   rQ   r  )r   r        b@c           	         |\  }}t          |          dk    r|d         nd}t          |||dd|d          \  }	}
|
                    |          }
g d}t          |||d	
          }t          | ||          }|                    |	|
            ||	          }|                    ||
           |j        t          j        |j                  k    sJ t          |j	        |j	        d           t          |j
        |j
        d           d S )NrE   rR   rQ   r   Fr   rM   rN   r   rP   r$  r#  r!  rS   r5  r}         $@g     @@neg_mean_squared_errorcvr{   r=  scoring)rD  r{   r=  rS   r?  )r   r/  r   r   r   alpha_r   r   r   r   r   )rD  rF  rG  y_shaper{   r#  rM   rN   r   r5   rs   r=  	loo_ridge	gcv_ridgeX_gcvs                  r6   test_ridge_gcv_vs_ridge_loo_cvrZ    sI    $Iz"7||q00aI)  DAq 	
		'A(((F#(	  I #  I MM!QM!EMM%v}Y-=>>>>>>IOY_4@@@@I()*>TJJJJJJr8   c            	         d} d\  }}d}t          |||dddd          \  }}g d}t          |d	|| 
          }t          d	||           }|                    ||           |                    ||           |j        t	          j        |j                  k    sJ t          |j        |j        d           t          |j        |j        d           d S )Nexplained_variance)rU   r   rQ   r   Fr   rM  rN  TrQ  )r{   r=  rS  rS   rT  )	r/  r   r   rU  r   r   r   r   r   )	rS  rM   rN   r   r5   rs   r=  rW  rX  s	            r6   test_ridge_loo_cv_asym_scoringr]  1  s   "G!IzI)  DAq )((FD  I d67KKKIMM!QMM!Qv}Y-=>>>>>>IOY_4@@@@I()*>TJJJJJJr8   rN   r   r   zy_shape, fit_intercept, noise))rH  Tr}   )rI  Tg      4@)rJ  TrK  )rJ  Fr  c                 .   g d}t           j                            d          }t          |          dk    r|d         nd}t	          d||dd|          \  }	}
|
                    |          }
d	|                    t          |	                    z  }||                                z
  dz                       t                    }t          j
        t          j        |	j        d                   |          |                    t                    }|	         |
         }}t          |	j        d         
          }|                    ||          }t!          ||d|          }|                    ||           t%          |j        |          }|                    ||          }t)          ||||          }||z
  dz  fdt          j        |	j        d                   D             t          j                   ||	          }t!          |d| |          }|                    ||
|           t          |          dk    r-|j        d d d d |                    |j                  f         }n)|j        d d |                    |j                  f         }|j        t1          j        |j                  k    sJ t5          |d           t5          |j        |j        d           t5          |j        |j        d           d S )NrN  r   rE   rR   rQ   r   F)rM   rN   r   rP   r$  r#  r   )n_splits)groupsrP  )r=  rR  rS  r{   r   rR  c                 P    g | ]"}t          j        |k             d           #S )r   r   )r>   r   )r   iindiceskfold_errorss     r6   r   z1test_ridge_gcv_sample_weights.<locals>.<listcomp>  s>       78|GqL)222  r8   T)r=  store_cv_valuesrD  r{   r   rS   rT  )r>   r]   r^   r   r/  r   r   r\   r@  intrepeatr   r   r   r%   splitr   r   r   rU  r&   r%  
cv_values_indexr   r   r   r   r   )rD  rF  r{   rN   rV  r#  r=  rj   r   r5   rs   r   X_tiledy_tiledrR  splitskfold	ridge_regpredictionsrY  rX  
gcv_errorsrd  re  s                         @@r6   test_ridge_gcv_sample_weightsrs  O  s$    )((F
)


"
"C"7||q00aI)  DAq 	
		'A		#a&&)))M"]%6%6%8%881<DDSIIMi	!'!*--}==G!((//Mz1W:WG	QWQZ	(	(	(BXXgwwX77F(#	  E 
IIgwELFFFIXXgwwX77F#IwFKKKKk)a/L    <>Iagaj<Q<Q  L :l++LM!E#	  I MM%-M888
7||q)!!!QQQU\0J0J*JK

)!!!V\\%,-G-G*GH
<6=)9::::::J48888IOU[t<<<<I(%*:FFFFFFr8   sparsez2mode, mode_n_greater_than_p, mode_p_greater_than_n))Nr*   rE  )autor*   rE  )rE  rE  rE  )r*   r*   r*   c                     t          dd          \  }}| rt          j        |          }t          ||          |k    sJ t          |j        |          |k    sJ d S )Nr   rE   )rM   rN   )r    r:   r;   r   rb   )rt  modemode_n_greater_than_pmode_p_greater_than_nr5   rq   s         r6   test_check_gcv_mode_choicerz    sq     Q1555DAq M!1d##'<<<<<13%%)>>>>>>>r8   c                 $   t           j        d         }g }| t          k    }t          |          }|                     | t                     t
                     |j        }|                    |           t          }t          t          d          }t          d|          }  ||j                   | t                     t
                     |j        t          j        |          k    sJ d }	t          |	          }t          d|          }
  ||
j                   | t                     t
                     |
j        t          j        |          k    sJ t          d          }t          d|          }|                     | t                     t
                     |j        t          j        |          k    sJ | t          k    r\|                     | t                     t
          t          j        |                     |j        t          j        |          k    sJ t          j        t
          t
          f          j        }|                     | t                     |           |                     | t                               }|                     | t                     t
                     |                     | t                               }t)          t          j        ||f          j        |d	
           |S )Nr   r   F)greater_is_better)r{   rS  c                 $    t          | |           S r2   r   )xrs   s     r6   funcz_test_ridge_loo.<locals>.func  s    "1a((((r8   rP  r   h㈵>rT  )r   r   r7   r   r   r   rU  appendr
   r   r   r   r   r   r   r>   r   vstackrb   r   r   )filter_rM   retr{   	ridge_gcvrU  frS  
ridge_gcv2r  
ridge_gcv3scorer
ridge_gcv4r   Y_predrB   s                   r6   _test_ridge_loor    s    #I
C|+M666I MM''*%%z222FJJv 	A,FFFGug>>>JAAjnggj)):666f 5 55555) ) ) $Gug>>>JAAjnggj)):666f 5 55555 011Fuf===JNN77:&&
333f 5 55555 ,ggj)):RWYEWEWXXX6=#8#88888 		:z*++-AMM''*%%q)))wwz2233FMM''*%%z222wwz2233FBIvv.//16EEEEJr8   c                    t                      }|                     | t                    t                     |                     | t                               t          |j        j                  dk    sJ t          |j	                  t          j        k    sJ t          d          }|                    |           |                     | t                    t                     |                     | t                               t          |j        j                  dk    sJ t          |j	                  t          j        k    sJ d S )NrQ   r   ra  )r   r   r   r   r   r   r   r   typer   r>   r7  r$   
set_params)r  ridge_cvrR  s      r6   _test_ridge_cvr    s#   yyHLL$$j111WWZ(()))x~#$$))))#$$
2222	qB2LL$$j111WWZ(()))x~#$$))))#$$
222222r8   zridge, make_dataset)rf  c                 v     |dd          \  }}|                      ||           t          | d          rJ d S )N   r   rM   rP   rj  )r   hasattr)r   make_datasetr5   rs   s       r6   #test_ridge_gcv_cv_values_not_storedr    sI     <!"555DAq	IIaOOOul+++++++r8   rR  c                      |dd          \  }}|                      d|           |                     ||           t          | d          sJ t          | j        t
                    sJ d S )Nr  r   r  F)rf  rR  best_score_)r  r   r  r   r  r   )r   r  rR  r5   rs   s        r6   test_ridge_best_scorer     s{     <!"555DAq	Ur222	IIaOOO5-(((((e'///////r8   c            	      F  	 t           j                            d          } d\  }}}|                     ||          }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   |                     ||          z   d		fd	|j        D             }t          	d
                              |          }t          ||j
                   t          t          |j
                                      |          j        |j                   t          	d
d
                              |          }|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        |fk    sJ |j        j        |fk    sJ |j        j        ||dfk    sJ t          	d
d
                              |d d df                   }t          j        |j
                  sJ t          j        |j                  sJ |j        j        |t#          	          fk    sJ t          	d
d                              |          }t          ||j
                   t          t          |j
                                      |          j        |j                   t          	t'                      d
          }d}t)          j        t,          |          5  |                    |           d d d            n# 1 swxY w Y   t          	dd
          }t)          j        t,          |          5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr   )r   r   r   r   rQ   g?rE   rS   )rQ   r    c                 b    g | ]+}t                                         |          j        ,S )r<  )r   r   rU  )r   r   r5   r=  s     r6   r   z6test_ridge_cv_individual_penalties.<locals>.<listcomp>!  s7    UUUvgV,,,00F;;BUUUr8   T)r=  alpha_per_targetr   )r=  r  rf  r2)r=  r  rS  )r=  rR  r  z3cv!=None and alpha_per_target=True are incompatibler   r  )r>   r]   r^   r   r   r   rb   r   r   r	   rU  r   r   r   r   r  rj  r   isscalarr'   r   r   r   )
rj   rM   rN   r   rs   optimal_alphasr  msgr5   r=  s
           @@r6   "test_ridge_cv_individual_penaltiesr    s    )


#
#C (0$Iz9		)Y''A
qQCy"'1j/2233
&111qc6D27Az?#;#;;
<
<	=
&111qc6EBGQ
O$<$<<
=
=	> ))Iz
*
*	+  F VUUUUQRQTUUUN ft<<<@@AFFH~x777 HO$$$((A..4hn  
 ftTRRRVV	1 H ? YL0000%)5555$CKK(KKKKK a$MMMQQRSUVWWH? YL0000%)5555$Iq(AAAAA ftTRRRVV	1QQQT7 H ;x''''';x+,,,,,$CKK(@@@@@ ftTJJJNNqRSTTH~x777HO$$$((A..4hn   fNNNH
?C	z	-	-	-  Q              fTBBBH	z	-	-	-  Q                 s$   N::N>N>2PPPc                     t          d          }|                     | t                    t                     t	          j        |                     | t                    t                    d          S )NFr   r   )r   r   r   r   r>   roundr   )r  r   s     r6   _test_ridge_diabetesr  U  sZ    &&&E	IIggj!!:...8EKK
 3 3Z@@!DDDr8   c                 8   t          j        t          t          f          j        }t          j        d         }t          d          }|                     | t                    |           |j        j        d|fk    sJ |	                     | t                              }|                     | t                    t                     |	                     | t                              }t          t          j        ||f          j        |d           d S )NrQ   Fr   rE   r   decimal)r>   r  r   rb   r   r   r   r   r   r   r   )r  r   rN   r   r  rB   s         r6   _test_multi_ridge_diabetesr  [  s    
	:z*++-A!!$J&&&E	IIggj!!1%%%;J////]]77:..//F	IIggj!!:...]]77:..//Fbi(899;VQOOOOOOr8   c                    t          j        t                    j        d         }t          j        d         }t                      t                      fD ]}|                     | t                    t                     |j        j        ||fk    sJ |	                     | t                              }t          j
        t          |k              dk    sJ t          d          }t          |          }|                     | t                    t                     |	                     | t                              }t          j
        t          |k              dk    sJ d S )Nr   rQ   gHzG?r   ra  g?)r>   uniquey_irisr   X_irisr   r   r   r   r   r?   r$   )r  	n_classesrN   regrB   rR  s         r6   _test_ridge_classifiersr  i  s-   	&!!'*IaJ!!#4#6#67 0 0(((y9j"99999WWV__--wv'((4/////	qB
r
"
"
"CGGGGFOOV$$$[[))F76V#$$++++++r8   rS  accuracyr   r  c                     t          |          rt          |          n|}t          ||          }|                     | t                    t
                                         | t                               d S )N)rS  rR  )callabler   r   r   r  r  r   )r  rS  rR  scoring_clfs        r6   "test_ridge_classifier_with_scoringr  y  sm     (0'8'8E{7###gH
H
4
4
4CGGGGFOOV$$,,WWV__=====r8   c                 R   d }t          j        ddd          }t          |t          |          |          }|                     | t
                    t                     |j        t          j	        d          k    sJ |j
        t          j	        |d                   k    sJ d S )	Nc                     dS )NzG?r3   r@   s     r6   _dummy_scorez:test_ridge_regression_custom_scoring.<locals>._dummy_score  s    tr8   rE   r   )num)r=  rS  rR  r  r   )r>   logspacer   r   r   r  r  r  r   r   rU  )r  rR  r  r=  r  s        r6   $test_ridge_regression_custom_scoringr    s       [QA&&&F
6;|3L3LQS
T
T
TCGGGGFOOV$$$?fmD111111:vay11111111r8   c                    t          dd          }|                     | t                    t                     |                     | t                    t                    }t          dd          }|                     | t                    t                     |                     | t                    t                    }||k    sJ d S )Nr  F)r   r{   rS   )r   r   r   r   r   )r  r   r   ridge2score2s        r6   _test_tolerancer    s    d%000E	IIggj!!:...KK
++Z88Et5111F
JJwwz""J///\\''*--z::FF??????r8   c                 z     | t                     } | t                    }||t          ||d           d S d S d S )Nr   r  )r7   r<   r   )	test_func	ret_dense
ret_sparses      r6   check_dense_sparser    sT    	,''I=))J!7!)ZCCCCCC !7!7r8   r  c                 $    t          |            d S r2   )r  )r  s    r6   test_dense_sparser    s     y!!!!!r8   c                     t          j        ddgddgddgddgddgg          } g d}t          d           }|                    | |           t	          |                    ddgg          t          j        d	g                     t          d	d
i          }|                    | |           t	          |                    ddgg          t          j        dg                     t          d          }|                    | |           t	          |                    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           }|                    | |           t          d          }|                    | |           t          |j                  dk    sJ t          |j	        |j	                   t          |j
        |j
                   d S )N      r   皙r}   r   rQ   rQ   rQ   rR   rR   class_weightr8  rQ   rS   rR   balanced)rQ   rQ   rR   rR   rE   )r>   r   r   r   r	   r   r   classes_r   r   r   )r5   rs   r  regas       r6   test_class_weightsr    s   
4,q	D$<#sc3ZPQQAA
t
,
,
,CGGAqMMMs{{S$K=1128QC==AAA 5z
2
2
2CGGAqMMM s{{S$K=1128RD>>BBB z
2
2
2CGGAqMMMs{{S$K=1128QC==AAA 	4,q	D$<#sDEEAA
t
,
,
,CGGAqMMM
333DHHQNNNt}""""ci444cndo>>>>>r8   r  c                     |             }|                     t          j        t          j                    | d          }|                     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} |             }|                     t          j        t          j        |            | |          }|                     t          j        t          j                   t	          |j        |j                    |             }|                     t          j        t          j        |dz              | |          }|                     t          j        t          j        |           t	          |j        |j                   d	S )
z5Check class_weights resemble sample_weights behavior.r  r  rQ   r  r}   g      Y@)r   rQ   rE   rE   N)	r   irisdatar   r   r   r>   r   r   )r  reg1reg2r   r  s        r6   "test_class_weight_vs_sample_weightr    s   
 355DHHTY$$$3J'''DHHTY$$$
DJ/// GDK-..M$+"###s*###u--L355DHHTY]3333L)))DHHTY$$$
DJ/// 355DHHTY]A%56663L)))DHHTY]333
DJ/////r8   c                  n   t          j        ddgddgddgddgddgg          } g d}t          d g d          }|                    | |           t          d	d
ig d          }|                    | |           t	          |                    ddgg          t          j        dg                     d S )Nr  r   r  r}   r   r  )r   r5  rQ   )r  r=  rQ   rS   )r   r5  rQ   rU   gɿrE   rR   )r>   r   r   r   r	   r   )r5   rs   r  s      r6   test_class_weights_cvr    s    
4,q	D$<#sc3ZPQQAA
nnn
E
E
ECGGAqMMM !U<N<N<N
O
O
OCGGAqMMMs{{T1I;//2$@@@@@r8   rP  c                    t           j                            d          }d}d}|                    ||          }g d}t	          |          }t          |           rt          |           n| }t          |d d|          }|                    |          }	|                    ||	           |j	        j
        ||fk    sJ d}
|                    ||
          }	|                    ||	           |j	        j
        ||
|fk    sJ t          dd|           }t          j        t          d	
          5  |                    ||	           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r5  r}   rO  Tr=  rR  rf  rS  r   )rR  rf  rS  zcv!=None and store_cv_valuesr   )r>   r]   r^   r   r   r  r   r   r   rj  r   r   r   r   )rS  rj   rM   rN   r~  r=  n_alphasr  rrs   r   s              r6   test_ridgecv_store_cv_valuesr    s    )


#
#CIJ		)Z((AF6{{H'/'8'8E{7###gHv$hOOOA 			)AEE!QKKK<)X!66666 I		)Y''AEE!QKKK<)Y!AAAAA1dG<<<A	z)G	H	H	H  	a                 s   /EEEc                 F   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        |||fk    sJ t          j        g dg dg dg          	                                }|j        d
         }|                    ||           |j        j        |||fk    sJ d S )Nr  r   r  r}   r   r  r  Tr  rQ   )rQ   rR   rQ   rR   rQ   )rR   rR   rQ   rR   rR   )
r>   r   r   r   r  r   r   r   rj  	transpose)	rS  r~  rs   rM   r=  r  r  r  r   s	            r6   (test_ridge_classifier_cv_store_cv_valuesr  +  sV   
4,q	D$<#sc3ZPQQA
"""##A
IF6{{H'/'8'8E{7###gH$h	 	 	A
 IEE!QKKK<)Y!AAAAA 				---/B/B/BC	 	ikk  
IEE!QKKK<)Y!AAAAAAAr8   	Estimatorc                    t           j                            d          }d}d\  }}| t          u r|                    |          }n|                    dd|          }|                    ||          } | |          }|j        |u sJ d| j         d            |                    ||           t          |j        t          j
        |                     d S )Nr   r  r   r   rE   r<  z`alphas` was mutated in `z
.__init__`)r>   r]   r^   r   r   randintr=  __name__r   r	   r%  )r  rj   r=  rM   rN   rs   r5   	ridge_ests           r6   test_ridgecv_alphas_conversionr  H  s    
)


"
"CF IzGIIi  KK1i((		)Z((A	(((IF"""A9#5AAA 	#"" MM!Qy'F););<<<<<r8   c                  .   t           j                            d          } d}dD ]\  }}|                     |          }|                     ||          }d|                     |          z   }t          d          }t          ||          }|                    |||           d|i}	t          t                      |	|	          }
|
                    |||           |j
        |
j        j        k    sJ t          |j        |
j        j                   d S )
Nr   r  )r  r   r   r}   r   )r=  rR  r   rt   ra  )r>   r]   r^   r   randr$   r   r   r#   r   rU  best_estimator_rt   r   r   )rj   r=  rM   rN   rs   r5   r   rR  r1  
parametersgss              r6   test_ridgecv_sample_weightr  ]  s   
)


"
"CF "3 K K	:IIi  IIi,,chhy1111XXB///Aq666 v&
%'':"555
q!=111~!3!99999!'-1C1IJJJJK Kr8   c                  @   ddg} ddg}t           j                            d          }t          | |          D ]_\  }}|                    ||          |                    |          |                    |          dz  dz   }d}d}|d d t           j        f         |t           j        d d f         t          d                              |                               |                               |           fd}fd	}	d
}
t          j	        t          |
          5   |             d d d            n# 1 swxY w Y   d
}
t          j	        t          |
          5   |	             d d d            n# 1 swxY w Y   ad S )NrE   r   r   rQ   r}   g       @r   c                  6                                     d S r2   r   )r5   r   sample_weights_not_OKrs   s   r6   fit_ridge_not_okzStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok  s     IIa122222r8   c                  6                                     d S r2   r  )r5   r   sample_weights_not_OK_2rs   s   r6   fit_ridge_not_ok_2zUtest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2  s     IIa344444r8   z)Sample weights must be 1D array or scalarr   )r>   r]   r^   r   r   r   r   r   r   r   r   )
n_samplessn_featuressrj   rM   rN   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r  r  r   r5   r   r  r  rs   s              @@@@@r6   9test_raises_value_error_if_sample_weights_greater_than_1dr  u  ss    QJa&K
)


#
#C!$Z!=!= ! !	:IIi,,IIi  IIi00A59!! 1!!!RZ- @"3BJM"BA 			!Q)***		!Q+,,,		!Q+,,,	3 	3 	3 	3 	3 	3 	3 	3	5 	5 	5 	5 	5 	5 	5 	5 >]:W555 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 >]:W555 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!7! !s$   ;EE	E	:FF	F	c                  z   ddg} ddg}t           j                            d          }t          j        t          j        t          j        t          j        t          j        g}t          dd          }t          dd          }t          | |          D ]\  }}|                    ||          }|                    |          }	|                    |          dz  dz   }
|D ]Y} ||          }|                    ||	|
           |                    ||	|
           t          |j        |j        d	
           Zd S )NrE   r   r   r}   Fr   rQ   r   r  r  )r>   r]   r^   r:   
coo_matrixr;   
csc_matrix
lil_matrix
dok_matrixr   r   r   r   r   r   )r  r  rj   sparse_matrix_converterssparse_ridgedense_ridgerM   rN   r5   rs   sample_weightssparse_converterr  s                r6   &test_sparse_design_with_sample_weightsr    sY    QJa&K
)


#
#C 	



  s%888Lc777K!$Z!=!= 	X 	X	:IIi,,IIi  9--2Q6 8 	X 	X''**HXqGGGOOAqO???%l&8+:KUVWWWWW	X		X 	Xr8   c                      t          j        ddgddgddgddgddgg          } g d}t          d          }|                    | |           d S )	Nr  r   r  r}   r   r  )rQ   rU   r  r<  )r>   r   r   r   )r5   rs   r   s      r6   test_ridgecv_int_alphasr    sb    
4,q	D$<#sc3ZPQQAA <(((E	IIaOOOOOr8   zparams, err_type, err_msgr=  )rQ   rR   iz alphas\[1\] == -1, must be > 0.0)gr  g      $z"alphas\[0\] == -0.1, must be > 0.0)rQ   r}   1z1alphas\[2\] must be an instance of float, not strc                    d\  }}t                               ||          }t                               dd|          }t          j        ||          5   | di |                    ||           ddd           dS # 1 swxY w Y   dS )z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.r  r   rE   r   Nr3   )rj   r   r  r   r   r   )r  rI   err_typer   rM   rN   r5   rs   s           r6   test_ridgecv_alphas_validationr    s    ( !Iz		)Z((AAq)$$A	xw	/	/	/ & &	F1%%%& & & & & & & & & & & & & & & & & &s   A==BBc                    d\  }}t                               ||          }| t          u rt                               |          }nt                               dd|          } | d                              ||           dS )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   rE   rQ   r<  N)rj   r   r   r  r   )r  rM   rN   r5   rs   s        r6   test_ridgecv_alphas_scalarr    s}     !Iz		)Z((AGIIi  KK1i((IQAq!!!!!r8   c                  :     dt            dz   fdd S )Nz5This is not a solver (MagritteSolveCV QuantumBitcoin)zQKnown solvers are 'sparse_cg', 'cholesky', 'svd' 'lsqr', 'sag' or 'saga'. Got %s.c                      t          j        d          } t          j        d          }t          | |d           t	          j                  5                d d d            d S # 1 swxY w Y   d S )Nr   r}   r   r   )r>   eyer   r   r   r   )r5   rs   	exceptionr  messagewrong_solvers     r6   r  z=test_raises_value_error_if_solver_not_supported.<locals>.func  s    F1IIGAJJAS>>>>]9G444 	 	DFFF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A++A/2A/)r   )r  r  r  r  s   @@@@r6   /test_raises_value_error_if_solver_not_supportedr    sW     KLI	,.:	; 
         r8   c                      t          dd          } |                     t          t                     | j        j        d         t          j        d         k    sJ d S )Nr+   rQ   )rz   r   r   )r   r   r   r   r   r   )r  s    r6   test_sparse_cg_max_iterr    sP    
{Q
/
/
/CGGJ
###9?1!1!!4444444r8   c            	         d} t           t          }}t          j        || df          j        }t          dd          D ]W}dD ]R}t          ||d          }|                    ||           t          |j	        t          j        ||                      SXdD ]3}t          |dd          }|                    ||           |j	        J 4d S )	NrE   rQ   rL   )r.   r/   r-   r   )rz   r   r   )r+   r*   r,   r5  )
r   r   r>   tilerb   ranger   r   r	   n_iter_)r   r5   rs   y_nr   rz   r  s          r6   test_n_iterr#    s     IzqA
'!i^
$
$
&C!QKK J J- 	J 	JFveDDDCGGAsOOOs{BGHi,H,HIIII	J
 3 # #6A48883{""""# #r8   )r-   r+   lbfgsru  with_sample_weightc                    | dk    }t          d||          \  }}d}|rCt          j                            |          }d|                    |j        d                   z   }| dk    rd	n| }t          |d
|          }	t          | d
|          }
|	                    |||           |
                    t          j	        |          ||           t          |	j        |
j                   t          |	j        |
j        d           dS )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   )rN   rP   r+  Nr}   r   rZ   ru  r+   r   )rz   r   r+  r   gƠ>rT  )r/  r>   r]   r^   r`   r   r   r   r:   r;   r   r   r   )rz   r%  rg   r+  r5   rs   r   rj   dense_solverr	  r  s              r6   test_ridge_fit_intercept_sparser(     s"     H)$6  DAq M ;i##$677ckkqwqzk::: #)F"2"2;;L|JJJKEHEEELOOAqO666R]1%%qFFFK*L,CDDDK%|'9EEEEEEr8   )r/   r*   r,   c                 4   t          dd          \  }}t          j        |          }t          |           }d                    |           }t          j        t          |          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nr   r   )rN   rP   rz   zsolver='{}' does not supportr   )	r/  r:   r;   r   formatr   r   r   r   )rz   r5   rs   X_csrr  r   s         r6   %test_ridge_fit_intercept_sparse_errorr-  F  s    )RaHHHDAqM!E'''L,33F;;G	z	1	1	1 # #"""# # # # # # # # # # # # # # # # # #s   )BBBc                 R   t          dd|d          \  }}| rDt          j                            |          }d|                    |j        d                   z   }nd }t          j        |          }t          ddd	d
d          }t          di |}t          di |}	|
                    |||           t          j                    5  t          j        dt                     |	
                    |||           d d d            n# 1 swxY w Y   t          |j        |	j        d           t          |j        |	j        d           t%          j        t          d          5  t          dd	dd           
                    ||           d d d            d S # 1 swxY w Y   d S )Nr   r   g      @)rN   rM   rP   r*  r}   r   rZ   r.   Tr   r   )rt   rz   r{   r   r   r   error-C6?rT  z"sag" solver requires.*r   rS   )rz   r{   r   r   r3   )r/  r>   r]   r^   r`   r   r:   r;   r   r   r   warningscatch_warningssimplefilterUserWarningr   r   r   r   r   )
r%  rg   r5   rs   rj   r   r,  rI   r	  r  s
             r6   #test_ridge_fit_intercept_sparse_sagr5  P  s`   )1Cc  DAq  i##$677ckkqwqzk:::M!E%t  F //&//K??6??LOOAqO666		 	"	" @ @g{333???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ K*L,C$OOOOK%|'9EEEE	k)B	C	C	C W WU$D4HHHLLUTUVVVW W W W W W W W W W W W W W W W W Ws$   
3D		DD'(FF #F return_interceptr   r  arr_type)ru  r+   r,   r-   r.   r/   r$  c                 0   t          d          }|                    dd          }g d}t          j        ||          }d}| rd}||z  } ||          }	d\  }
}t          rdnd	}|d
k    }|dvrN| rLt          j        t          d          5  t          |	||
||| ||           ddd           n# 1 swxY w Y   dS t          |	||
|||| |          }| r-|\  }}t          ||d|           t          ||d|           dS t          ||d|           dS )z=check if all combinations of arguments give valid estimationsr   r  r   )rQ   rE   r5  r   g     @)rS   ư>rS   r0  r$  )r.   ru  zIn Ridge, only 'sag' solverr   )rt   rz   r   r6  r+  r   N)rt   rz   r   r+  r6  r   r   r?  r   )
r)   r  r>   r   r   r   r   r   r   r   )r6  r   r7  rz   rj   r5   
true_coefsrs   true_intercept	X_testingrt   r   r   r+  outr   r   s                    r6   .test_ridge_regression_check_arguments_validityr?  k  s    R
 
 CqAJ
q*AN ! AIJE3&44$D H_$$)9$]:-JKKK 
	 
	+!1!	 	 	 	
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 	
	#)	 	 	C  <ijqt<<<<	>EEEEEEZad;;;;;;s   B00B47B4)r*   r+   r,   r-   r.   r/   r$  c                 V   t           j                            d          }d}| dk    }d\  }}|                    ||          }|                    |          }|                    t           j                  }|                    t           j                  }	dt          j        t           j                  j        z  }
t          || d|
|          }|	                    ||	           |j
        }t          || d|
|          }|	                    ||           |j
        }|j        |j        k    sJ |j        |j        k    sJ |                    |          j        |j        k    sJ |                    |          j        |j        k    sJ t          |j
        |j
        dd	
           d S )Nr   r}   r$  r  rE     )rt   rz   r   r   r+  r0  gMb@?r:  )r>   r]   r^   r   r@  r4  finfo
resolutionr   r   r   rA  r   r   )rz   rj   rt   r+  rM   rN   X_64y_64X_32y_32r   ridge_32coef_32ridge_64coef_64s                  r6   test_dtype_matchrL    s    )


"
"CE H Iz99Y
++D99YD;;rz""D;;rz""D
bhrz""-
-CFScH  H LLtnG FScH  H LLtnG =DJ&&&&=DJ&&&&D!!'4:5555D!!'4:5555HNHNDIIIIIIr8   c                     t           j                            d          } t          j        ddg          }d\  }}}|                     ||          }|                     ||          }|                    t           j                  }|                    t           j                  }t          |d          }	|	                    ||           |	j	        }
t          |d          }|                    ||           |j	        }|
j
        |j
        k    sJ |j
        |j
        k    sJ |	                    |          j
        |j
        k    sJ |                    |          j
        |j
        k    sJ t          |	j	        |j	        d           d S )	Nr   r}   r   )r  r  rE   r,   r   r   r  )r>   r]   r^   r   r   r@  r4  r   r   r   rA  r   r   )rj   rt   rM   rN   n_targetrD  rE  rF  rG  rH  rI  rJ  rK  s                r6   test_dtype_match_choleskyrO    su    )


"
"CHc3Z  E&-#Iz899Y
++D99Y))D;;rz""D;;rz""D 5444HLLtnG 5444HLLtnG =DJ&&&&=DJ&&&&D!!'4:5555D!!'4:5555BBBBBBr8   )r*   r,   r-   r+   r.   r/   r$  c                    t           j                            |          }d\  }}|                    ||          }|                    |          }t          j        ||          d|                    |          z  z   }d}| dk    }	t                      }
| dk    rdnd}t           j        t           j        fD ]E}t          |	                    |          |	                    |          || |d |	dd	d
d
          |
|<   F|
t           j                 j
        t           j        k    sJ |
t           j                 j
        t           j        k    sJ t          |
t           j                 |
t           j                 |           d S )Nr  r   r}   r$  r+   rS   r  rA  r   F)	rt   rz   rP   r   r+  r   r   return_n_iterr6  r   )r>   r]   r^   r   r   r   r4  r7  r   r@  rA  r   )rz   r9  rP   rM   rN   r5   r   rs   rt   r+  resultsr   current_dtypes                r6   %test_ridge_regression_dtype_stabilityrT    sq   
 9((..L Iz9j11Aj))D
q$$!3!3I!>!>>>AE HffG [((44dD*bj1 
 
!1HH]##HH]##%""
 "
 "
 2:$
22222:$
2222GBJ')<4HHHHHHr8   c                      t          d          \  } }t          j        |           } | d d dd d f         } |d d d         }t          d                              | |           d S )Nr   rP   rE   r.   r*  )r    r>   asfortranarrayr   r   )r5   rs   s     r6   test_ridge_sag_with_X_fortranrX    ss    +++DAq
!A	##A#qqq&	A	##A#A	Aq!!!!!r8   zClassifier, paramsc                    t          dd          \  }}|                    dd          }t          j        ||gd          } | d	i |                    ||          }|                    |          }|j        |j        k    sJ t          |dddf         |dddf                    t          d                              ||           dS )
zRCheck that multilabel classification is supported and give meaningful
    results.rQ   r   )r  rP   rR   r   Nr.   r*  r3   )	r"   r   r>   r   r   r   r   r	   r   )
ClassifierrI   r5   rs   r   r  r  s          r6   test_ridgeclassifier_multilabelr[    s     *AAFFFDAq			"aA
1vA&&&A
*

v


"
"1a
(
(C[[^^F<17""""vaaad|VAAAqD\222	Aq!!!!!r8   ru  r$  )rS   r   r5  r}   c                 f   t          j        ddgddgddgddgg          }t          j        dd	g          }|rd
}|                    |          |z   }n|                    |          }t          |d| |          }|                    ||           t          j        |j        dk              sJ dS )z:Test that positive Ridge finds true positive coefficients.rQ   rE   r   rL   r   r  r  r   rT   r   Trt   r+  rz   r{   r   N)r>   r   r   r   r   r_   r   )rz   r{   rt   r5   r   r   rs   r   s           r6   #test_ridge_positive_regression_testr^  /  s    
 	1a&1a&1a&1a&122A8QHD 	EE$KK)#EE$KKd6  E 
IIaOOO6%+"#######r8   c                    t           j                            d          }|                    dd          }|                    dd|j        d                   }| rd}||z  |z   }n||z  }||                    |j        d                   d	z  z  }g }d
D ]C}t          ||| d          }	|                    |		                    ||          j
                   Dt          |ddd dS )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  r5  r}   rQ   rZ   r   r   )TFr   )rt   r+  r{   r   r9  r>  N)r>   r]   r^   r   r`   r   ra   r   r  r   r   r   )
r{   rt   rj   r5   r   r   rs   rR  r+  r   s
             r6   %test_ridge_ground_truth_positive_testra  C  s    )


#
#C		#sA;;sCagaj;11D 	Hy H	$	$t	++AG! . .(-U
 
 
 	uyyA,----W4a000000r8   )r*   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  |                    ||           ddd           n# 1 swxY w Y   t          j        t
          d          5  t          |||d| d          \  }}ddd           dS # 1 swxY w Y   dS )z5Test input validation for positive argument in Ridge.r5  rQ   rE   r   rL   rR   TFr]  zdoes not support positiver   Nzonly 'lbfgs' solver can be used)r+  rz   r6  )r>   r   r   r   r   r   r   r   )rz   rt   r5   r   rs   r   rq   s          r6   test_ridge_positive_error_testrc  ^  st   
 E
1a&1a&!""A8QGD	DAV5QQQE	z)D	E	E	E  		!Q               
z)J	K	K	K 
 
q%$v
 
 
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s$   &B		BB/CCCc                 j   	
 t          ddd          \  	
d d}d	 
fd	}t           	                              	
          }t           d
                              	
          } ||          } ||          }||k    sJ t          |          D ]} |||          }||k    sJ dS )z?Check ridge loss consistency when positive argument is enabled.r`  r   rM   rN   rP   r5  r  Nr   c                 :   | j         }|Jt          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   rZ   r   rE   )r   r>   r]   r^   r   r`   r   r   )	r   rP   noise_scaler   rj   r   r5   rt   rs   s	         r6   
ridge_lossz,test_positive_ridge_loss.<locals>.ridge_lossy  s    $	#)''55C;Q%+BS!T!TTDD;DRVQT\I5!;<<<sU{RV!GN
 N
 @
 
 	
r8   r   T)rt   r+  rV  )Nr   )r    r   r   r   )rt   n_checksrh  r   model_positivelossloss_positiverP   loss_perturbedr5   rs   s   `        @@r6   test_positive_ridge_lossrn  r  s    SSrJJJDAqEH

 

 

 

 

 

 

 

 ""1a((E666::1a@@N
 :eDJ~..M=     h / /#NNNN...../ /r8   c                     t          ddd          \  }}t          j        |d          }t          j        | g          } dddd}t	          ||| fi |}t          |||           }t          ||d	d
           dS )zETest that LBGFS gets almost the same coef of svd when positive=False.r`  r   re  rQ   FgؗҜ<i  )r+  r   r   r0  r   r>  N)r    r>   expand_dimsr%  r   r   r   )rt   r5   rs   config
coef_lbfgsr   s         r6   test_lbfgs_solver_consistencyrs    s     SSrJJJDAq
q!AJwE F aE44V44Jq!U++MJDqAAAAAAr8   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  |                    | |           ddd           dS # 1 swxY w Y   dS )z1Test that LBFGS solver raises ConvergenceWarning.rQ   rR   g    _g    _Br   r$  Fr   T)rt   rz   r{   r   r+  r   zlbfgs solver did not converger   N)r>   r   r   r   r   r   r   )r5   rs   r   s      r6   test_lbfgs_solver_errorru    s    
1b'Aq6"##A
%A  E 
(0O	P	P	P  		!Q                 s   !BB	B	)r,   r-   r+   r*   r.   r/   r$  c                    t          d| d| dk              }t          di |}|j        j        }t	          ||d           t	          ||d           t
          j                            d          }t          d	d
dd|          \  }}|	                    dd|j
        d                   }t          j        ||gd          }t          j        ||gd          }	t          j        ||gd          }
t          di |                    ||d|z            }t          di |                    ||	|
          }t          |j        |j                   t          |j        |j                   dS )zTest that Ridge fulfils sample weight invariance.

    Note that this test is stricter than the common test
    check_sample_weights_invariance alone.
    r}   r   r$  )rt   rz   r   r+  r   )kindzerosr   r  r`  rU   2   )rM   rN   rO   r!  rP   r   rE   r   rV   r   r   Nr3   )r   r   	__class__r  r   r>   r]   r^   r    r`   r   r   r   r   r   r   )rz   rI   r  namerj   r5   rs   r   X_dupy_dupsw_dup	ridge_2sw	ridge_dups                r6   #test_ridge_sample_weight_invariancer    s    G#	  F //&//C=!D#D#F;;;;#D#G<<<<
 )


#
#C  DAq 
AAGAJ	7	7BNAq6***ENAq6***E^RH1---F##AqB#??I##E5#GGIIOY_555I()*>?????r8   )r  r  r   rU   rQ   r  r  r  TFFN)numpyr>   scipy.sparsert  r:   scipyr   	itertoolsr   r   r1  sklearn.utilsr   sklearn.utils._testingr   r   r   r	   r
   sklearn.utils.estimator_checksr   sklearn.exceptionsr   sklearnr   sklearn.metricsr   r   r   sklearn.linear_modelr   r   r   sklearn.linear_model._ridger   r   r   r   r   r   r   r   r   r   sklearn.datasetsr   r    r!   r"   sklearn.model_selectionr#   r$   r%   r&   r'   sklearn.preprocessingr(   r)   SOLVERSr   r   load_diabetesdiabetesr  r   r   r   r   r   indr]   r^   rj   r$  	load_irisr  r;   r  r  r7   r<   rC   rF   fixturery   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r/  rC  r%  rZ  r]  rs  rz  r  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-  r5  r   r   r?  rL  rO  r   rT  rX  r[  r^  ra  rc  rn  rs  ru  r  r3   r8   r6   <module>r     s                           # # # # # # 6 6 6 6 6 6 2 2 2 2 2 2 < < < < < < 5 5 5 5 5 5 2 2 2 2 2 2 J J J J J J 1 1 1 1 1 1       . . . . . . ' ' ' ' ' ' & & & & & & 1 1 1 1 1 1 1 1 1 1 1 1 & & & & & & 1 1 1 1 1 1 ( ( ( ( ( ( 0 0 0 0 0 0 2 2 2 2 2 2 7 7 7 7 7 7 > > > > > > 2 2 2 2 2 2 4 4 4 4 4 4 7 7 7 7 7 7 8 8 8 8 8 8 1 1 1 1 1 1 , , , , , , 0 0 0 0 0 0 ; ; ; ; ; ; 0 0 0 0 0 0 ) ) ) ) ) ) . . . . . . 5 5 5 5 5 5 / / / / / / . . . . . . , , , , , , B 4 #S  !8!##! 
Jbi
 #$$iA C   	$3$i#C*S/ 
Jx	ty	!	!	    % % %+ + + '(((C& C& )(C&L 7++4-88'8 '8 98 ,+'8T 7++4-88#? #? 98 ,+#?L 7++4-88%2 %2 98 ,+%2P 7++4-882+ 2+ 98 ,+2+j 7++4-8828 28 98 ,+28j 7++4-882+ 2+ 98 ,+2+j 7++4-88T5M223+..*' *' /. 32 98 ,+*'Z+ + +
 
 
4 4 4<> > >$0 0 0*  @ "2"2"233
D 
D 43
D "N"N"NOO*T5M::. . ;: PO.$ "N"N"NOO*T5M::3 3 ;: PO3& 	
	* * * *Z  ")'GGGDM#
 #
  
 
 (FFF  1..R R /.	 
 
 RB eW%5662:r}*EFFWh$7884-88   $K $K  98 98 GF 76$KNK K K< eW%5662:r}*EFF2w//#   9G 9G  0/ GF 769Gx D%=118   ? ?  21?3 3 3l3 3 3" 		'	'	'9		5	1	1	13FG , , , gii!$5$5$7$79L#MN  ay))0 0 *)	 
0D D DNE E EP P P, , ,  T:7I$JKKeeAhh/00\=$ABB> > CB 10 LK> eeAhh/00\=$ABB2 2 CB 102	 	 	D D D "
 
" "
 
" ?  ?  ?F 2C DEE0 0 FE08A A A .0LM   : T:7I$JKKB B LKB8 w0A&BCC= = DC=(K K K0$! $! $!NX X X>   w0A&BCC
M	"J0ST*+1	
 }%@	
  & &!  DC"& w0A&BCC" " DC""  *5 5 5 # # #$ #I#I#IJJ-e}==!F !F >= KJ!FH #>#>#>??# # @?# -e}==W W >=W4 +eT];;4*?@@bh%>??OOO 4< 4<  @? A@ <;4<n NNN J J JDC C C< NNN  q**I I +* I@" " " 	"	T4L)	T1I& " " " FG#4554-88"8"8"899$ $ :9 98 65$" 4-88"8"8"8991 1 :9 9812 EEE 
 
 
" "8"8"899"/ "/ :9"/J "8"8"899B B :9B   " NNN %@ %@ %@ %@ %@r8   