a
    h@                    @   s"  d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZH g dZIdZJdZKe
L ZMeMjNeMjO ZPZQeRePjSd  ZTejUVd ZWeWXeT eTdd ZTePeT eQeT  ZPZQe
Y ZZeZjNeZjO Z[Z\dd Z]dd Z^ej_ddgddd Z`ejabd eIejabd!d"d#gd$d% Zcejabd eIejabd!d"d#gd&d' Zdejabd eIejabd!d"d#gd(d) Zeejabd eIejabd!d"d#gd*d+ Zfejabd eIejabd!d"d#gd,d- Zgejabd eIejabd!d"d#gd.d/ Zhejabd eIejabd!d"d#gejabd0dgeF ejabd1d2d3gd4d5 Zid6d7 Zjd8d9 Zkd:d; Zld<d= Zmd>d? Znd@dA ZoejabdBg dCejabdDeFdEdF ZpejabdGg dHejabdId"d#gejabdDeFdJdK ZqejabdGg dHejabdId"d#gejabdDeFdLdM ZrddTdUZsejabdVdWdX eg dYdgeF D ejabdZg d[ejabd\eRd]d^d_ Ztejabd`dadbgejabdcejugeF ejabdddedfgejabd!d"d#gejabdgg dhdidj Zvdkdl Zwejabd`dadbgejabdcejugeF ejabdmdndogejabdpg dqdrds Zxejabd0dgeF ejabdtg dudvdw Zydxdy Zzdzd{ Z{ejabd|ed#d}efed#d}efgd~d Z|ejabd|e efe efgejabddd]gdd Z}dd Z~dd Zdd Zdd Zejabddde]gejabdde*dgejabd0dgeF dd Zejabdde*dgejabd0dgeF dd Zdd Zdd Zejabde5 ejajbdeAege8dejajbdedadge8ddd Zejabde6d#ddd Zejabdee2dd Zejabdeze{eeeefejabdDeFdd Zdd Zejabdeefdd Zdd Zejabddde^gdd Zejabddde]gdd Zejabdeegdd Zejabddd]gejabdeegdd Zdd Zdd Zejabddd]gd]dggejabd0eDeE eF eG eH dd Zdd Zejabdeegejabdddiedfddiedfddiedfgddʄ Zejabdeegdd̄ Zdd΄ Zejadϡddф Zejabd g dҢejabdd"d#gejabdDeFddՄ Zejabd g d֢ejabdDeFdd؄ Zejabdd"d#gejabdDeFddڄ Zejabdd#d"gejabddedݡgejabdejgeF ejabd g dߢdd Zejabd g ddd Zdd Zejabd g dejabd\edQdd Zdd Zejabdei feddifedd]ifgdd Zejabd ddgejabd!d"d#gejabd1g ddd Zejabd!d"d#gejabd1g ddd Zejabd g ddd Zejabd1g ddd Zejabd1g ddd Zdd Zejabd!d#d"gejabd0dgeF ejabdd dgejabd eIdg dd Zdd Zdd Zejabdd#d"gejabd!d#d"gejabddQdgdd	 Zd
d Zdd Zejabdeege	d"ddd Zejabde efe efge	d"ddd ZdS (      N)product)linalg)config_contextdatasets)clone)make_classificationmake_low_rank_matrixmake_multilabel_classificationmake_regression)ConvergenceWarning)LinearRegressionRidgeRidgeClassifierRidgeClassifierCVRidgeCVridge_regression)_check_gcv_mode	_RidgeGCV_solve_cholesky_solve_cholesky_kernel_solve_lbfgs
_solve_svd_X_CenterStackOp)
get_scorermake_scorermean_squared_error)GridSearchCV
GroupKFoldKFoldLeaveOneOutcross_val_predict)minmax_scale)check_random_state)_NUMPY_NAMESPACE_NAMES_atol_for_type_convert_to_numpy)yield_namespace_device_dtype_combinationsyield_namespaces)_get_check_estimator_ids)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)_array_api_for_tests check_array_api_input_and_values)	_IS_32BITCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)svd	sparse_cgcholeskylsqrsagsaga)r7   r:   )r7   r8   r9   r:   r;      c                 K   s   t | |kS N)npmeany_testy_predkwargs rD   a/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callableX   s    rF   c                 C   s   | | d   S )N   )r?   )rA   rB   rD   rD   rE   _mean_squared_error_callable\   s    rH   longZwide)paramsc                 C   s  |j dkrd\}}nd\}}t||}tj| }t||||d}d|dddf< t|\}}}	t|dkstJ |ddd|f |dd|df  }
}|	d|ddf |	|dddf  }}|j dkr
|j	d	d
|d}|| }|||j
|| dd  7 }n.|j	d	d
|d}|jtd|  |
j | }d}|t| }d|d< t|j| | |j| }|||  }|||  }tj|tj|k sJ ||||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.
    rI   )      )rL   rK   )	n_samples
n_featuresZeffective_rankrandom_state   NMbP?
   lowhighsizerX   rG   r   )rQ   rQ   )paramminr>   randomRandomStater   r   r6   alluniformnormalTZdiagidentityZsolvenorm)global_random_seedrequestrM   rN   krngXUsZVtZU1ZU2ZVt1_Zcoef_olsyalphadZ
