U
    _»{jï ã                   @   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
 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/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7 ddddddgZ8dZ9dZ:e ;¡ Z<e<j=e<j> Z?Z@e Ae?jBd  ¡ZCejD Ed ¡ZFeF GeC¡ eCdd… ZCe?eC e@eC  Z?Z@e H¡ ZIe JeIj=¡ZKeIj>ZLdd„ ZMdd„ ZNdd„ ZOdd„ ZPejQdd gd!�d"d#„ ƒZRejS Td$e8¡ejS Td%d&d'g¡d(d)„ ƒƒZUejS Td$e8¡ejS Td%d&d'g¡d*d+„ ƒƒZVejS Td$e8¡ejS Td%d&d'g¡d,d-„ ƒƒZWejS Td$e8¡ejS Td%d&d'g¡d.d/„ ƒƒZXejS Td$e8¡ejS Td%d&d'g¡d0d1„ ƒƒZYejS Td$e8¡ejS Td%d&d'g¡d2d3„ ƒƒZZejS Td$e8¡ejS Td%d&d'g¡ejS Td4d&d'g¡ejS Td5d6d7g¡d8d9„ ƒƒƒƒZ[d:d;„ Z\d<d=„ Z]d>d?„ Z^d@dA„ Z_dBdC„ Z`dDdE„ ZaejS TdFdGdHdIg¡dJdK„ ƒZbejS TdLdMdNdOdPdQg¡ejS TdRd&d'g¡dSdT„ ƒƒZcejS TdLdMdNdOdPdQg¡ejS TdRd&d'g¡dUdV„ ƒƒZd�dd]d^„ZeejS Td_d`da„ eddddddbgd'd&gƒD ƒ¡ejS Tdcdddedfg¡ejS Tdge Adh¡¡didj„ ƒƒƒZfejS Tdkddlg¡ejS TdmejgejJg¡ejS Tdndodpg¡ejS Td%d&d'g¡ejS Tdqdrdsdtg¡dudv„ ƒƒƒƒƒZhdwdx„ ZiejS Tdkddlg¡ejS TdmejgejJg¡ejS Tdydzd{g¡ejS Td|d}d~dd€g¡d�d‚„ ƒƒƒƒZjejS Tdƒd&d'g¡ejS Td„d…d†d‡dˆg¡d‰dŠ„ ƒƒZkd‹dŒ„ Zld�dŽ„ ZmejS Td�ed'd��efed'd��efg¡d‘d’„ ƒZnejS Td�eƒ efeƒ efg¡ejS Td“ddhg¡d”d•„ ƒƒZod–d—„ Zpd˜d™„ Zqdšd›„ Zrdœd�„ ZsejS TdžddŸeOg¡ejS Td“de*d ƒg¡ejS Td¡eMeNg¡d¢d£„ ƒƒƒZtejS Td“de*d ƒg¡ejS Td¡eMeNg¡d¤d¥„ ƒƒZud¦d§„ Zvd¨d©„ ZwejS Tdªelemeqeresevf¡d«d¬„ ƒZxd­d®„ ZyejS Td¯eef¡d°d±„ ƒZzd²d³„ Z{ejS Tdždd´ePg¡dµd¶„ ƒZ|ejS TdžddŸeOg¡d·d¸„ ƒZ}ejS Td¹eeg¡dºd»„ ƒZ~d¼d½„ Zd¾d¿„ Z€dÀdÁ„ Z�dÂdÃ„ Z‚ejS Td¹eeg¡ejS TdÄdÅdÆieƒdÇfdÅdÈieƒdÉfdÅdÊie„dËfg¡dÌdÍ„ ƒƒZ…ejS Td¹eeg¡dÎdÏ„ ƒZ†dÐdÑ„ Z‡dÒdÓ„ Zˆe7dÔdÕ„ ƒZ‰ejS Td$dddÖd×g¡ejS TdØd&d'g¡dÙdÚ„ ƒƒZŠejS Td$dddg¡dÛdÜ„ ƒZ‹ejS TdØd&d'g¡dÝdÞ„ ƒZŒejS Tdßd'd&g¡ejS Tdàde �dá¡g¡ejS TdâejŽejJg¡ejS Td$d×ddddddÖg¡dãdä„ ƒƒƒƒZ�ejS Td$dddddddÖg¡dådæ„ ƒZ�dçdè„ Z‘ejS Td$dddddddÖg¡ejS Tdge’dZƒ¡dédê„ ƒƒZ“dëdì„ Z”ejS Tdíei fed“difed“dhifg¡dîdï„ ƒZ•ejS Td$d×dÖg¡ejS Td%d&d'g¡ejS Td5dðd7dñd6g¡dòdó„ ƒƒƒZ–ejS Td%d&d'g¡ejS Td5dðd7dñd6g¡dôdõ„ ƒƒZ—ejS Td$ddddddg¡död÷„ ƒZ˜ejS Td5dðd7dñd6g¡dødù„ ƒZ™ejS Td5dðd7dñd6g¡dúdû„ ƒZšdüdý„ Z›ejS Td%d'd&g¡ejS Td4d'd&g¡ejS Tdþdÿd g¡ejS Td$e8dÖg ¡�d �d„ ƒƒƒƒZœdS (  é    N)Úproduct)Úlinalg)Údatasets)Úmake_classificationÚmake_low_rank_matrixÚmake_multilabel_classificationÚmake_regression)ÚConvergenceWarning)ÚLinearRegressionÚRidgeÚRidgeClassifierÚRidgeClassifierCVÚRidgeCVÚridge_regression)Ú_check_gcv_modeÚ	_RidgeGCVÚ_solve_choleskyÚ_solve_cholesky_kernelÚ_solve_lbfgsÚ
_solve_svdÚ_X_CenterStackOp)Ú
get_scorerÚmake_scorerÚmean_squared_error)ÚGridSearchCVÚ
GroupKFoldÚKFoldÚLeaveOneOutÚcross_val_predict)Úminmax_scale)Ú	_IS_32BITÚcheck_random_state)Úassert_allcloseÚassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚignore_warningsÚsvdÚ	sparse_cgÚcholeskyÚlsqrÚsagÚsaga)r(   r+   )r(   r)   r*   r+   r,   éÈ   c                 C   s   | S ©N© ©ÚXr/   r/   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/linear_model/tests/test_ridge.pyÚDENSE_FILTERF   s    r3   c                 C   s
   t  | ¡S r.   )ÚspÚ