coef_ridgeZR_OLSZR_RidgerD   rD   rE   ols_ridge_dataset`   s6    


**ro   solverfit_interceptTFc                 C   s  |\}}}}d}t |d| | dv r$dnd|d}	|t| }
|||  }dt|d t|
d   }tf i |	}|d	d	d	d
f }|r|d
 }n ||jdd }||  }d}||| |d	d
 }|jt|ksJ t	|j
| |||t|ksJ tf i |	j||t|jd d}|jt|ksHJ t	|j
| |||t|kspJ |j| ksJ 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瞯<绽|=rm   rq   rp   tolrO   rP   rG   NrQ   r   axissample_weight)dictr>   r?   sumr   fit
intercept_pytestapproxr)   coef_scoreonesshapeZsolver_)rp   rq   ro   rd   rh   rl   rk   coefrm   rJ   Zres_nullZ	res_RidgeZR2_Ridgemodel	interceptrD   rD   rE   test_ridge_regression   s:    	 
&r   c                 C   s   |\}}}}|j \}}	d}
t|
d || | dv r2dnd|d}|ddddf }d	tj||fd
d }tj|t||	d
 ksJ |r|d }n ||jdd }||  }d}||| |dd }|j	t
|ksJ t|jtj||f d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.
    rr   rG   rs   rt   ru   rv   NrQ         ?rP   rx   r   :0yE>atol)r   r   r>   concatenater   matrix_rankr[   r?   r~   r   r   r   r)   r   r_rp   rq   ro   rd   rh   rl   rk   r   rM   rN   rm   r   r   rD   rD   rE    test_ridge_regression_hstacked_X   s,    

r   c                 C   s   |\}}}}|j \}}	d}
td|
 || | dv r2dnd|d}|ddddf }tj||fd	d
}tj|t||	ks|J tj||f }|r|d }n ||jd	d
 }||  }d	}|	|| |dd }|j
t|ksJ t|j|d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.
    rr   rG   rs   rt   ru   rv   NrQ   r   rx   r   r   )r   r   r>   r   r   r   r[   r   r?   r~   r   r   r   r)   r   r   rD   rD   rE    test_ridge_regression_vstacked_X   s.    

r   c                 C   s<  |\}}}}|j \}}	d}
t|
|| | dv r.dnd|d}tf i |}|rt|ddddf }|d }|dd }nd}||| ||	ks|s|jt|ksJ t|j| nt|	|| t|| | | t
jt
j|j|jf t
jt
j||f ks
J tjdd	 |jt|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   rs   rt   ru   rv   NrQ   1Ridge does not provide the minimum norm solution.reason)r   r|   r   r~   r   r   r   r)   r   predictr>   r   rc   r   xfail)rp   rq   ro   rd   rh   rl   r   rk   rM   rN   rm   rJ   r   r   rD   rD   rE   !test_ridge_regression_unpenalized'  s8    
r   c                 C   sr  |\}}}}|j \}}	d}
t|
|| | dv r.dnd|d}|rf|ddddf }|d }|dd }nd}dtj||fd	d
 }tj|t||	ksJ ||| ||	ks|s|jt	
|ksJ | dkrt	  t|jtj||f  nt||| tjtj|j|jf tjtj|||f ks6J t	jdd |jt	
|ksXJ 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   rs   rt   ru   rv   NrQ   r   rP   rx   r8   r   r   )r   r   r>   r   r   r   r[   r~   r   r   r   skipr)   r   r   r   rc   r   rp   rq   ro   rd   rh   rl   r   rk   rM   rN   rm   r   r   rD   rD   rE   ,test_ridge_regression_unpenalized_hstacked_X^  s<    
r   c                 C   sV  |\}}}}|j \}}	d}
t|
|| | dv r.dnd|d}|rf|ddddf }|d }|dd }nd}tj||fdd}tj|t||	ksJ tj||f }||| ||	ks|s|j	t
|ksJ t|j| ntt||| tjtj|j	|jf tjtj||f ks$J t
jd	d
 |j	t
|ksFJ 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   rs   rt   ru   rv   NrQ   rx   r   r   )r   r   r>   r   r   r   r[   r   r~   r   r   r   r)   r   r   rc   r   r   rD   rD   rE   ,test_ridge_regression_unpenalized_vstacked_X  s:    
r   sparse_containerrm   rr   {Gz?c                 C   sD  |dur2|r| t vrt  n|s2| tvr2t  |\}}}}	|j\}
}tjdd|
d}t||| | dv rldndd|d	}|dddd
f }tj	||fdd}tj
||f }tj
|d| f | }|r|	d
 }n ||jdd }||  }d}|dur||}|j|||d |	dd
 }	|jt|ks4J 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)
    Nr   rP   rU   rs   rt   ru   順 )rm   rq   rp   rw   max_iterrO   rQ   rx   rz   )SPARSE_SOLVERS_WITH_INTERCEPTr   r    SPARSE_SOLVERS_WITHOUT_INTERCEPTr   rg   r_   r   r>   r   r   r?   r~   r   r   r)   r   )rp   rq   r   rm   ro   rd   rh   rl   rk   r   rM   rN   swr   r   rD   rD   rE   $test_ridge_regression_sample_weights  s>    



r   c                  C   sX   t dd} tt| dgd}tttj}t|| dgd}ttj|j}t|| d S )NrQ   rP   r   rm   )	
y_diabetesreshaper   
X_diabetesr>   dotra   r   r+   )rl   r   KZ	dual_coefZcoef2rD   rD   rE   test_primal_dual_relationship  s    r   c               
   C   sn   t jd} | d}| dd}d}tjt|d& t||dddd d	d
 W d    n1 s`0    Y  d S )Nr      rT   z3sparse_cg did not converge after [0-9]+ iterations.matchrr   r7           rP   )rm   rp   rw   r   verbose)r>   r\   r]   randnr   warnsr   r   )rg   rl   rh   Zwarning_messagerD   rD   rE   &test_ridge_regression_convergence_fail  s    
r   c                  C   sV  t jd} d\}}| ||}| |}|d d t jf }t j|d| f }t }||| |jj	|fksrJ |j
j	dksJ t|jt jsJ t|j
tsJ ||| |jj	|fksJ |j
j	dksJ t|jt jsJ t|j
t jsJ ||| |jj	d|fksJ |j
j	dks*J t|jt js>J t|j
t jsRJ d S )Nr   r   rT   rP   rD   rP   rG   )rG   )r>   r\   r]   r   newaxisc_r   r~   r   r   r   
isinstanceZndarrayfloat)rg   rM   rN   rh   rl   ZY1YridgerD   rD   rE   test_ridge_shapes_type  s,    
r   c                  C   s   t jd} d\}}| ||}| |}t j|d| f }t }||| |j}||| t|jd | t|jd |d  d S )Nr   r   rr   rP   )	r>   r\   r]   r   r   r   r~   r   r*   )rg   rM   rN   rh   rl   r   r   r   rD   rD   rE   test_ridge_intercept4  s    
r   c                  C   s   t jd} d\}}| |}| ||}tddd}tdd}||| ||| t|j|j ||| ||| t|j|j d S )Nr   )r   rL   r   Frm   rq   rq   )	r>   r\   r]   r   r   r   r~   r*   r   )rg   rM   rN   rl   rh   r   ZolsrD   rD   rE   test_ridge_vs_lstsqF  s    

r   c            	         s   t jd} d\}}}| || | ||t |t  fddtjD } fdddD }|D ]}t|| qrt	d d d}d	}t
jt|d
 |  W d    n1 s0    Y  d S )N*   )   rT   r   c                    s&   g | ]\}}t |d d |jqS )r8   rm   rp   r   r~   r   ).0rm   target)rh   rD   rE   
<listcomp>g  s   z3test_ridge_individual_penalties.<locals>.<listcomp>c                    s$   g | ]}t |d d jqS )-q=)rm   rp   rw   r   )r   rp   rh   Z	penaltiesrl   rD   rE   r   m  s   )r6   r7   r9   r8   r:   r;   rQ   r   zCNumber of targets and number of penalties do not correspond: 4 != 5r   )r>   r\   r]   r   arangearrayzipra   r+   r   r   raises
ValueErrorr~   )	rg   rM   rN   	n_targetscoef_choleskyZcoefs_indiv_penZcoef_indiv_penr   err_msgrD   r   rE   test_ridge_individual_penalties[  s&    



r   n_col)rD   r   )   csr_containerc           
      C   s   t jd}|dd}|d}|t|}|jdg| R  }|jdg| R  }t||||}t ||d d d f |  |d d d f g}	t|	||| t|	j	||j	| d S )Nr         	   )