csr_matrixr0   r/   r/   r2   ÚSPARSE_FILTERJ   s    r6   c                 C   s   t  | |k¡S r.   )ÚnpÚmean©Zy_testÚy_predr/   r/   r2   Ú_accuracy_callableN   s    r;   c                 C   s   | | d   ¡ S )Né   )r8   r9   r/   r/   r2   Ú_mean_squared_error_callableR   s    r=   Ú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¡stt	‚|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 �s¤t	‚||||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.
    r>   )é   é   )rA   r@   )Ú	n_samplesÚ
n_featuresZeffective_rankÚrandom_stateé   Néÿÿÿÿçü©ñÒMbP?éöÿÿÿé
   ©ÚlowÚhighÚsize©rM   r<   r   )rF   rF   )ÚparamÚminr7   ÚrandomÚRandomStater   r   r'   ÚallÚAssertionErrorÚuniformÚnormalÚTZdiagÚidentityZsolveÚnorm)Úglobal_random_seedÚrequestrB   rC   ÚkÚrngr1   ÚUÚsZVtZU1ZU2ZVt1Ú_Zcoef_olsÚyÚalphaÚdZ
coef_ridgeZR_OLSZR_Ridger/   r/   r2   Úols_ridge_datasetV   s<    


   ÿ**rd   ÚsolverÚfit_interceptTFc                 C   sl  |\}}}}d}t |d| | dkr$dnd|d�}	|t |¡ }
|||  }dt |d ¡t |
d ¡  }tf |	Ž}|d	d	…d	d
…f }|r”|d
 }n ||jdd� }|| ¡  }d}| ||¡ |d	d
… }|jt |¡ksàt	‚t
|j|ƒ | ||¡t |¡k�st	‚tf |	Žj||t |jd ¡d�}|jt |¡k�s@t	‚t
|j|ƒ | ||¡t |¡k�sht	‚d	S )zˆTest that Ridge converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
    ç      ð?T©r+   r,   çVçž¯Ò<ç»½×Ùß|Û=©rb   rf   re   ÚtolrD   rE   r<   NrF   r   ©Úaxis©Úsample_weight)Údictr7   r8   Úsumr   ÚfitÚ
intercept_ÚpytestÚapproxrT   r"   Úcoef_ÚscoreÚonesÚshape)re   rf   rd   rZ   r1   ra   r`   Úcoefrb   r?   Zres_nullZ	res_RidgeZR2_RidgeÚmodelÚ	interceptr/   r/   r2   Útest_ridge_regression�   s8    û	 

"r~   c                 C   sü   |\}}}}|j \}}	d}
t|
d || | dkr2dnd|d�}|dd…dd…f }d	tj||fd
d� }tj |¡t||	d
 ƒks„t‚|r’|d }n ||jdd� }|| ¡  }d}| 	||¡ |dd… }|j
t |¡ksÞt‚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.
    rg   r<   rh   ri   rj   rk   NrF   ç      à?rE   rm   r   ç:Œ0âŽyE>©Úatol)rz   r   r7   Úconcatenater   Úmatrix_rankrP   rT   r8   rs   rt   ru   rv   r"   rw   Úr_©re   rf   rd   rZ   r1   ra   r`   r{   rB   rC   rb   r|   r}   r/   r/   r2   Ú test_ridge_regression_hstacked_XÉ   s,    
û
r‡   c                 C   sø   |\}}}}|j \}}	d}
td|
 || | dkr2dnd|d�}|dd…dd…f }tj||fd	d
�}tj |¡t||	ƒks|t‚tj||f }|r˜|d }n ||j	d	d
� }|| 	¡  }d	}| 
||¡ |dd… }|jt |¡ksät‚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.
    rg   r<   rh   ri   rj   rk   NrF   r   rm   r€   r�   )rz   r   r7   rƒ   r   r„   rP   rT   r…   r8   rs   rt   ru   rv   r"   rw   r†   r/   r/   r2   Ú test_ridge_regression_vstacked_Xñ   s.    
û
rˆ   c                 C   s8  |\}}}}|j \}}	d}
t|
|| | dkr.dnd|d�}tf |Ž}|rp|dd…dd…f }|d }|dd… }nd}| ||¡ ||	ksŒ|s®|jt |¡ks t‚t|j	|ƒ n†t| 
|¡|ƒ t|| | |ƒ tj tj|j|j	f ¡tj tj||f ¡k�st‚tjdd	� |jt |¡k�s(t‚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   rh   ri   rj   rk   NrF   ú1Ridge does not provide the minimum norm solution.©Úreason)rz   rq   r   rs   rt   ru   rv   rT   r"   rw   Úpredictr7   r   rY   r…   Úxfail)re   rf   rd   rZ   r1   ra   r{   r`   rB   rC   rb   r?   r|   r}   r/   r/   r2   Ú!test_ridge_regression_unpenalized  s8    
û
ÿrŽ   c                 C   sr  |\}}}}|j \}}	d}
t|
|| | dk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sšt‚| ||¡ ||	ks²|sî|j	t
 |¡ksÆt‚| dkrÖt
 ¡  t|jtj||f ƒ n€t| |¡|ƒ tj tj|j	|jf ¡tj tj|||f ¡k�s6t‚t
jdd� |j	t
 |¡k�sXt‚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   rh   ri   rj   rk   NrF   r   rE   rm   r)   r‰   rŠ   )rz   r   r7   rƒ   r   r„   rP   rT   rs   rt   ru   rv   Úskipr"   rw   r…   rŒ   rY   r�   ©re   rf   rd   rZ   r1   ra   r{   r`   rB   rC   rb   r|   r}   r/   r/   r2   Ú,test_ridge_regression_unpenalized_hstacked_XR  s<    
ûÿr‘   c                 C   sV  |\}}}}|j \}}	d}
t|
|| | dk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s–t‚tj||f }| 	||¡ ||	ks¼|sÞ|j
t |¡ksÐt‚t|j|ƒ ntt| |¡|ƒ tj tj|j
|jf ¡tj tj||f ¡k�s$t‚tjd	d
� |j
t |¡k�sFt‚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   rh   ri   rj   rk   NrF   rm   r‰   rŠ   )rz   r   r7   rƒ   r   r„   rP   rT   r…   rs   rt   ru   rv   r"   rw   rŒ   rY   r�   r�   r/   r/   r2   Ú,test_ridge_regression_unpenalized_vstacked_X‰  s:    
ûÿr’   ÚsparseXrb   rg   ç{®Gáz„?c                 C   s<  |r.|r| t krt ¡  n|s.| tkr.t ¡  |\}}}}	|j\}
}tjdd|
d�}t||| | dkrhd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}|rút |¡}|j|||d� |	d	d
… }	|jt |¡k�s,t‚t|j|	ƒ d	S )zÝTest 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   rE   rJ   rh   ri   rj   é † )rb   rf   re   rl   Úmax_iterrD   NrF   rm   ro   )ÚSPARSE_SOLVERS_WITH_INTERCEPTru   r�   Ú SPARSE_SOLVERS_WITHOUT_INTERCEPTrz   r]   rU   r   r7   rƒ   r…   r8   r4   r5   rs   rt   rv   rT   r"   rw   )re   rf   r“   rb   rd   rZ   r1   ra   r`   r{   rB   rC   Úswr|   r}   r/   r/   r2   Ú$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 )NrF   rE   r”   ©rb   )	Ú
y_diabetesÚreshaper   Ú
X_diabetesr7   ÚdotrW   r   r$   )ra   r{   ÚKZ	dual_coefZcoef2r/   r/   r2   Útest_primal_dual_relationshipñ  s    r¡   c               
   C   sZ   t j d¡} |  d¡}|  dd¡}d}tjt|d�� t||dddd d	d
� W 5 Q R X d S )Nr   é   rI   z3sparse_cg did not converge after [0-9]+ iterations.©Úmatchrg   r(   ç        rE   )rb   re   rl   r–   Úverbose)r7   rQ   rR   Úrandnru   Úwarnsr	   r   )r]   ra   r1   Zwarning_messager/   r/   r2   Ú&test_ridge_regression_convergence_failú  s    
      ÿr©   c                  C   sX  t j d¡} d\}}|  ||¡}|  |¡}|d d …t jf }t j|d| f }tƒ }| ||¡ |jj	|fksrt
‚|jj	dks‚t
‚t|jt jƒs”t
‚t|jtƒs¤t
‚| ||¡ |jj	d|fksÄt
‚|jj	dksÔt
‚t|jt jƒsæt
‚t|jt jƒsøt
‚| ||¡ |jj	d|fk�st
‚|jj	dk�s,t
‚t|jt jƒ�s@t
‚t|jt jƒ�sTt
‚d S )Nr   ©r¢   rI   rE   r/   ©rE   r<   )r<   )r7   rQ   rR   r§   ÚnewaxisÚc_r   rs   rw   rz   rT   rt   Ú
isinstanceZndarrayÚfloat)r]   rB   rC   r1   ra   ZY1ÚYÚridger/   r/   r2   Ú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ª   rg   rE   )	r7   rQ   rR   r§   r­   r   rs   rt   r#   )r]   rB   rC   r1   ra   r°   r±   r}   r/   r/   r2   Útest_ridge_intercept#  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¢   rA   r¥   F©rb   rf   ©rf   )	r7   rQ   rR   r§   r   r
   rs   r#   rw   )r]   rB   rC   ra   r1   r±   Zolsr/   r/   r2   Útest_ridge_vs_lstsq5  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 5 Q R X d S )Né*   )é   rI   r¢   c                    s&   g | ]\}}t |d d� ˆ |¡j‘qS )r)   ©rb   re   ©r   rs   rw   )Ú.0rb   Útargetr0   r/   r2   Ú
<listcomp>V  s   ÿz3test_ridge_individual_penalties.<locals>.<listcomp>c                    s$   g | ]}t ˆ|d d� ˆ ˆ¡j‘qS )çê-�™—q=)rb   re   rl   rº   )r»   re   ©r1   Z	penaltiesra   r/   r2   r½   \  s   ÿ)r'   r(   r*   r)   r+   r,   rF   r›   zCNumber of targets and number of penalties do not correspond: 4 != 5r£   )r7   rQ   rR   r§   ÚarangeÚarrayÚziprW   r$   r   ru   ÚraisesÚ
ValueErrorrs   )	r]   rB   rC   Ú	n_targetsÚcoef_choleskyZcoefs_indiv_penZcoef_indiv_penr±   Úerr_msgr/   r¿   r2   Útest_ridge_individual_penaltiesJ  s&    



þÿþrÈ   Ún_colr/   r«   )é   c           	      C   sÀ   t j d¡}| dd¡}| d¡}| t|ƒ¡}|jd| žŽ }|jd| žŽ }tt |¡||ƒ}t  ||d d …d f |  |d d …d f g¡}t	| 
|¡| 
|¡ƒ t	|j 
|¡|j 
|¡ƒ d S )Nr   é   é   é	   )rË   )rÍ   )r7   rQ   rR   r§   Úlenr   r4   r5   Zhstackr"   rŸ   rW   )	rÉ   r]   r1   ZX_mÚsqrt_swr°   ÚAÚoperatorZreference_operatorr/   r/   r2   Útest_X_CenterStackOpj  s    
.rÒ   rz   )rI   rE   )é   rÍ   )rÊ   é   )r<   r<   )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
¡}t ||d d …d f  ¡}	tdd�}
|
 |	|¡\}}t||ƒ t||ƒ d S ©Nr   rE   )rn   ÚweightsTrµ   )r7   rQ   rR   r§   ry   rz   Ú	chisquareÚsqrtÚaveragerŸ   rW   r4   r5   r   Z_compute_gramr"   )rz   rÕ   r]   r1   r™   rÏ   ÚX_meanÚ
X_centeredZ	true_gramÚX_sparseÚgcvZcomputed_gramÚcomputed_meanr/   r/   r2   Útest_compute_gramx  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	 
|¡}t ||d d …d f  ¡}	tdd�}
|
 |	|¡\}}t||ƒ t||ƒ d S rÖ   )r7   rQ   rR   r§   ry   rz   rØ   rÙ   rÚ   rW   rŸ   r4   r5   r   Z_compute_covariancer"   )rz   rÕ   r]   r1   r™   rÏ   rÛ   rÜ   Ztrue_covariancerÝ   rÞ   Zcomputed_covrß   r/   r/   r2   Útest_compute_covarianceŒ  s    



rá   éd   r   rI   rE   ç      *@ç      >@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)	rB   rC   Ún_informativerÅ   ÚbiasÚnoiseÚshuffler{   rD   rE   r   r¥   )
r   r7   ÚasarrayrQ   rR   Zbinomialrz   ÚcopyrŸ   Úabs)rB   rC   Úproportion_nonzerorå   rÅ   ræ   ÚX_offsetrç   rè   r{   ÚpositiverD   r1   ra   ÚcÚmaskZ	removed_Xr/   r/   r2   Ú_make_sparse_offset_regression   s8    ÷ÿ

rñ   zsolver, sparse_Xc                 c   s&   | ]\}}|r|d ks||fV  qdS ))r(   ÚridgecvNr/   )r»   re   Úsparse_Xr/   r/   r2   Ú	<genexpr>Ï  s    ûrô   rò   z"n_samples,dtype,proportion_nonzero)r¸   Úfloat32çš™™™™™¹?)é(   rõ   rg   )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�}	|rrt |¡}| dkrˆt|gd�}nt| d|d�}| ||	¡ t|j	|
j	ddd� t|j
|
j
ddd� d S )Nrg   gÍÌÌÌÌÌì?g      I@g     @@rI   é   )ræ   rC   rì   rç   rD   rB   r'   )re   rb   F)rê   rò   ©Úalphasrj   )re   rl   rb   rG   ©r‚   Úrtol)rñ   r   r   rs   Úastyper4   r5   r   r"   rw   rt   )re   rì   rB   Údtyperó   rú   rb   rç   r1   ra   Z	svd_ridger±   r/   r/   r2   Útest_solver_consistencyÍ  s,    ú