r>   r\   r]   r   lenr   Zhstackr)   r   ra   )
r   r   rg   rh   ZX_msqrt_swr   AoperatorZreference_operatorrD   rD   rE   test_X_CenterStackOp{  s    
.r   r   ))rT   rP   )   r   )r      )rG   rG   )r   r   uniform_weightsc                 C   s   t jd}|j|  }|r,t |jd }n|d| d }t |}t j|d|d}|| |d d d f  }|	|j
}	|||d d d f  }
tdd}||
|\}}t|| t|	| d S Nr   rP   )ry   weightsTr   )r>   r\   r]   r   r   r   	chisquaresqrtaverager   ra   r   Z_compute_gramr)   )r   r   r   rg   rh   r   r   X_mean
X_centeredZ	true_gramX_sparsegcvZcomputed_gramcomputed_meanrD   rD   rE   test_compute_gram  s    



r   c                 C   s   t jd}|j|  }|r,t |jd }n|d| d }t |}t j|d|d}|| |d d d f  }|j	
|}	|||d d d f  }
tdd}||
|\}}t|| t|	| d S r   )r>   r\   r]   r   r   r   r   r   r   ra   r   r   Z_compute_covariancer)   )r   r   r   rg   rh   r   r   r   r   Ztrue_covariancer   r   Zcomputed_covr   rD   rD   rE   test_compute_covariance  s    



r   d   r   rT   rP         *@      >@c                 C   s   t | ||||||d|d	\}}}|dkr4t|g}||7 }tj|d||jdk}| }d|| < d||< |||8 }|
r||t	|d | 7 }t	|d }|dkr|d }|	r|||fS ||fS )NT)	rM   rN   n_informativer   biasnoiseshuffler   rO   rP   r   r   )
r
   r>   asarrayr\   r]   Zbinomialr   copyr   abs)rM   rN   proportion_nonzeror   r   r   X_offsetr   r   r   positiverO   rh   rl   cmaskZ	removed_XrD   rD   rE   _make_sparse_offset_regression  s8    

r   zsolver, sparse_containerc                 c   s*   | ]"\}}|d u s|dv r||fV  qd S )N)r7   ridgecvrD   )r   rp   r   rD   rD   rE   	<genexpr>  s   r   )r8   r:   r7   r9   r;   r   z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r   rr   )r   float64皙?seedr   c                 C   s   d}|dkrdnd}t dd||||d\}}	t|}td|d	||	}
|j|d
d}|	j|d
d}	|d urt||}| dkrt|gd}nt| d|d}|||	 t|j|
jddd t|j|
jddd d S )Nrr   g?g      I@g     @@rT      )r   rN   r   r   rO   rM   r6   )rp   rm   F)r   r   alphasru   )rp   rw   rm   rR   r   rtol)	r   r!   r   r~   astyper   r)   r   r   )rp   r   rM   dtyper   r  rm   r   rh   rl   Z	svd_ridger   rD   rD   rE   test_solver_consistency  s,    
r  gcv_moder6   eigenX_containerX_shape)r   r   )r   r   zy_shape, noise))r   rr   )r   rP   r   )r   r        b@c              	   C   s   |\}}t |dkr|d nd}t|||dd|dd\}	}
|
|}
g d}t|||d	d
}t| ||d}||	|
 ||	}|||
 |jt|jksJ t|j	|j	dd t|j
|j
dd d S )NrG   rQ   rP   r   Fr   rM   rN   r   rO   r   r   r   rR   r  rr         $@g     @@neg_mean_squared_errorcvrq   r  scoring)r  rq   r  rR   r
  )r   r   r   r   r~   alpha_r   r   r)   r   r   )r  r  r  y_shaperq   r   rM   rN   r   rh   rl   r  	loo_ridge	gcv_ridgeX_gcvrD   rD   rE   test_ridge_gcv_vs_ridge_loo_cv  s<    
	
r#  c            	   	   C   s   d} d\}}d}t |||ddddd\}}g d}t|d	|| d
}td	|| d}||| ||| |jt|jksJ d|jd|jt|j|jdd t|j|jdd d S )NZexplained_variance)rT   r   rP   r   Fr   r  r  Tr  )rq   r  r  zgcv_ridge.alpha_=z, loo_ridge.alpha_=rR   r  )	r   r   r~   r  r   r   r)   r   r   )	r  rM   rN   r   rh   rl   r  r   r!  rD   rD   rE   test_ridge_loo_cv_asym_scoringE  s4    

r$  rN   r   r   zy_shape, fit_intercept, noise))r  Trr   )r  Tg      4@)r  Tr  )r  Fr   c                    s$  g d}t jd}t|dkr(|d nd}td||dd|d\}	}
|
|}
d	|t|	 }||  d t	}t 
t |	jd | |t}|	  |
   }}t|	jd d
}|j|| d}t||d|d}||| t|j|d}|j|| d}t||||d}|j|jkr.||j}|| d  fddt |	jd D t ||	}t|d| |d}|j||
|d t|dkr|jd d d d ||jf }n|jd d ||jf }|jt|jksJ t|dd t|j|jdd t|j|jdd d S )Nr  r   rG   rQ   rP   r   F)rM   rN   r   rO   r   r   r   )Zn_splits)groupsr  )r  r  r  rq   r   r  c                    s"   g | ]}t j |k d dqS )r   rx   )r>   r}   )r   iindicesZkfold_errorsrD   rE   r     s   z1test_ridge_gcv_sample_weights.<locals>.<listcomp>T)r  store_cv_resultsr  rq   rz   rR   r  )r>   r\   r]   r   r   r   r   r[   r  intrepeatr   r   r   r   splitr   r~   r   r  r    r   cv_results_indexr   r   r)   r   r   )r  r  rq   rN   r  r   r  rg   r   rh   rl   r{   ZX_tiledZy_tiledr  ZsplitsZkfoldZ	ridge_regpredictionsr"  r!  Z
gcv_errorsrD   r(  rE   test_ridge_gcv_sample_weightse  sf    



"r1  z2mode, mode_n_greater_than_p, mode_p_greater_than_n))Nr6   r  )autor6   r  )r  r  r  )r6   r6   r6   c                 C   sJ   t ddd\}}| d ur | |}t|||ks2J t|j||ksFJ d S )Nr   rG   )rM   rN   )r
   r   ra   )r   modeZmode_n_greater_than_pZmode_p_greater_than_nrh   rk   rD   rD   rE   test_check_gcv_mode_choice  s
    r4  c                 C   s  t jd }g }| d u r"t d }}n| t d }}t|d}||t |j}|| t}tt	dd}t