r  Úgcv_modeÚeigenÚX_constructorÚX_shape)rË   rÌ   )rË   r¸   zy_shape, noise)©rË   rg   )©rË   rE   rä   )©rË   rÊ   ç     Àb@c              	   C   sÎ   |\}}t |ƒdkr|d nd}t|||dd|dd�\}	}
|
 |¡}
dd	d
ddg}t|||dd�}t| ||d�}| |	|
¡ ||	ƒ}| ||
¡ |jt |j¡ks¦t‚t	|j
|j
dd� t	|j|jdd� d S )Nr<   rF   rE   r   Fr¢   ©rB   rC   rÅ   rD   rè   rç   rå   rG   rö   rg   ç      $@ç     @�@Úneg_mean_squared_error©Úcvrf   rý   Úscoring)r  rf   rý   ©rÿ   )rÎ   rñ   r�   r   rs   Úalpha_ru   rv   rT   r"   rw   rt   )r  r  r  Úy_shaperf   rç   rB   rC   rÅ   r1   ra   rý   Ú	loo_ridgeÚ	gcv_ridgeÚX_gcvr/   r/   r2   Útest_ridge_gcv_vs_ridge_loo_cvþ  s<    ù
	
üýr  c            	   	   C   s¬   d} d\}}d}t |||ddddd�\}}dd	d
ddg}t|d|| d�}td|| d�}| ||¡ | ||¡ |jt |j¡ks„t‚t|j|jdd� t|j	|j	dd� d S )NZexplained_variance)rI   r¢   rE   r   Fr¢   r  rG   rö   rg   r  r  Tr  )rf   rý   r  r  )
rñ   r   rs   r  ru   rv   rT   r"   rw   rt   )	r  rB   rC   rÅ   r1   ra   rý   r  r  r/   r/   r2   Útest_ridge_loo_cv_asym_scoring1  s2    ù

   ÿr  rC   rÌ   r¸   zy_shape, fit_intercept, noise)r  Trg   )r  Tg      4@)r	  Tr
  )r	  Frä   c                    s  dddddg}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�}|| 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�sÚt‚t|ˆdd� t|j|jdd� t|j|jdd� d S )NrG   rö   rg   r  r  r   r<   rF   rE   rË   F)rB   rC   rÅ   rD   rè   rç   rÊ   )Zn_splits)Úgroupsr  )rý   r  r  rf   r´   ©r  c                    s"   g | ]}t jˆˆ |k d d�‘qS )r   rm   )r7   rr   )r»   Úi©ÚindicesZkfold_errorsr/   r2   r½     s    z1test_ridge_gcv_sample_weights.<locals>.<listcomp>T)rý   Ústore_cv_valuesr  rf   ro   r  )r7   rQ   rR   rÎ   rñ   r�   r§   rP   r   ÚintÚrepeatrÀ   rz   r¯   r   Úsplitr   rs   r   r  r   ré   Ú
cv_values_Úindexru   rv   rT   r"   rw   rt   )r  r  rf   rC   r  rç   rý   r]   rÅ   r1   ra   rp   ZX_tiledZy_tiledr  ZsplitsZkfoldZ	ridge_regZpredictionsr  r  Z
gcv_errorsr/   r  r2   Útest_ridge_gcv_sample_weightsO  sb    ú


üÿ
ü"r%  Úsparsez2mode, mode_n_greater_than_p, mode_p_greater_than_n)Nr'   r  )Úautor'   r  )r  r  r  )r'   r'   r'   c                 C   sH   t ddd�\}}| rt |¡}t||ƒ|ks0t‚t|j|ƒ|ksDt‚d S )Nr¢   r<   )rB   rC   )r   r4   r5   r   rT   rW   )r&  ÚmodeZmode_n_greater_than_pZmode_p_greater_than_nr1   r`   r/   r/   r2   Útest_check_gcv_mode_choice—  s
    
r)  c                 C   s¦  t jd }g }| tk}t|d�}| | t ƒt¡ |j}| |¡ t}t	t
dd�}td|d�}||jƒ| t ƒtƒ |jt |¡ks„t‚dd„ }	t	|	ƒ}td|d�}
||
jƒ| t ƒtƒ |
jt |¡ksÈt‚tdƒ}td|d�}| | t ƒt¡ |jt |¡k�st‚| tk�r<|j| t ƒtt |¡d	� |jt |¡k�s<t‚t ttf¡j}| | t ƒ|¡ | | t ƒ¡}| | t ƒt¡ | | t ƒ¡}tt ||f¡j|d
d� |S )Nr   rµ   F)Zgreater_is_better)rf   r  c                 S   s   t | |ƒ S r.   )r   )Úxra   r/   r/   r2   ÚfuncÁ  s    z_test_ridge_loo.<locals>.funcr  ro   çñhãˆµøä>r  )rž   rz   r3   r   rs   rœ   r  Úappendr&   r   r   r   ru   rv   rT   r   r7   ry   ÚvstackrW   rŒ   r"   )Úfilter_rB   Úretrf   Z	ridge_gcvr  Úfr  Z
ridge_gcv2r+  Z
ridge_gcv3ZscorerZ
ridge_gcv4r°   ÚY_predr:   r/   r/   r2   Ú_test_ridge_loo«  s>    



r3  c                 C   sª   t ƒ }| | tƒt¡ | | tƒ¡ t|jjƒdks8t‚t	|j
ƒtjksLt‚tdƒ}|j|d� | | tƒt¡ | | tƒ¡ t|jjƒdks’t‚t	|j
ƒtjks¦t‚d S )NrE   r¢   r  )r   rs   rž   rœ   rŒ   rÎ   rw   rz   rT   Útypert   r7   rø   r   Ú
set_params)r/  Úridge_cvr  r/   r/   r2   Ú_test_ridge_cvá  s    r7  zridge, make_dataset)r  c                 C   s.   |ddd�\}}|   ||¡ t| dƒr*t‚d S )Né   r·   ©rB   rD   r#  )rs   ÚhasattrrT   )r±   Úmake_datasetr1   ra   r/   r/   r2   Ú#test_ridge_gcv_cv_values_not_storedò  s    	r<  r  c                 C   sL   |ddd�\}}| j d|d� |  ||¡ t| dƒs8t‚t| jtƒsHt‚d S )Nr8  r·   r9  F)r  r  Úbest_score_)r5  rs   r:  rT   r®   r=  r¯   )r±   r;  r  r1   ra   r/   r/   r2   Útest_ridge_best_score   s
    r>  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$t‚|jj|fk�s8t‚|jj|tˆƒ|fk�sTt‚tdddd� ˆ |¡}|j