d|d}	||	j|t |	jt|ksJ dd }
t|
}t
d|d}||j|t |jt|ksJ td	}t
d|d}||t |jt|ksJ | d u rB|j|tt|d
 |jt|ksBJ tttfj}||| ||}||t ||}tt||fj|dd |S )Nr   TFr   )Zgreater_is_better)rq   r  c                 S   s   t | | S r=   )r   )xrl   rD   rD   rE   func  s    z_test_ridge_loo.<locals>.funcr  rz   h㈵>r  )r   r   r   r~   r   r  appendr-   r   r   r   r   r   r   r>   r   vstackra   r   r)   )r   rM   retrh   rq   Z	ridge_gcvr  fr  Z
ridge_gcv2r6  Z
ridge_gcv3ZscorerZ
ridge_gcv4r   Y_predrB   rD   rD   rE   _test_ridge_loo  sB    





r=  c                 C   s   | d u rt n| t }t }||t || t|jjdksDJ t|j	t
ju sXJ td}|j|d ||t || t|jjdksJ t|j	t
ju sJ d S )NrP   r   r&  )r   r   r~   r   r   r   r   r   typer   r>   r  r   
set_params)r   rh   ridge_cvr  rD   rD   rE   _test_ridge_cv  s    

rA  zridge, make_datasetr*  c                 C   s.   |ddd\}}|  || t| dr*J d S )N   r   rM   rO   r.  )r~   hasattr)r   make_datasetrh   rl   rD   rD   rE   $test_ridge_gcv_cv_results_not_stored  s    	rG  r  c                 C   sL   |ddd\}}| j d|d | || t| ds8J t| jtsHJ d S )NrC  r   rD  F)r*  r  best_score_)r?  r~   rE  r   rH  r   )r   rF  r  rh   rl   rD   rD   rE   test_ridge_best_score  s
    rI  c               	      s  t jd} d\}}}| ||}t |d d dgf t d|ft |d d dgf dt d|f  t |d d dgf dt d|f  | ||  d fd	d
|jD }tdd |}t	||j
 tt|j
d |j|j tddd |}|j
j|fks$J |jj|fks8J |jj|t|fksTJ tdddd |}|j
j|fks~J |jj|fksJ |jj||dfksJ tddd |d d df }t |j
sJ t |jsJ |jj|tfks
J tddd |}t	||j
 tt|j
d |j|j tt dd}d}tjt|d | | W d    n1 s0    Y  tddd}tjt|d | | W d    n1 s0    Y  d S )Nr   )r   r   r   r   rP   g?rG   rR   )rP   r     c                    s    g | ]}t d  |jqS )r  )r   r~   r  )r   r   rh   r  rD   rE   r   =      z6test_ridge_cv_individual_penalties.<locals>.<listcomp>T)r  alpha_per_targetr   )r  rM  r*  r2)r  rM  r  )r  r  rM  z3cv!=None and alpha_per_target=True are incompatibler   rC  )r>   r\   r]   r   r   r   ra   r   r~   r,   r  r+   r   r   r   rH  r.  r   Zisscalarr   r   r   r   )rg   rM   rN   r   rl   Zoptimal_alphasr@  msgrD   rK  rE   "test_ridge_cv_individual_penalties*  s\    
"&&
,rP  c                 C   s>   | d u rt n| t }tdd}||t t||tdS )NFr   r   )r   r   r~   r   r>   roundr   )r   rh   r   rD   rD   rE   _test_ridge_diabetesq  s    
rR  c                 C   s   | d u rt n| t }tttfj}t jd }tdd}||| |jjd|fksXJ |	|}||t |	|}t
t||fj|dd d S )NrP   Fr   rG   r   decimal)r   r>   r9  r   ra   r   r   r~   r   r   r+   )r   rh   r   rN   r   r<  rB   rD   rD   rE   _test_multi_ridge_diabetesx  s    



rU  c                 C   s   t tjd }tjd }| d u r&tn| t}t t fD ]D}||t |jj||fks^J |	|}t 
t|kdks:J q:td}t|d}||t |	|}t 
t|kdksJ d S )Nr   rP   gHzG?r   r&  g?)r>   uniquey_irisr   X_irisr   r   r~   r   r   r?   r   )r   	n_classesrN   rh   regrB   r  rD   rD   rE   _test_ridge_classifiers  s    