j|fk�s~t‚|jj|fk�s’t‚|jj||dfk�sªt‚tˆddd� ˆ |d d …df ¡}t  |j
¡�sÞt‚t  |j¡�sðt‚|jj|tˆƒfk�s
t‚tˆddd� ˆ |¡}t	||j
ƒ tt|j
d� ˆ |¡j|jƒ tˆtƒ dd�}d}tjt|d�� | ˆ |¡ W 5 Q R X tˆddd�}tjt|d�� | ˆ |¡ W 5 Q R X d S )Nr·   )r¸   r¢   rÊ   r   rE   gš™™™™™©?r<   rG   )rE   râ   éè  c                    s    g | ]}t ˆd � ˆ |¡j‘qS )rü   )r   rs   r  )r»   r¼   ©r1   rý   r/   r2   r½   !  s     z6test_ridge_cv_individual_penalties.<locals>.<listcomp>T)rý   Úalpha_per_targetr›   )rý   rA  r  Úr2)rý   rA  r  )rý   r  rA  z3cv!=None and alpha_per_target=True are incompatibler£   r8  )r7   rQ   rR   r§   rŸ   ry   rW   r   rs   r%   r  r$   r   rw   rz   rT   r=  r#  rÎ   Zisscalarr   ru   rÃ   rÄ   )r]   rB   rC   rÅ   ra   Zoptimal_alphasr6  Úmsgr/   r@  r2   Ú"test_ridge_cv_individual_penalties  sd    
"&ÿ&þ
ýÿ ÿ ÿ ÿ ÿrD  c                 C   s2   t dd�}| | tƒt¡ t | | tƒt¡d¡S )NFrµ   r¢   )r   rs   rž   rœ   r7   Úroundrx   )r/  r±   r/   r/   r2   Ú_test_ridge_diabetesU  s    
rF  c                 C   s’   t  ttf¡j}tjd }tdd�}| | tƒ|¡ |jjd|fksHt	‚| 
| tƒ¡}| | tƒt¡ | 
| tƒ¡}tt  ||f¡j|dd� d S )NrE   Frµ   r<   rÊ   ©Údecimal)r7   r.  rœ   rW   rž   rz   r   rs   rw   rT   rŒ   r$   )r/  r°   rC   r±   r2  r:   r/   r/   r2   Ú_test_multi_ridge_diabetes[  s    

rI  c                 C   s¾   t  t¡jd }tjd }tƒ tƒ fD ]L}| | tƒt¡ |jj||fksNt	‚| 
| tƒ¡}t  t|k¡dks&t	‚q&tdƒ}t|d�}| | tƒt¡ | 
| tƒ¡}t  t|k¡dksºt	‚d S )Nr   rE   gHáz®Gé?r¢   r  gš™™™™™é?)r7   ÚuniqueÚy_irisrz   ÚX_irisr   r   rs   rw   rT   rŒ   r8   r   )r/  Ú	n_classesrC   Úregr:   r  r/   r/   r2   Ú_test_ridge_classifiersi  s    

rO  r  Zaccuracyr¢   r/  c                 C   s>   t |ƒrt|ƒn|}t||d�}| | tƒt¡ | tƒ¡ d S )N)r  r  )Úcallabler   r   rs   rL  rK  rŒ   )r/  r  r  Úscoring_Úclfr/   r/   r2   Ú"test_ridge_classifier_with_scoringy  s    rS  c                 C   sj   dd„ }t jdddd�}t|t|ƒ|d�}| | tƒt¡ |jt 	d¡ksNt
‚|jt 	|d	 ¡ksft
‚d S )
Nc                 S   s   dS )Nçáz®GáÚ?r/   r9   r/   r/   r2   Ú_dummy_scoreŒ  s    z:test_ridge_regression_custom_scoring.<locals>._dummy_scoreéþÿÿÿr<   r¢   )Únum)rý   r  r  rT  r   )r7   Zlogspacer   r   rs   rL  rK  r=  ru   rv   rT   r  )r/  r  rU  rý   rR  r/   r/   r2   Ú$test_ridge_regression_custom_scoring†  s    rX  c                 C   sh   t ddd�}| | tƒt¡ | | tƒt¡}t ddd�}| | tƒt¡ | | tƒt¡}||ksdt‚d S )Nr,  F)rl   rf   rG   )r   rs   rž   rœ   rx   rT   )r/  r±   rx   Zridge2Zscore2r/   r/   r2   Ú_test_tolerance—  s    rY  c                 C   s2   | t ƒ}| tƒ}|d k	r.|d k	r.t||dd� d S )NrÊ   rG  )r3   r6   r$   )Ú	test_funcZ	ret_denseZ
ret_sparser/   r/   r2   Úcheck_dense_sparse£  s    r[  rZ  c                 C   s   t | ƒ d S r.   )r[  )rZ  r/   r/   r2   Útest_dense_sparse­  s    r\  c                  C   sd  t  ddgddgddgddgddgg¡} dddddg}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¡} ddddg}td d�}| | |¡ tdd�}| | |¡ t|jƒdk�sDt‚t	|j
|j
ƒ t	|j|jƒ d S )Nç      ð¿r   çš™™™™™é¿rg   r¥   rE   rF   ©Úclass_weightrù   rG   Úbalancedr<   )r7   rÁ   r   rs   r%   rŒ   rÎ   Zclasses_rT   r$   rw   rt   )r1   ra   rN  Zregar/   r/   r2   Útest_class_weights¼  s(    (

"

rb  rN  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.ra  r_  rE   râ   rg   g      Y@)r   rE   r<   r<   N)	rs   ÚirisÚdatar¼   r#   rw   r7   ry   rz   )rN  Úreg1Úreg2rp   r`  r/   r/   r2   Ú"test_class_weight_vs_sample_weightß  s$    


rg  c                  C   sš   t  ddgddgddgddgddgg¡} dddddg}td dd	dgd
�}| | |¡ tddidd	ddgd
�}| | |¡ t| ddgg¡t  dg¡ƒ d S )Nr]  r   r^  rg   r¥   rE   rF   r”   rö   )r`  rý   rG   rI   gš™™™™™É¿r<   )r7   rÁ   r   rs   r%   rŒ   )r1   ra   rN  r/   r/   r2   Útest_class_weights_cvü  s    (rh  r  c              	   C   sê   t j d¡}d}d}| ||¡}dddg}t|ƒ}t| ƒrBt| ƒn| }t|d d|d�}| |¡}	| ||	¡ |j	j
||fks€t‚d	}
| ||
¡}	| ||	¡ |j	j
||
|fks²t‚td	d| d
�}tjtdd�� | ||	¡ W 5 Q R X d S )Nr·   rÌ   r¢   rö   rg   r  T©rý   r  r  r  rÊ   )r  r  r  zcv!=None and store_cv_valuesr£   )r7   rQ   rR   r§   rÎ   rP  r   r   rs   r#  rz   rT   ru   rÃ   rÄ   )r  r]   rB   rC   r*  rý   Ún_alphasrQ  Úrra   rÅ   r/   r/   r2   Útest_ridgecv_store_cv_values  s$    

rl  c           	   	   C   s  t  ddgddgddgddgddgg¡}t  dddddg¡}|jd }ddd	g}t|ƒ}t| ƒrht| ƒn| }t|d d
|d�}d}| ||¡ |jj|||fks¢t	‚t  dddddgdddddgdddddgg¡ 
¡ }|jd }| ||¡ |jj|||fk�st	‚d S )Nr]  r   r^  rg   r¥   rE   rF   rö   r  Tri  )r7   rÁ   rz   rÎ   rP  r   r   rs   r#  rT   Z	transpose)	r  r*  ra   rB   rý   rj  rQ  rk  rÅ   r/   r/   r2   Ú(test_ridge_classifier_cv_store_cv_values+  s*    (

   ÿ&ÿ
rm  Ú	Estimatorc                 C   sŽ   t j d¡}d}d\}}| tkr,| |¡}n| dd|¡}| ||¡}| |d�}|j|ksltd| j› d�ƒ‚| 	||¡ t
|jt  |¡ƒ d S )Nr   ©rö   rg   r  ©r¢   r¢   r<   rü   z`alphas` was mutated in `z
.__init__`)r7   rQ   rR   r   r§   Úrandintrý   rT   Ú__name__rs   r%   ré   )rn  r]   rý   rB   rC   ra   r1   Z	ridge_estr/   r/   r2   Útest_ridgecv_alphas_conversionH  s    
ÿþrs  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sžt‚t|j|
jjƒ qd S )
Nr   ro  )©r8  r¢   rª   rg   r¢   )rý   r  ro   rb   r  )r7   rQ   rR   r§   Úrandr   r   rs   r   r   r  Zbest_estimator_rb   rT   r$   rw   )r]   rý   rB   rC   ra   r1   rp   r  rò   Ú
parametersÚgsr/   r/   r2   Útest_ridgecv_sample_weight]  s    
rx  c               
      s(  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 5 Q R X d}
tj	t
|
d�� |	ƒ  W 5 Q R X q&d S )Nr<   rÊ   r·   rE   rg   g       @r›   c                      s   ˆ  ˆ ˆˆ¡ d S r.   ©rs   r/   )r1   r±   Úsample_weights_not_OKra   r/   r2   Úfit_ridge_not_ok�  s    zStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_okc                      s   ˆ  ˆ ˆˆ¡ d S r.   ry  r/   )r1   r±   Úsample_weights_not_OK_2ra   r/   r2   Úfit_ridge_not_ok_2�  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£   )r7   rQ   rR   rÂ   r§   r¬   r   rs   ru   rÃ   rÄ   )Ú
n_samplessÚn_featuressr]   rB   rC   Zsample_weights_OKZsample_weights_OK_1Zsample_weights_OK_2r{  r}  rÇ   r/   )r1   r±   rz  r|  ra   r2   Ú9test_raises_value_error_if_sample_weights_greater_than_1du  s.    

r€  c                  C   sÐ   ddg} ddg}t j d¡}tjtjtjtjtjg}t	ddd�}t	ddd�}t
| |ƒD ]t\}}| ||¡}| |¡}	| |¡d d }
|D ]>}||ƒ}|j||	|
d� |j||	|
d� t|j|jd	d
� qŠqVd S )Nr<   rÊ   r·   rg   Fr´   rE   ro   r8  rG  )r7   rQ   rR   r4   Z
coo_matrixr5   Z
csc_matrixZ
lil_matrixZ
dok_matrixr   rÂ   r§   rs   r$   rw   )r~  r  r]   Zsparse_matrix_convertersÚsparse_ridgeÚdense_ridgerB   rC   r1   ra   Zsample_weightsZsparse_converterrÝ   r/   r/   r2   Ú&test_sparse_design_with_sample_weightsœ  s(    û
rƒ  c                  C   sP   t  ddgddgddgddgddgg¡} dddddg}tdd	�}| | |¡ d S )
Nr]  r   r^  rg   r¥   rE   rF   )rE   rI   râ   rü   )r7   rÁ   r   rs   )r1   ra   r±   r/   r/   r2   Útest_ridgecv_int_alphas»  s    (
r„  zparams, err_type, err_msgrý   )rE   rF   iœÿÿÿz alphas\[1\] == -1, must be > 0.0)gš™™™™™¹¿r]  g      $Àz"alphas\[0\] == -0.1, must be > 0.0)rE   rg   Ú1z1alphas\[2\] must be an instance of float, not strc              	   C   sR   d\}}t  ||¡}t  dd|¡}tj||d�� | f |Ž ||¡ W 5 Q R X dS )z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.rp  r   r<   r£   N)r]   r§   rq  ru   rÃ   rs   )rn  r?   Zerr_typerÇ   rB   rC   r1   ra   r/   r/   r2   Útest_ridgecv_alphas_validationÄ  s
    r†  c                 C   sL   d\}}t  ||¡}| tkr(t  |¡}nt  dd|¡}| dd� ||¡ dS )zÉCheck 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.
    rp  r   r<   rE   rü   N)r]   r§   r   rq  rs   )rn  rB   rC   r1   ra   r/   r/   r2   Útest_ridgecv_alphas_scalarà  s    r‡  c                      s&   d‰t ‰ dˆ ‰‡ ‡‡‡fdd„‰d S )Nz5This is not a solver (MagritteSolveCV QuantumBitcoin)zQKnown solvers are 'sparse_cg', 'cholesky', 'svd' 'lsqr', 'sag' or 'saga'. Got %s.c               	      sH   t  d¡} t  d¡}t| |dˆd� tjˆ ˆd�� ˆƒ  W 5 Q R X d S )NrÊ   rg   r¹   r£   )r7   Úeyery   r   ru   rÃ   ©r1   ra   ©Ú	exceptionr+  ÚmessageZwrong_solverr/   r2   r+  þ  s
    

z=test_raises_value_error_if_solver_not_supported.<locals>.func)rÄ   r/   r/   rŠ  r2   Ú/test_raises_value_error_if_solver_not_supportedò  s    ÿÿr�  c                  C   s6   t ddd�} |  tt¡ | jjd tjd ks2t‚d S )Nr(   rE   )re   r–   r   )r   rs   rž   rœ   rw   rz   rT   )rN  r/   r/   r2   Útest_sparse_cg_max_iter  s    rŽ  c                  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 kslt
‚qld S )	Nr<   rE   rA   )r+   r,   r*   r¾   )re   r–   rl   )r(   r'   r)   rö   )rž   rœ   r7   ZtilerW   Úranger   rs   r%   Zn_iter_rT   )rÅ   r1   ra   Zy_nr–   re   rN  r/   r/   r2   Útest_n_iter  s    
r�  Úlbfgsr'  Ú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t 	|¡||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
    r‘  r¸   )rC   rD   rî   Nrg   r   rN   r'  r(   r¾   )re   rl   rî   ro   g�íµ ÷Æ >r  )rñ   r7   rQ   rR   rU   rz   r   rs   r4   r5   r"   rt   rw   )re   r’  rZ   rî   r1   ra   rp   r]   Zdense_solverr‚  r�  r/   r/   r2   Útest_ridge_fit_intercept_sparse   s"      ÿ
r“  c              	   C   sX   t ddd�\}}t |¡}t| d�}d | ¡}tjt|d�� | ||¡ W 5 Q R X d S )Nr¸   r   )rC   rD   ©re   zsolver='{}' does not supportr£   )	rñ   r4   r5   r   Úformatru   rÃ   rÄ   rs   )re   r1   ra   ÚX_csrr�  rÇ   r/   r/   r2   Ú%test_ridge_fit_intercept_sparse_errorF  s    


r—  c           
   	   C   s
  t dd|dd�\}}| r<tj |¡}d|j|jd d� }nd }t |¡}tddd	d
dd�}t	f |Ž}t	f |Ž}	|j
|||d� t ¡ �" t dt¡ |	j
|||d� W 5 Q R X t|j|	jdd� t|j|	jdd� tjtdd�� t	dd	dd d� 
||¡ W 5 Q R X d S )Nr¢   r¸   g      @)rC   rB   rD   rí   rg   r   rN   r+   Trj   r•   )rb   re   rf   rl   r–   ro   Úerrorç-Cëâ6?r  z"sag" solver requires.*r£   rG   )re   rf   rl   r–   )rñ   r7   rQ   rR   rU   rz   r4   r5   rq   r   rs   ÚwarningsÚcatch_warningsÚsimplefilterÚUserWarningr"   rt   rw   ru   r¨   )
r’  rZ   r1   ra   r]   rp   r–  r?   r‚  r�  r/   r/   r2   Ú#test_ridge_fit_intercept_sparse_sagP  s8       ÿ

    ÿ


rž  Úreturn_interceptrp   r?  Úarr_typec                 C   sþ   t dƒ}| dd¡}dddg}t ||¡}d}| r6d}||7 }||ƒ}	d	\}
}trVd
nd}|dk}|dkr¤| r¤tjtdd�� t|	||
||| ||d� W 5 Q R X 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·   r?  rÊ   rE   r<   rö   r¥   g     ˆÃ@)rG   ç�íµ ÷Æ°>rG   r™  r‘  )r+   r'  zIn Ridge, only 'sag' solverr£   )rb   re   rp   rŸ  rî   rl   N)rb   re   rp   rî   rŸ  rl   r   ©rÿ   r‚   )
r!   ru  r7   rŸ   r    ru   rÃ   rÄ   r   r"   )rŸ  rp   r   re   r]   r1   Z
true_coefsra   Ztrue_interceptZ	X_testingrb   rl   r‚   rî   Úoutr{   r}   r/   r/   r2   Ú.test_ridge_regression_check_arguments_validityk  sP    
ø
ør¤  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s¸t‚|j|jksÈt‚| |¡j|jksÞt‚| |¡j|jksôt‚t|j
|j
dd	d
� d S )Nr   rg   r‘  rt  r<   éô  )rb   re   r–   rl   rî   r™  gü©ñÒMb@?r¢  )r7   rQ   rR   r§   r   rõ   ZfinfoÚ
resolutionr   rs   rw   r  rT   rŒ   r"   )re   r]   rb   rî   rB   rC   ÚX_64Úy_64ÚX_32Úy_32rl   Úridge_32Úcoef_32Úridge_64Úcoef_64r/   r/   r2   Útest_dtype_match¨  s@    
    ÿ    ÿ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s t‚|j
|j
ks°t‚|	 |¡j
|j
ksÆt‚| |¡j
|j
ksÜt‚t|	j	|j	dd� d S )	Nr   rg   r   )r8  rÔ   r<   r)   r¹   r¢   rG  )r7   rQ   rR   rÁ   r§   r   rõ   r   rs   rw   r  rT   rŒ   r#   )r]   rb   rB   rC   Zn_targetr§  r¨  r©  rª  r«  r¬  r­  r®  r/   r/   r2   Útest_dtype_match_choleskyÍ  s$    
r°  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s¼t‚|
t j j
t jksÒt‚t|
t j |
t j |d� d S )Nrt  r”   rg   r‘  r(   rG   r,  r¥  rj   F)	rb   re   rD   rp   rî   r–   rl   Zreturn_n_iterrŸ  r�   )r7   rQ   rR   r§   rŸ   rq   rõ   rø   r   r   r  rT   r"   )re   rú   rD   rB   rC   r1   r{   ra   rb   rî   Úresultsr‚   Zcurrent_dtyper/   r/   r2   Ú%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·   ©rD   r<   r+   r”  )r   r7   Zasfortranarrayr   rs   r‰  r/   r/   r2   Ú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 |Ž ||¡}| |¡}|j|jksZt‚t|dd…df |dd…df ƒ t	dd� ||¡ dS )	zRCheck that multilabel classification is supported and give meaningful
    results.rE   r   )rM  rD   rF   rm   Nr+   r”  )
r   r�   r7   rƒ   rs   rŒ   rz   rT   r%   r   )Ú
Classifierr?   r1   ra   r°   rR  r2  r/   r/   r2   Útest_ridgeclassifier_multilabel  s    
"r¶  rG   rö   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¡s‚t‚dS )z:Test that positive Ridge finds true positive coefficients.rE   r<   rÊ   rA   r¢   r8  rÔ   rÌ   rH   r¸   T©rb   rî   re   rf   r   N)r7   rÁ   rŸ   r   rs   rS   rw   rT   )re   rf   rb   r1   r{   r}   ra   r|   r/   r/   r2   Ú#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 )z¸Test 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ö   rg   rE   rN   r   r”   )TFrj   )rb   rî   rf   rl   r¡  rþ   N)r7   rQ   rR   r§   rU   rz   rV   r   r-  rs   rw   r"   )
rf   rb   r]   r1   r{   r}   ra   r±  rî   r|   r/   r/   r2   Ú%test_ridge_ground_truth_positive_testC  s$       ÿ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 5 Q R X tjtdd�� t|||d| dd�\}}W 5 Q R X dS )z5Test input validation for positive argument in Ridge.rö   rE   r<   rÊ   rA   rF   TFr·  zdoes not support positiver£   zonly 'lbfgs' solver can be used)rî   re   rŸ  N)r7   rÁ   r   ru   rÃ   rÄ   rs   r   )re   rb   r1   r{   ra   r|   r`   r/   r/   r2   Ú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snt‚t|ƒD ]}|||d�}||ksvt‚qvdS )z?Check ridge loss consistency when positive argument is enabled.r¹  r·   ©rB   rC   rD   rö   râ   Nr€   c                    sp   | j }|d k	r6tj |¡}| j|jd|| jjd� }n| j}dt ˆˆ |  | d ¡ dˆ t |d ¡  S )Nr   rN   r   r<   )rt   r7   rQ   rR   rw   rU   rz   rr   )r|   rD   Znoise_scaler}   r]   r{   ©r1   rb   ra   r/   r2   Ú
ridge_lossy  s    &ÿz,test_positive_ridge_loss.<locals>.ridge_lossr›   T)rb   rî   r³  )Nr€   )r   r   rs   rT   r�  )	rb   Zn_checksr¾  r|   Zmodel_positiveZlossZloss_positiverD   Zloss_perturbedr/   r½  r2   Útest_positive_ridge_lossr  s    r¿  c                 C   sf   t dddd�\}}t |d¡}t | g¡} ddddœ}t||| f|Ž}t||| ƒ}t||d	d
d� dS )zETest that LBGFS gets almost the same coef of svd when positive=False.r¹  r·   r¼  rE   Fg¼‰Ø—²Òœ<i ¡ )rî   rl   r–   r™  r   rþ   N)r   r7   Zexpand_dimsré   r   r   r"   )rb   r1   ra   ÚconfigZ
coef_lbfgsrÆ   r/   r/   r2   Útest_lbfgs_solver_consistency˜  s    ýrÁ  c               	   C   sb   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 5 Q R X dS )z1Test that LBFGS solver raises ConvergenceWarning.rE   rF   g    _ Âg    _ Br”   r‘  Fr¾   T)rb   re   rf   rl   rî   r–   zlbfgs solver did not converger£   N)r7   rÁ   r   ru   r¨   r	   rs   )r1   ra   r|   r/   r/   r2   Útest_lbfgs_solver_error©  s    úrÂ  rd  Útallc                 C   s   |r"|dks|dkr"| r"t  d¡ tj d¡}d}|dkrD|d }n|d }| ||¡}| |¡}	|rpt |¡}t| d||d	k|d
d�}
t	f |
Žj
||	dd�}|j ¡ }| r²|j}t |	¡}|j
||	|d� t|j|dd� | rìt|j|ƒ |jdd|jd d�}d|dd…< |	dd…  d9  < |j
||	|d� |j ¡ }| �rH|j}|j
|dd…dd…f |	dd… |dd… d� t|j|dd� | �ršt|j|ƒ t	f |
Žjtj|
d  d�}|j
||	tj| d� |dk�rî| �sît  d|› d�¡ t|j|dd� | �rt|j|ƒ |�r| ¡ }tj||d|d … gdd�}t |	|	d|d … g¡}| ¡ }|d|d …  d9  < tj||d|d … gdd�}|�r®t |¡}t |¡}t	f |
Žj
||	|d�}t	f |
Žj
|||d�}t|j|jƒ | �rüt|j|jƒ dS )zžTest that the impact of sample_weight is consistent.

    Note that this test is stricter than the common test
    check_sample_weights_invariance alone.
    r'   )r)   r,   zunsupported configurationr·   r@   rÃ  r<   rg   r‘  r¾   )rf   rb   re   rî   rD   rl   Nro   r¡  r  r”   r   rJ   éûÿÿÿr?  rb   r›   rh   zSolver z- does fail test for scaling of sample_weight.rm   )ru   r�   r7   rQ   rR   ru  r4   r5   rq   r   rs   rw   rê   rt   Z	ones_liker"   rU   rz   r5  Úpir�   Ztoarrayrƒ   )rf   r“   rd  re   rZ   r]   rB   rC   r1   ra   r?   rN  r{   r}   rp   rf  ZX2Úy2Zsample_weight_1Zsample_weight_2re  r/   r/   r2   Ú$test_ridge_sample_weight_consistencyº  s‚    