r[  r  Zaccuracyr   c                 C   sJ   | d u rt n| t }t|r$t|n|}t||d}||t| d S )N)r  r  )rX  callabler   r   r~   rW  r   )r   r  r  rh   scoring_clfrD   rD   rE   "test_ridge_classifier_with_scoring  s    r_  c                 C   sz   dd }| d u rt n| t }tjdddd}t|t||d}||t |jt	dks^J |j
t	|d	 ksvJ d S )
Nc                 [   s   dS )NzG?rD   r@   rD   rD   rE   _dummy_score  s    z:test_ridge_regression_custom_scoring.<locals>._dummy_scorerG   r   )num)r  r  r  r`  r   )rX  r>   Zlogspacer   r   r~   rW  rH  r   r   r  )r   r  ra  rh   r  r^  rD   rD   rE   $test_ridge_regression_custom_scoring  s    rd  c                 C   sl   | d u rt n| t }tddd}||t ||t}tddd}||t ||t}||kshJ d S )Nr7  F)rw   rq   rR   )r   r   r~   r   r   )r   rh   r   r   Zridge2Zscore2rD   rD   rE   _test_tolerance  s    re  c                 C   s  t ||}t|}t|}|j||d}|j||d}	||| |j}
|j}tdd t	|||	}|j}|j
dksJ |j|jksJ tt||d|
t|d |j}|j
dksJ |j|jksJ tt||d|t|d W d    n1 s0    Y  d S )NdeviceTZarray_api_dispatch)rL   )xpr   rD   )r.   rX  r  rW  r   r~   r   r   r   r   r   r  r)   r%   r$   )name	estimatorarray_namespacerg  
dtype_nameri  Z	X_iris_npZ	y_iris_np	X_iris_xp	y_iris_xpZcoef_npZintercept_npZestimator_xpZcoef_xpZintercept_xprD   rD   rE   check_array_api_attributes  s4    




rp  z#array_namespace, device, dtype_namecheck)Zidsrk  rp   c                 C   s   | j j}||| |||d d S )N)rg  rm  )	__class____name__)rk  rq  rl  rg  rm  rj  rD   rD   rE   test_ridge_array_api_compliance  s    ru  rl  )Zinclude_numpy_namespacesc              
   C   s  t | d d}|td d }|td d }tjd d j}|ddh D ]}t||dkd}d	|j d
| d}tj	t
|dF tdd ||| W d    n1 s0    Y  W d    qL1 s0    Y  qLtddd}d|j d}tj	t
|dH tdd ||| W d    n1 s20    Y  W d    n1 sR0    Y  t }d|j d}tjt|dH tdd ||| W d    n1 s0    Y  W d    n1 s0    Y  d S )Nrf  r   rp   r   r2  r6   lbfgsrp   r   z Array API dispatch to namespace z" only supports solver 'svd'. Got 'z'.r   Trh  zYThe solvers that support positive fitting do not support Array API dispatch to namespace zc. Please either disable Array API dispatch, or use a numpy-like namespace, or set `positive=False`.z&Using Array API dispatch to namespace z with `solver='auto'` will result in using the solver 'svd'. The results may differ from those when using a Numpy array, because in that case the preferred solver would be cholesky. Set `solver='svd'` to suppress this warning.)r.   r   rX  rW  r   Z_parameter_constraintsoptionsrt  r   r   r   r   r~   r   UserWarning)rl  ri  rn  ro  Zavailable_solversrp   r   expected_msgrD   rD   rE   6test_array_api_error_and_warnings_for_solver_parameter  s6    
JLr{  c              	   C   s   t | d d}|td d }|td d }t }d}t V tjd|td t	dd |
|| W d    n1 s0    Y  W d    n1 s0    Y  t	dd$ tddd	
|| W d    n1 s0    Y  d S )
Nrf  r   zkResults might be different than when Array API dispatch is disabled, or when a numpy-like namespace is usederror)messagecategoryTrh  r2  rw  )r.   r   rX  rW  r   warningscatch_warningsfilterwarningsry  r   r~   )rl  ri  rn  ro  r   rz  rD   rD   rE   )test_array_api_numpy_namespace_no_warning+  s    
Hr  	test_funcc                 C   s2   | d }| |}|d ur.|d ur.t ||dd d S )Nr   rS  )r+   )r  r   Z	ret_denseZ
ret_sparserD   rD   rE   test_dense_sparseC  s    r  c                  C   sZ  t ddgddgddgddgddgg} g d}td d}|| | t|ddggt d	g td	d
id}|| | t|ddggt dg tdd}|| | t|ddggt d	g t ddgddgddgddgg} g d}td d}|| | tdd}|| | t|jdks:J t|j	|j	 t|j
|j
 d S )N      r   皙rr   r   rP   rP   rP   rQ   rQ   class_weightr  rP   rR   rQ   balanced)rP   rP   rQ   rQ   rG   )r>   r   r   r~   r,   r   r   Zclasses_r+   r   r   )rh   rl   rZ  ZregarD   rD   rE   test_class_weightsY  s(    (

"

r  rZ  c                 C   s   |  }| tjtj | dd}| tjtj t|j|j ttjj}|tjdk  d9  < dddd}|  }| tjtj| | |d}| tjtj t|j|j |  }| tjtj|d  | |d}| tjtj| t|j|j d	S )
z5Check class_weights resemble sample_weights behavior.r  r  rP   r   rr   g      Y@)r   rP   rG   rG   N)	r~   irisdatar   r*   r   r>   r   r   )rZ  reg1reg2r{   r  rD   rD   rE   "test_class_weight_vs_sample_weight|  s$    


r  c                  C   s   t ddgddgddgddgddgg} g d}td g dd}|| | td	d
ig dd}|| | t|ddggt dg d S )Nr  r   r  rr   r   r  )r   r  rP   )r  r  rP   rR   )r   r  rP   rT   gɿrG   rQ   )r>   r   r   r~   r,   r   )rh   rl   rZ  rD   rD   rE   test_class_weights_cv  s    (r  r  c                 C   s   t jd}d}d}|||}g d}t|}t| r@t| n| }t|d d|d}||}	|||	 |j	j
||fks~J d}
|||
}	|||	 |j	j
||
|fksJ tdd| d}tjtd	d
 |||	 W d    n1 s0    Y  d S )Nr   r   r   r  rr   r  Tr  r  r*  r  r   )r  r*  r  zcv!=None and store_cv_resultsr   )r>   r\   r]   r   r   r\  r   r   r~   r.  r   r   r   r   )r  rg   rM   rN   r5  r  n_alphasr]  rrl   r   rD   rD   rE   test_ridgecv_store_cv_results  s$    
r  c           	      C   s   t ddgddgddgddgddgg}t g d}|jd }g d}t|}t| r`t| n| }t|d d|d	}d
}||| |jj|||fksJ t g dg dg dg	 }|jd
 }||| |jj|||fksJ d S )Nr  r   r  rr   r   r  r  Tr  rP   )rP   rQ   rP   rQ   rP   )rQ   rQ   rP   rQ   rQ   )
r>   r   r   r   r\  r   r   r~   r.  Z	transpose)	r  r5  rl   rM   r  r  r]  r  r   rD   rD   rE   )test_ridge_classifier_cv_store_cv_results  s$    (

r  	Estimatorc                 C   s   t jd}d}d\}}| tu r,||}n|dd|}|||}| |d}|j|u slJ d| j d||| t	|jt 
| d S )Nr   r  r   r   rG   r  z`alphas` was mutated in `z
.__init__`)r>   r\   r]   r   r   randintr  rt  r~   r,   r   )r  rg   r  rM   rN   rl   rh   	ridge_estrD   rD   rE   test_ridgecv_alphas_conversion  s    
r  c           	      C   s   t jd}d}d\}}|tu r,||}n|dd|}|||}||| d}| du rtjtdd |	|| W d   q1 s0    Y  n|	|| dS )	z1Check alpha=0.0 raises error only when `cv=None`.r   )r   rr   r  r  rG   r  r  Nz"alphas\[0\] == 0.0, must be > 0.0.r   )
r>   r\   r]   r   r   r  r   r   r   r~   )	r  r  rg   r  rM   rN   rl   rh   r  rD   rD   rE   test_ridgecv_alphas_zero  s    ,r  c                  C   s   t jd} d}dD ]\}}| |}| ||}d| | }td}t||d}|j|||d d|i}	tt	 |	|d	}
|
j|||d |j
|
jjksJ t|j|
jj qd S )
Nr   r  )rC  r   r   rr   r   r  rz   rm   r&  )r>   r\   r]   r   randr   r   r~   r   r   r  Zbest_estimator_rm   r+   r   )rg   r  rM   rN   rl   rh   r{   r  r   
parametersgsrD   rD   rE   test_ridgecv_sample_weight  s    
r  c               	      sV  ddg} ddg}t jd}t| |D ](\}}||| ||||d d }d}d}|d d t jf |t jd d f tdd |  |  |  fdd	} fd
d}	d}
tj	t
|
d |  W d    n1 s0    Y  d}
tj	t
|
d |	  W d    q&1 sF0    Y  q&d S )NrG   r   r   rP   rr   g       @r   c                      s      d S r=   r~   rD   )rh   r   sample_weights_not_OKrl   rD   rE   fit_ridge_not_ok@  s    zStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_okc                      s      d S r=   r  rD   )rh   r   sample_weights_not_OK_2rl   rD   rE   fit_ridge_not_ok_2C  s    zUtest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2z)Sample weights must be 1D array or scalarr   )r>   r\   r]   r   r   r   r   r~   r   r   r   )Z
n_samplessZn_featuressrg   rM   rN   Zsample_weights_OKZsample_weights_OK_1Zsample_weights_OK_2r  r  r   rD   )rh   r   r  r  rl   rE   9test_raises_value_error_if_sample_weights_greater_than_1d(  s.    

&r  zn_samples,n_featuresrG   c           
      C   s   t jd}tddd}tddd}|| |}|| }|| d d }||}	|j|	||d |j|||d t|j|jdd	 d S )