ú


0 ÿ

rÇ  )râ   râ   r   rI   rE   rã   rä   rä   TFFN)�rš  Ú	itertoolsr   Únumpyr7   ru   Zscipy.sparser&  r4   Zscipyr   Zsklearnr   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    r!   Zsklearn.utils._testingr"   r#   r$   r%   r&   ZSOLVERSr—   r˜   Zload_diabetesZdiabetesrd  r¼   rž   rœ   rÀ   rz   ÚindrQ   rR   r]   rè   Z	load_irisrc  r5   rL  rK  r3   r6   r;   r=   Zfixturerd   ÚmarkZparametrizer~   r‡   rˆ   rŽ   r‘   r’   rš   r¡   r©   r²   r³   r¶   rÈ   rÒ   rà   rá   rñ   r  ré   r  r  r%  r)  r3  r7  r<  r>  rD  rF  rI  rO  rS  rX  rY  r[  r\  rb  rg  rh  rl  rm  rs  rx  r€  rƒ  r„  rÄ   Ú	TypeErrorr†  r‡  r�  rŽ  r�  r“  r—  rž  ry   rÁ   r¤  r¯  r°  r�  r²  r´  r¶  r¸  rº  r»  r¿  rÁ  rÂ  rÇ  r/   r/   r/   r2   Ú<module>   s   $	

F*&(555-	 
           ô
-þþþþ!ýþ'üþ	<üþ	
6þþ
þ	G

úþ
#
 ÿ


'	ýýùþ

$
	
 ÿ7 ÿ
" ÿ 


ýþ
 ÿ

%