Nr   rr   Fr   rG   rP   rz   rC  rS  )r>   r\   r]   r   r   r~   r+   r   )
rM   rN   r   rg   sparse_ridgedense_ridgerh   rl   Zsample_weightsr   rD   rD   rE   &test_sparse_design_with_sample_weightsO  s    
r  c                  C   sJ   t ddgddgddgddgddgg} g d}tdd}|| | d S )	Nr  r   r  rr   r   r  )rP   rT   r   r  )r>   r   r   r~   )rh   rl   r   rD   rD   rE   test_ridgecv_int_alphase  s    (
r  zparams, err_type, err_msgr  )rP   rQ   iz alphas\[1\] == -1, must be > 0.0)gr  g      $z"alphas\[0\] == -0.1, must be > 0.0)rP   rr   1z1alphas\[2\] must be an instance of float, not strc                 C   sj   d\}}t ||}t dd|}tj||d& | f i ||| W d   n1 s\0    Y  dS )z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.r  r   rG   r   N)rg   r   r  r   r   r~   )r  rJ   Zerr_typer   rM   rN   rh   rl   rD   rD   rE   test_ridgecv_alphas_validationn  s
    r  c                 C   sL   d\}}t ||}| tu r(t |}nt d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   rG   rP   r  N)rg   r   r   r  r~   )r  rM   rN   rh   rl   rD   rD   rE   test_ridgecv_alphas_scalar  s    r  c                  C   s6   t ddd} | tt | jjd tjd ks2J d S )Nr7   rP   )rp   r   r   )r   r~   r   r   r   r   )rZ  rD   rD   rE   test_sparse_cg_max_iter  s    r  z-ignore::sklearn.exceptions.ConvergenceWarningc                  C   s   d} t t }}t|| dfj}tddD ]<}dD ]2}t||dd}||| t|j	t||  q2q*dD ],}t|ddd}||| |j	d u slJ qld S )	NrG   rP   rL   )r:   r;   r9   r   )rp   r   rw   )r7   r6   r8   r  )
r   r   r>   Ztilera   ranger   r~   r,   Zn_iter_)r   rh   rl   Zy_nr   rp   rZ  rD   rD   rE   test_n_iter  s    
r  )r9   r7   rv  r2  with_sample_weightc                 C   s   | dk}t d||d\}}d}|rDtj|}d|j|jd d }| dkrPd	n| }	t|	d
|d}
t| d
|d}|
j|||d |j||||d t|
j	|j	 t|
j
|j
d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
    rv  r   )rN   rO   r   Nrr   r   rY   r2  r7   r   )rp   rw   r   rz   gƠ>r  )r   r>   r\   r]   r_   r   r   r~   r)   r   r   )rp   r  rd   r   r   rh   rl   r{   rg   Zdense_solverr  r  rD   rD   rE   test_ridge_fit_intercept_sparse  s    
r  )r;   r6   r8   c                 C   sj   t ddd\}}||}t| d}d| }tjt|d ||| W d    n1 s\0    Y  d S )Nr   r   )rN   rO   rr  zsolver='{}' does not supportr   )r   r   formatr   r   r   r~   )rp   r   rh   rl   X_csrr  r   rD   rD   rE   %test_ridge_fit_intercept_sparse_error  s    

r  c                 C   s:  t dd|dd\}}| r<tj|}d|j|jd d }nd }||}tddd	d
dd}tf i |}	tf i |}
|	j|||d t	
 , t	dt |
j|||d W d    n1 s0    Y  t|	j|
jdd t|	j|
jdd tjtdd( tdd	dd d|| W d    n1 s,0    Y  d S )Nr   r   g      @)rN   rM   rO   r   rr   r   rY   r:   Tru   r   )rm   rp   rq   rw   r   rz   r|  -C6?r  z"sag" solver requires.*r   rR   )rp   rq   rw   r   )r   r>   r\   r]   r_   r   r|   r   r~   r  r  simplefilterry  r)   r   r   r   r   )r  rd   r   rh   rl   rg   r{   r  rJ   r  r  rD   rD   rE   #test_ridge_fit_intercept_sparse_sag  s*    


.r  return_interceptr{   rJ  	container)r2  r7   r8   r9   r:   r;   rv  c                 C   s  t d}|dd}g d}t||}d}| r4d}||7 }||}	d\}
}trTdnd	}|d
k}|dvr| rtjtdd( t|	||
||| ||d W d   n1 s0    Y  dS t|	||
|||| |d}| r|\}}t	||d|d t	||d|d nt	||d|d dS )z=check if all combinations of arguments give valid estimationsr   rJ  r   )rP   rG   r  r   g     @)rR   ư>rR   r  rv  )r:   r2  zIn Ridge, only 'sag' solverr   )rm   rp   r{   r  r   rw   N)rm   rp   r{   r   r  rw   r   r
  r   )
r"   r  r>   r   r0   r   r   r   r   r)   )r  r{   r  rp   rg   rh   Z
true_coefsrl   Ztrue_interceptZ	X_testingrm   rw   r   r   outr   r   rD   rD   rE   .test_ridge_regression_check_arguments_validity  sP    $
r  )r6   r7   r8   r9   r:   r;   rv  c                 C   s  t jd}d}| dk}d\}}|||}||}|t j}|t j}	dt t jj }
t|| d|
|d}|	||	 |j
}t|| d|
|d}|	|| |j
}|j|jksJ |j|jksJ ||j|jksJ ||j|jksJ t|j
|j
dd	d
 d S )Nr   rr   rv  r  rG     )rm   rp   r   rw   r   r  gMb@?r  )r>   r\   r]   r   r  r   Zfinfo
resolutionr   r~   r   r  r   r)   )rp   rg   rm   r   rM   rN   X_64y_64X_32y_32rw   ridge_32coef_32ridge_64coef_64rD   rD   rE   test_dtype_matchD  s0    


r  c                  C   s   t jd} t ddg}d\}}}| ||}| ||}|t j}|t j}t|dd}	|	|| |	j	}
t|dd}||| |j	}|
j
|j
ksJ |j
|j
ksJ |	|j
|j
ksJ ||j
|j
ksJ t|	j	|j	dd d S )	Nr   rr   r   )rC  r   rG   r8   r   r   rS  )r>   r\   r]   r   r   r  r   r   r~   r   r  r   r*   )rg   rm   rM   rN   Zn_targetr  r  r  r  r  r  r  r  rD   rD   rE   test_dtype_match_choleskyi  s$    
r  )r6   r8   r9   r7   r:   r;   rv  c                 C   s   t j|}d\}}|||}||}t ||d||  }d}| dk}	t }
| dkrbdnd}t jt jfD ]2}t|	||	||| |d |	dd	d
d
d|
|< qr|
t j j
t jksJ |
t j j
t jksJ t|
t j |
t j |d d S )Nr  r   rr   rv  r7   rR   r7  r  ru   F)	rm   rp   rO   r{   r   r   rw   Zreturn_n_iterr  r   )r>   r\   r]   r   r   r|   r   r  r   r  r  r)   )rp   r  rO   rM   rN   rh   r   rl   rm   r   resultsr   Zcurrent_dtyperD   rD   rE   %test_ridge_regression_dtype_stability  s4    
r  c                  C   sR   t dd\} }t| } | d d dd d f } |d d d }tdd| | d S )Nr   rO   rG   r:   rr  )r
   r>   Zasfortranarrayr   r~   )rh   rl   rD   rD   rE   test_ridge_sag_with_X_fortran  s
    
r  zClassifier, paramsc                 C   s   t ddd\}}|dd}tj||gdd}| f i |||}||}|j|jks^J t|dddf |dddf  tdd|| dS )	zRCheck that multilabel classification is supported and give meaningful
    results.rP   r   )rY  rO   rQ   rx   Nr:   rr  )	r	   r   r>   r   r~   r   r   r,   r   )
ClassifierrJ   rh   rl   r   r^  r<  rD   rD   rE   test_ridgeclassifier_multilabel  s    
"r  r2  rv  )rR   r   r  rr   c                 C   s   t ddgddgddgddgg}t dd	g}|rHd
}||| }n
||}t|d| |d}||| t |jdksJ dS )z:Test that positive Ridge finds true positive coefficients.rP   rG   r   rL   r   rC  r   r   rS   r   Trm   r   rp   rq   r   N)r>   r   r   r   r~   r^   r   )rp   rq   rm   rh   r   r   rl   r   rD   rD   rE   #test_ridge_positive_regression_test  s    "
r  c           
      C   s   t jd}|dd}|jdd|jd d}| rDd}|| | }n|| }||j|jd dd	 7 }g }d
D ](}t||| dd}	||		||j
 qnt|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   r  rr   rP   rY   r   r   )TFru   )rm   r   rq   rw   r  r	  N)r>   r\   r]   r   r_   r   r`   r   r8  r~   r   r)   )
rq   rm   rg   rh   r   r   rl   r  r   r   rD   rD   rE   %test_ridge_ground_truth_positive_test  s    r  )r6   r8   r9   r7   r:   r;   c              	   C   s   d}t ddgddgg}t ddg}|| }t|d| dd	}tjtd
d ||| W d   n1 sp0    Y  tjtdd( t|||d| dd\}}W d   n1 s0    Y  dS )z5Test input validation for positive argument in Ridge.r  rP   rG   r   rL   rQ   TFr  zdoes not support positiver   Nzonly 'lbfgs' solver can be used)r   rp   r  )r>   r   r   r   r   r   r~   r   )rp   rm   rh   r   rl   r   rk   rD   rD   rE   test_ridge_positive_error_test  s    *r  c           	         s   t dddd\ dd}d fdd		}td
 }tdd }||}||}||ksnJ t|D ]}|||d}||ksvJ qvdS )z?Check ridge loss consistency when positive argument is enabled.r  r   rM   rN   rO   r  r   Nr   c                    sp   | j }|d ur6tj|}| j|jd|| jjd }n| j}dt |  | d  d t|d   S )Nr   rY   r   rG   )r   r>   r\   r]   r   r_   r   r}   )r   rO   Znoise_scaler   rg   r   rh   rm   rl   rD   rE   
ridge_loss  s    &z,test_positive_ridge_loss.<locals>.ridge_lossr   T)rm   r   r  )Nr   )r
   r   r~   r  )	rm   Zn_checksr  r   Zmodel_positiveZlossZloss_positiverO   Zloss_perturbedrD   r  rE   test_positive_ridge_loss  s    r  c                 C   sj   t dddd\}}t|d}t| g} dddd}t||| fi |}t||| }t||d	d
d dS )zETest that LBGFS gets almost the same coef of svd when positive=False.r  r   r  rP   FgؗҜ<i  )r   rw   r   r  r   r	  N)r
   r>   Zexpand_dimsr   r   r   r)   )rm   rh   rl   configZ
coef_lbfgsr   rD   rD   rE   test_lbfgs_solver_consistency4  s    r  c                  C   sv   t ddgddgg} t ddg}tddddd	dd
}tjtdd || | W d   n1 sh0    Y  dS )z1Test that LBFGS solver raises ConvergenceWarning.rP   rQ   g    _g    _Br   rv  Fr   T)rm   rp   rq   rw   r   r   zlbfgs solver did not converger   N)r>   r   r   r   r   r   r~   )rh   rl   r   rD   rD   rE   test_lbfgs_solver_errorE  s    r  r  tallc                 C   s  |dur&|dks|dv r&| r&t d tjd}d}|dkrH|d }n|d }|||}||}	|durv||}t| d	||d
k|dd}
tf i |
j||	dd}|j	
 }| r|j}t|	}|j||	|d t|j	|dd | rt|j| |jdd|jd d}d|dd< |	dd  d9  < |j||	|d |j	
 }| rR|j}|j|ddddf |	dd |dd d t|j	|dd | rt|j| tf i |
jtj|
d  d}|j||	tj| d |dv r| st d| d t|j	|dd | rt|j| |dur0| }tj||d|d  gdd}t|	|	d|d  g}|
 }|d|d   d9  < tj||d|d  gdd}|dur||}||}tf i |
j||	|d}tf i |
j|||d}t|j	|j	 | rt|j|j dS )zTest that the impact of sample_weight is consistent.

    Note that this test is stricter than the common test
    check_sample_weight_equivalence alone.
    Nr6   )r8   r;   zunsupported configurationr   rK   r  rG   rr   rv  r   )rq   rm   rp   r   rO   rw   rz   r  r  r   r   rU   rJ  rm   r   rs   zSolver z- does fail test for scaling of sample_weight.rx   )r   r   r>   r\   r]   r  r|   r   r~   r   r   r   Z	ones_liker)   r_   r   r?  pir   Ztoarrayr   )rq   r   r  rp   rd   rg   rM   rN   rh   rl   rJ   rZ  r   r   r{   r  ZX2y2Zsample_weight_1Zsample_weight_2r  rD   rD   rE   $test_ridge_sample_weight_consistencyV  s    





0 

r  c                  C   s   t ddd\} }tdd}d}tjt|d || | W d   n1 sN0    Y  tddd	}d
}tjt|d || | W d   n1 s0    Y  dS )z-Check `store_cv_values` parameter deprecated.rC  r   rD  T)store_cv_valuesz'store_cv_values' is deprecatedr   N)r*  r  z2Both 'store_cv_values' and 'store_cv_results' were)r
   r   r   r   FutureWarningr~   r   r   rh   rl   r   rO  rD   rD   rE   %test_ridge_store_cv_values_deprecated  s    
*r  c                  C   sb   t ddd\} }tdd}d}tjt|d" || | |j W d   n1 sT0    Y  dS )	zCheck `cv_values_` deprecated.rC  r   rD  TrB  z$Attribute `cv_values_` is deprecatedr   N)r
   r   r   r   r  r~   Z
cv_values_r  rD   rD   rE   test_ridge_cv_values_deprecated  s    
r  r   c                 C   s   t dd|dd\}}tj|jd fd}| r:d|ddd< d	}t|d
|dd}|j|||d tjg |jt|R d}t }	t	|D ]d\}
}t	|	
||D ]J\}\}}t||d}||| || ||  ||| ||d|
f< qqt|j| dS )ar  Check that the predictions stored in `cv_results_` are on the original scale.

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

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

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/13998
    r   rT   r   )rM   rN   r   rO   r   r   NrG   r  r  T)r  r  rq   r*  rz   r   .)r
   r>   r   r   r   r~   emptyr   r   	enumerater-  r   r   r)   r.  )r  rq   r   rh   rl   r{   r  r@  r0  r  Z	alpha_idxrm   idxZ	train_idxZtest_idxr   rD   rD   rE   !test_ridge_cv_results_predictions  s,    
r  c                    s   t d| d\ tj jd fdtddd}|j d t }t|jd	t	 fd
d|
 D }t|jt|  dS )zCheck that `RidgeCV` works properly with multioutput and sample_weight
    when `scoring != None`.

    We check the error reported by the RidgeCV is close to a naive LOO-CV using a
    Ridge estimator.
    rG   r   rO   r   r  r  T)r  r*  rz   r   c                    s6   g | ].\}}j  | | | d  | qS )rz   r~   r   r   traintestrh   r   r{   rl   rD   rE   r   	  s   z;test_ridge_cv_multioutput_sample_weight.<locals>.<listcomp>N)r
   r>   r   r   r   r~   r   r   r  squeezer-  r)   rH  r   )rd   r@  r  
y_pred_loorD   r  rE   'test_ridge_cv_multioutput_sample_weight	  s    r  c                     s   t ddd\ dd fdd} t| d}|  t }t|jd	t fd
d| D }t	|j
|  dS )zECheck that `RidgeCV` works properly with a custom multioutput scorer.rG   r   r  c                 S   s>   | | d }t j|dd}|jdkr8t j|ddgd S | S )NrG   r   rx   rP   )r   )r>   r?   ndimr   )Zy_truerB   errorsZmean_errorsrD   rD   rE   custom_error	  s
    
z=test_ridge_cv_custom_multioutput_scorer.<locals>.custom_errorc                    s    ||  | S )zGMultioutput score that give twice more importance to the second target.)r   )rk  rh   rl   )r  rD   rE   custom_multioutput_scorer)	  s    zJtest_ridge_cv_custom_multioutput_scorer.<locals>.custom_multioutput_scorer)r  r   c                    s.   g | ]&\}}  | |  | qS rD   r  r  )rh   r   rl   rD   rE   r   3	  rL  z;test_ridge_cv_custom_multioutput_scorer.<locals>.<listcomp>N)r
   r   r~   r   r   r  r>   r  r-  r)   rH  )r  r@  r  r  rD   )rh   r  r   rl   rE   'test_ridge_cv_custom_multioutput_scorer	  s    

r  metaestimator)Zenable_metadata_routingc                 C   s   |     dS )zTest that `RidgeCV` or `RidgeClassifierCV` with default `scoring`
    argument (`None`), don't enter into `RecursionError` when metadata is routed.
    N)Zget_metadata_routing)r  rD   rD   rE   *test_metadata_routing_with_default_scoring=	  s    r  zmetaestimator, make_datasetc                 C   s2   |dddd\}}| j ||t|jd d dS )zTest that `set_score_request` is set within `RidgeCV.fit()` and
    `RidgeClassifierCV.fit()` when using the default scoring and no
    UnsetMetadataPassedError is raised. Regression test for the fix in PR #29634.r   r   r   r  r   rz   N)r~   r>   r   r   )r  rF  rh   rl   rD   rD   rE   +test_set_score_request_with_default_scoringF	  s    r  )r   r   r   rT   rP   r   r   r   TFFN)r  	itertoolsr   numpyr>   r   Zscipyr   Zsklearnr   r   Zsklearn.baser   Zsklearn.datasetsr   r   r	   r
   Zsklearn.exceptionsr   Zsklearn.linear_modelr   r   r   r   r   r   Zsklearn.linear_model._ridger   r   r   r   r   r   r   Zsklearn.metricsr   r   r   Zsklearn.model_selectionr   r   r   r   r    Zsklearn.preprocessingr!   Zsklearn.utilsr"   Zsklearn.utils._array_apir#   r$   r%   r&   r'   Z-sklearn.utils._test_common.instance_generatorr(   Zsklearn.utils._testingr)   r*   r+   r,   r-   Zsklearn.utils.estimator_checksr.   r/   Zsklearn.utils.fixesr0   r1   r2   r3   r4   r5   ZSOLVERSr   r   Zload_diabetesZdiabetesr  r   r   r   r   r   indr\   r]   rg   r   Z	load_irisr  rX  rW  rF   rH   Zfixturero   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r#  r$  r1  r4  r=  rA  rG  rI  rP  rR  rU  r[  r_  rd  re  rp  ru  r{  sortedr  r  r  r  r  r  r  r  r  r  r  r  r  r   	TypeErrorr  r  r  r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD   rD   rD   rE   <module>   sf   $	 	

F,&(5552	            
-!' 	>	
9
	G#


*

#




'	


&	7
" 





%
`
+"

