
    Pi F             
        "   d dl Z d dlmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@ d dlAmBZBmCZC d dlDmEZEmFZFmGZGmHZHmIZImJZJ g dZKdZLdZM e
jN                    ZOeOjP        eOjQ        cZRZS ejT        eRjU        d                    ZVejW        X                    d           ZYeYZ                    eV           eVdd         ZVeReV         eSeV         cZRZS e
j[                    Z\e\jP        e\jQ        cZ]Z^d Z_d Z` eja        ddg          d             Zbejc        d                    deK          ejc        d                    ddd g          d!                         Zeejc        d                    deK          ejc        d                    ddd g          d"                         Zfejc        d                    deK          ejc        d                    ddd g          d#                         Zgejc        d                    deK          ejc        d                    ddd g          d$                         Zhejc        d                    deK          ejc        d                    ddd g          d%                         Ziejc        d                    deK          ejc        d                    ddd g          d&                         Zjejc        d                    deK          ejc        d                    ddd g          ejc        d                    d'dgeHz             ejc        d                    d(d)d*g          d+                                                 Zkd, Zld- Zmd. Znd/ Zod0 Zpd1 Zqejc        d                    d2g d3          ejc        d                    d4eH          d5                         Zrejc        d                    d6g d7          ejc        d                    d8dd g          ejc        d                    d4eH          d9                                     Zsejc        d                    d6g d7          ejc        d                    d8dd g          ejc        d                    d4eH          d:                                     Zt	 	 	 	 	 	 	 	 	 	 	 	 ddAZuejc        d                    dBdC  eg dDdgeHz             D                       ejc        d                    dEg dF          dG                         Zvejc        d                    dHdIdJg          ejc        d                    dKejw        geHz             ejc        d                    dLdMdNg          ejc        d                    ddd g          ejc        d                    dOg dP          dQ                                                             ZxdR Zyejc        d                    dHdIdJg          ejc        d                    dKejw        geHz             ejc        d                    dSdTdUg          ejc        d                    dVg dW          dX                                                 Zzejc        d                    d'dgeHz             ejc        d                    dYg dZ          d[                         Z{d\ Z|d] Z}ejc        d                    d^ ed _          ef ed _          efg          d`             Z~ejc        d                    d^ e            ef e            efg          ejc        d                    daddbg          dc                         Zdd Zde Zdf Zdg Zejc        d                    dhddie_g          ejc        d                    dad e*dj          g          ejc        d                    d'dgeHz             dk                                     Zejc        d                    dad e*dj          g          ejc        d                    d'dgeHz             dl                         Zdm Z	 ddnZejc        d                    do e7            e5p          ejc        d                    dqeCege:p          ejc        d                    dr edIs           edIs           e             e            ge:p          dt                                     Zejc        d                    dr edIs           e            g          ejc        d                    du e7            e5p          dv                         Zejc        d                    dw e8d x                    dy             Zejc        d                    dw ee2                    dz             Zejc        d                    d{e|e}eeeef          ejc        d                    d4eH          d|                         Zd} Zejc        d                    d~eef          d             Zd Zejc        d                    dhdde`g          d             Zejc        d                    dhddie_g          d             Zejc        d                    deeg          d             Zejc        d                    daddbg          ejc        d                    deeg          d                         Zd Zd Zejc        d                    dddbgdbdgg          ejc        d                    d'eFeGz   eHz   eIz   eJz             d                         Zd Zejc        d                    deeg          ejc        d                    dddiedfddiedfddiedfg          d                         Zejc        d                    deeg          d             Zd Zejc                            d          d             Zejc        d                    dg d          ejc        d                    ddd g          ejc        d                    d4eH          d                                     Zejc        d                    dg d          ejc        d                    d4eH          d                         Zejc        d                    ddd g          ejc        d                    d4eH          d                         Zejc        d                    dd dg          ejc        d                    dd ej        d          g          ejc        d                    dej        geHz             ejc        d                    dg d          d                                                 Zejc        d                    dg d          d             Zd Zejc        d                    dg d          ejc        d                    d ed>                    d                         Zd Zejc        d                    dei fedadifedadbifg          d             Zejc        d                    dddg          ejc        d                    ddd g          ejc        d                    d(g d          d                                     Zejc        d                    ddd g          ejc        d                    d(g d          d                         Zejc        d                    dg d          d             Zejc        d                    d(g d          d             Zejc        d                    d(g d          d             Zd Zejc        d                    dd dg          ejc        d                    d'dgeHz             ejc        d                    dddg          ejc        d                    deKdgz             d                                                 Zejc        d                    dd dg          ejc        d                    dd dg          ejc        d                    dd>dg          d                                     Zd Zd Zejc        d                    deeg           e	d          d                         Zejc        d                    d e            ef e            efg           e	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_get_namespace_device_dtype_ids_max_precision_float_dtype)yield_namespace_device_dtype_combinationsyield_namespaces)_get_check_estimator_ids)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)_array_api_for_tests check_array_api_input_and_values)	_IS_32BITCOO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS)svd	sparse_cgcholeskylsqrsagsaga)r:   r=   )r:   r;   r<   r=   r>      c                 2    t          j        | |k              S N)npmeany_testy_predkwargss      y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/linear_model/tests/test_ridge.py_accuracy_callablerI   Z   s    76V#$$$    c                 6    | |z
  dz                                   S )N   )rC   )rE   rF   s     rH   _mean_squared_error_callablerM   ^   s    f_"((***rJ   longwide)paramsc                    |j         dk    rd\  }}nd\  }}t          ||          }t          j                            |           }t          ||||          }d|dddf<   t          j        |          \  }}}	t          j        |dk              sJ |ddd|f         |dd|df         }}
|	d|ddf         |	|dddf         }}|j         dk    r@|	                    d	d
|          }||z  }|||
                    ||z
            dz  z  z  }nB|	                    d	d
|          }|j        t          j        d|z            z  |
j        z  |z  }d}|t          j        |          z  }d|d<   t          j        |j        |z  |z   |j        |z            }|||z  z
  }|||z  z
  }t          j                            |          t          j                            |          k     sJ ||||fS )aD  Dataset with OLS and Ridge solutions, well conditioned X.

    The construction is based on the SVD decomposition of X = U S V'.

    Parameters
    ----------
    type : {"long", "wide"}
        If "long", then n_samples > n_features.
        If "wide", then n_features > n_samples.

    For "wide", we return the minimum norm solution w = X' (XX')^-1 y:

        min ||w||_2 subject to X w = y

    Returns
    -------
    X : ndarray
        Last column of 1, i.e. intercept.
    y : ndarray
    coef_ols : ndarray of shape
        Minimum norm OLS solutions, i.e. min ||X w - y||_2_2 (with minimum ||w||_2 in
        case of ambiguity)
        Last coefficient is intercept.
    coef_ridge : ndarray of shape (5,)
        Ridge solution with alpha=1, i.e. min ||X w - y||_2_2 + ||w||_2^2.
        Last coefficient is intercept.
    rN   )      )rS   rR   )	n_samples
n_featureseffective_rankrandom_state   NMbP?
   lowhighsizer`   rL   r   )rY   rY   )paramminrB   randomRandomStater	   r   r9   alluniformnormalTdiagidentitysolvenorm)global_random_seedrequestrT   rU   krngXUsVtU1U2Vt1_coef_olsyalphad
coef_ridgeR_OLSR_Ridges                        rH   ols_ridge_datasetr   b   s,   > } %	:: %	:Iz""A
)

 2
3
3C
1SV	 	 	A AaaaeHz!}}HAq"6!d(qqq"1"uXqABBxBAAAY122qqq5	C};;3Rj;AAL	R#**)j"8*99Q>>>KKCbyK995271q5>>)BD014 EJ'''AAfIacAgk13733J HE!j. G9>>%  29>>'#:#:::::a:%%rJ   solverfit_interceptTFc                    |\  }}}}d}t          |d| | dv rdnd|          }	|t          j        |          z
  }
|||z  z
  }dt          j        |dz            t          j        |
dz            z  z
  }t	          di |	}|d	d	d	d
f         }|r	|d
         }n2||                    d          z
  }||                                z
  }d}|                    ||           |d	d
         }|j        t          j        |          k    sJ t          |j
        |           |                    ||          t          j        |          k    sJ t	          di |	                    ||t          j        |j        d                             }|j        t          j        |          k    sJ t          |j
        |           |                    ||          t          j        |          k    sJ |j        | k    sJ d	S )zTest that Ridge converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
          ?Tr=   r>   V瞯<绽|=r|   r   r   tolrW   rX   rL   NrY   r   axissample_weight )dictrB   rC   sumr   fit
intercept_pytestapproxr,   coef_scoreonesshapesolver_)r   r   r   rn   rr   r{   ry   coefr|   rP   res_null	res_RidgeR2_Ridgemodel	intercepts                  rH   test_ridge_regressionr      s    &MAq!TE..EEE'  F 271::~HAHI26)Q,''"&1*=*===HOOFOOE	!!!SbS&	A H		AL		IIaOOO9Dv}Y777777EK&&&;;q!h 7 77777 OOFOO1BGAGAJ4G4GHHEv}Y777777EK&&&;;q!h 7 77777=F""""""rJ   c                 n   |\  }}}}|j         \  }}	d}
t          |
dz  || | dv rdnd|          }|ddddf         }d	t          j        ||fd
          z  }t          j                            |          t          ||	d
z
            k    sJ |r	|d         }n2||                    d          z
  }||                                z
  }d}|                    ||           |dd         }|j	        t          j        |          k    sJ t          |j        t          j        ||f         d           dS )a  Test that Ridge converges for all solvers to correct solution on hstacked data.

    We work with a simple constructed data set with known solution.
    Fit on [X] with alpha is the same as fit on [X, X]/2 with alpha/2.
    For long X, [X, X] is a singular matrix.
    r   rL   r   r   r   r   NrY         ?rX   r   r   :0yE>atol)r   r   rB   concatenater   matrix_rankrc   rC   r   r   r   r   r,   r   r_r   r   r   rn   rr   r{   ry   r   rT   rU   r|   r   r   s                rH    test_ridge_regression_hstacked_Xr      s_    &MAq!TGIzEai#..EEE'  E 	
!!!SbS&	AbnaV!,,,,A9  ##s9j1n'E'EEEEE H		AL		IIaOOO9Dv}Y777777 EKtTz!2>>>>>>rJ   c                 f   |\  }}}}|j         \  }}	d}
t          d|
z  || | dv rdnd|          }|ddddf         }t          j        ||fd	
          }t          j                            |          t          ||	          k    sJ t          j        ||f         }|r	|d         }n2||                    d	
          z
  }||                                z
  }d	}|	                    ||           |dd         }|j
        t          j        |          k    sJ t          |j        |d           dS )aJ  Test that Ridge converges for all solvers to correct solution on vstacked data.

    We work with a simple constructed data set with known solution.
    Fit on [X] with alpha is the same as fit on [X], [y]
                                                [X], [y] with 2 * alpha.
    For wide X, [X', X'] is a singular matrix.
    r   rL   r   r   r   r   NrY   r   r   r   r   )r   r   rB   r   r   r   rc   r   rC   r   r   r   r   r,   r   r   s                rH    test_ridge_regression_vstacked_Xr      sZ    &MAq!TGIzE%i#..EEE'  E 	
!!!SbS&	A
1vA&&&A9  ##s9j'A'AAAAA
adA H		AL		IIaOOO9Dv}Y777777 EKD111111rJ   c                 N   |\  }}}}|j         \  }}	d}
t          |
|| | dv rdnd|          }t          d
i |}|r!|ddddf         }|d         }|dd         }nd}|                    ||           ||	k    s|s6|j        t          j        |          k    sJ t          |j        |           dS t          |	                    |          |           t          ||z  |z   |           t          j                            t          j        |j        |j        f                   t          j                            t          j        ||f                   k    sJ t          j        d	           |j        t          j        |          k    sJ t          |j        |           dS )a  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
    Note: This checks the minimum norm solution for wide X, i.e.
    n_samples < n_features:
        min ||w||_2 subject to X w = y
    r   r   r   r   r   NrY   1Ridge does not provide the minimum norm solution.reasonr   )r   r   r   r   r   r   r   r,   r   predictrB   r   rm   r   xfail)r   r   r   rn   rr   r{   r   ry   rT   rU   r|   rP   r   r   s                 rH   !test_ridge_regression_unpenalizedr   )  s    &MAq$GIzE#..EEE'  F OOFOOE  aaa"fIH	CRCy		IIaOOO
 :]6=#;#;;;;;T***** 	a((!,,,D9,a000y~~beE$4ek$ABCCbinnE)T/"G
 G
 
 
 
 
 	OPPPP6=#;#;;;;;T*****rJ   c                 "   |\  }}}}|j         \  }}	d}
t          |
|| | dv rdnd|          }|r!|ddddf         }|d         }|dd         }nd}dt          j        ||fd	
          z  }t          j                            |          t          ||	          k    sJ |                    ||           ||	k    s|sa|j        t          j
        |          k    sJ | dk    rt          j                     t          |j        t          j        ||f                    dS t          |                    |          |           t          j                            t          j        |j        |j        f                   t          j                            t          j        |||f                   k    sJ t          j        d           |j        t          j
        |          k    sJ t          |j        t          j        ||f                    dS )a^  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
    OLS fit on [X] is the same as fit on [X, X]/2.
    For long X, [X, X] is a singular matrix and we check against the minimum norm
    solution:
        min ||w||_2 subject to min ||X w - y||_2
    r   r   r   r   r   NrY   r   rX   r   r;   r   r   )r   r   rB   r   r   r   rc   r   r   r   r   skipr,   r   r   r   rm   r   r   r   r   rn   rr   r{   r   ry   rT   rU   r|   r   r   s                rH   ,test_ridge_regression_unpenalized_hstacked_Xr   `  s    &MAq$GIzE#..EEE'  E  aaa"fIH	CRCy	bnaV!,,,,A9  ##s9j'A'AAAAA	IIaOOO:]6=#;#;;;;;ZKMMMRU4:%677777
 	a((!,,,y~~beE$4ek$ABCCbinnE)T4'(G
 G
 
 
 
 
 	OPPPP6=#;#;;;;;RU4:%677777rJ   c                    |\  }}}}|j         \  }}	d}
t          |
|| | dv rdnd|          }|r!|ddddf         }|d         }|dd         }nd}t          j        ||fd          }t          j                            |          t          ||	          k    sJ t          j        ||f         }|                    ||           ||	k    s|s6|j	        t          j        |          k    sJ t          |j        |           dS t          |                    |          |           t          j                            t          j        |j	        |j        f                   t          j                            t          j        ||f                   k    sJ t          j        d	
           |j	        t          j        |          k    sJ t          |j        |           dS )a  Test that unpenalized Ridge = OLS converges for all solvers to correct solution.

    We work with a simple constructed data set with known solution.
    OLS fit on [X] is the same as fit on [X], [y]
                                         [X], [y].
    For wide X, [X', X'] is a singular matrix and we check against the minimum norm
    solution:
        min ||w||_2 subject to X w = y
    r   r   r   r   r   NrY   r   r   r   )r   r   rB   r   r   r   rc   r   r   r   r   r   r,   r   r   rm   r   r   s                rH   ,test_ridge_regression_unpenalized_vstacked_Xr     s    &MAq$GIzE#..EEE'  E  aaa"fIH	CRCy	
1vA&&&A9  ##s9j'A'AAAAA
adA	IIaOOO:]6=#;#;;;;;T*****
 	a((!,,,y~~beE$4ek$ABCCbinnE)T/"G
 G
 
 
 
 
 	OPPPP6=#;#;;;;;T*****rJ   sparse_containerr|   r   {Gz?c                    |=|r| t           vrt          j                     n|s| t          vrt          j                     |\  }}}}	|j        \  }
}t
                              dd|
          }t          ||| | dv rdndd|	          }|dddd
f         }t          j	        ||fd          }t          j
        ||f         }t          j
        |d|z
  f         |z  }|r	|	d
         }n2||                    d          z
  }||                                z
  }d}| ||          }|                    |||           |	dd
         }	|j        t          j        |          k    sJ t          |j        |	           dS )zTest that Ridge with sample weights gives correct results.

    We use the following trick:
        ||y - Xw||_2 = (z - Aw)' W (z - Aw)
    for z=[y, y], A' = [X', X'] (vstacked), and W[:n/2] + W[n/2:] = 1, W=diag(W)
    Nr   rX   r]   r   r   r   順 )r|   r   r   r   max_iterrW   rY   r   r   )SPARSE_SOLVERS_WITH_INTERCEPTr   r    SPARSE_SOLVERS_WITHOUT_INTERCEPTr   rq   rg   r   rB   r   r   rC   r   r   r   r,   r   )r   r   r   r|   r   rn   rr   r{   ry   r   rT   rU   swr   r   s                  rH   $test_ridge_regression_sample_weightsr     s   $ # 	V+HHHKMMMM 	61Q#Q#QKMMM%MAq!TGIz		3	3B#..EEE'  E 	
!!!SbS&	A
1vA&&&A
adA	r1r6z	U	"B H		AL	#Q	IIa"I%%%9Dv}Y777777EK&&&&&rJ   c                  B   t                               dd          } t          t          | dg          }t	          j        t          t          j                  }t          || dg          }t	          j        t          j        |          j        }t          ||           d S )NrY   rX   r   r|   )	
y_diabetesreshaper   
X_diabetesrB   dotri   r   r.   )r{   r   K	dual_coefcoef2s        rH   test_primal_dual_relationshipr     s    2q!!A:q777D
z:<((A&q!D6:::IF:<++-EdE*****rJ   c            
      2   t           j                            d          } |                     d          }|                     dd          }d}t	          j        t          |          5  t          ||dddd d	
           d d d            d S # 1 swxY w Y   d S )Nr      r\   z3sparse_cg did not converge after [0-9]+ iterations.matchr   r:           rX   )r|   r   r   r   verbose)rB   rd   re   randnr   warnsr   r   )rq   r{   rr   warning_messages       rH   &test_ridge_regression_convergence_failr     s    
)


"
"C		!A		!RALO	(	@	@	@ 
 
qKS4QR	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   (BBBc                      t           j                            d          } d\  }}|                     ||          }|                     |          }|d d t           j        f         }t           j        |d|z   f         }t                      }|                    ||           |j        j	        |fk    sJ |j
        j	        dk    sJ t          |j        t           j                  sJ t          |j
        t                    sJ |                    ||           |j        j	        |fk    sJ |j
        j	        dk    sJ t          |j        t           j                  sJ t          |j
        t           j                  sJ |                    ||           |j        j	        d|fk    sJ |j
        j	        dk    sJ t          |j        t           j                  sJ t          |j
        t           j                  sJ d S )Nr   r   r\   rX   r   rX   rL   )rL   )rB   rd   re   r   newaxisc_r   r   r   r   r   
isinstancendarrayfloat)rq   rT   rU   rr   r{   Y1Yridges           rH   test_ridge_shapes_typer     s   
)


"
"C!Iz		)Z((A		)A	
111bj=	B
aQhAGGE	IIaOOO;----!R''''ek2:.....e&.....	IIa;----!T))))ek2:.....e&
33333	IIaOOO;J////!T))))ek2:.....e&
3333333rJ   c                     t           j                            d          } d\  }}|                     ||          }|                     |          }t           j        |d|z   f         }t                      }|                    ||           |j        }|                    ||           t          |j        d         |           t          |j        d         |dz              d S )Nr   r   r   rX   )	rB   rd   re   r   r   r   r   r   r-   )rq   rT   rU   rr   r{   r   r   r   s           rH   test_ridge_interceptr   6  s    
)


"
"C!Iz		)Z((A		)A
aqjAGGE	IIaOOO I	IIaOOO(+Y777(+Y_=====rJ   c                     t           j                            d          } d\  }}|                     |          }|                     ||          }t	          dd          }t          d          }|                    ||           |                    ||           t          |j        |j                   |                    ||           |                    ||           t          |j        |j                   d S )Nr   )r   rS   r   Fr|   r   r   )	rB   rd   re   r   r   r   r   r-   r   )rq   rT   rU   r{   rr   r   olss          rH   test_ridge_vs_lstsqr   H  s     )


"
"C Iz		)A		)Z((A5111E

/
/
/C	IIaOOOGGAqMMMSY///	IIaOOOGGAqMMMSY/////rJ   c                  N  	
 t           j                            d          } d\  }}}|                     ||          	|                     ||          t          j        |          
t          j        	fdt          
j                  D                       }	
fddD             }|D ]}t          ||           t          
d d                   }d}t          j        t          |	          5  |                    	           d d d            d S # 1 swxY w Y   d S )
N*   )   r\   r   c                 j    g | ]/\  }}t          |d                               |          j        0S )r;   r|   r   r   r   r   ).0r|   targetrr   s      rH   
<listcomp>z3test_ridge_individual_penalties.<locals>.<listcomp>i  sM     	
 	
 	
v j11155a@@F	
 	
 	
rJ   c                 f    g | ]-}t          |d                                         j        .S )-q=)r|   r   r   r   )r   r   rr   	penaltiesr{   s     rH   r   z3test_ridge_individual_penalties.<locals>.<listcomp>o  sK        	If%888<<QBBH  rJ   )r9   r:   r<   r;   r=   r>   rY   r   zCNumber of targets and number of penalties do not correspond: 4 != 5r   )rB   rd   re   r   arangearrayzipri   r.   r   r   raises
ValueErrorr   )rq   rT   rU   	n_targetscoef_choleskycoefs_indiv_pencoef_indiv_penr   err_msgrr   r   r{   s            @@@rH   test_ridge_individual_penaltiesr  ]  s    )


#
#C'0$Iz9		)Z((A		)Y''A	)$$IH	
 	
 	
 	
!$Y!4!4	
 	
 	
 M     M  O * A A!-@@@@ 	#2#'''ESG	z	1	1	1  		!Q                 s   6DD!Dn_col)r   r   )   csr_containerc                    t           j                            d          }|                    dd          }|                    d          }|                    t	          |                    } |j        dg| R  } |j        dg| R  }t           ||          ||          }t          j        ||d d d f         |z  z
  |d d d f         g          }	t          |	                    |          |                    |                     t          |	j	                            |          |j	                            |                     d S )Nr         	   )
rB   rd   re   r   lenr   hstackr,   r   ri   )
r  r  rq   rr   X_msqrt_swr   Aoperatorreference_operators
             rH   test_X_CenterStackOpr  }  s7    )


"
"C		"aA
))A,,CiiAG	"uA	!eAa 0 0#w??HA4(83(>$>4@P#QRR&**1--x||A???&(,,Q//1B1BCCCCCrJ   r   ))r\   rX   )   r  )r     )rL   rL   )r   r   uniform_weightsc                 D   t           j                            d          } |j        |  }|r t          j        |j        d                   }n|                    d| d                   }t          j        |          }t          j        |d|          }||z
  |d d d f         z  }|	                    |j
                  }	 |||d d d f         z            }
t          d          }|                    |
|          \  }}t          ||           t          |	|           d S Nr   rX   )r   weightsTr   )rB   rd   re   r   r   r   	chisquaresqrtaverager   ri   r   _compute_gramr,   )r   r  r  rq   rr   r   r  X_mean
X_centered	true_gramX_sparsegcvcomputed_gramcomputed_means                 rH   test_compute_gramr"    s    )


"
"C	5A (WQWQZ  ]]1eAh''gbkkGZ2...Ff*4 00Jz|,,I}QD!1122H
$
'
'
'C#&#4#4Xw#G#G M=FM***I}-----rJ   c                 D   t           j                            d          } |j        |  }|r t          j        |j        d                   }n|                    d| d                   }t          j        |          }t          j        |d|          }||z
  |d d d f         z  }|j	        
                    |          }	 |||d d d f         z            }
t          d          }|                    |
|          \  }}t          ||           t          |	|           d S r  )rB   rd   re   r   r   r   r  r  r  ri   r   r   _compute_covariancer,   )r   r  r  rq   rr   r   r  r  r  true_covariancer  r  computed_covr!  s                 rH   test_compute_covariancer'    s!    )


"
"C	5A (WQWQZ  ]]1eAh''gbkkGZ2...Ff*4 00J l&&z22O}QD!1122H
$
'
'
'C"%"9"9(G"L"LL-FM***O\22222rJ   d   r   r\   rX         *@      >@c                 &   t          | ||||||d|	  	        \  }}}|dk    rt          j        |g          }||z  }t          j                            |                              d||j                  dk    }|                                }d|| <   d||<   ||                    |          z  }|
rG||                    t          j	        |          dz   |z
            z  }t          j	        |          dz   }|dk    r|d         }|	r|||fS ||fS )NT)	rT   rU   n_informativer   biasnoiseshuffler   rW   rX   r   r   )
r   rB   asarrayrd   re   binomialr   copyr   abs)rT   rU   proportion_nonzeror,  r   r-  X_offsetr.  r/  r   positiverW   rr   r{   cmask	removed_Xs                    rH   _make_sparse_offset_regressionr:    s6    #!
 
 
GAq! QJsOOMA
	l++44Q8JAGTTWXX 	 IAteHIdOq		A 	QUU26!99q=1$%%%F1IIMQaD !Qwa4KrJ   zsolver, sparse_containerc              #   0   K   | ]\  }}||dv ||fV  d S )N)r:   ridgecvr   )r   r   r   s      rH   	<genexpr>r=    sO        &V% #v1I'I'I 
!"
 (J'I'I'I rJ   )r;   r=   r:   r<   r>   r<  z"n_samples,dtype,proportion_nonzero))r   float32皙?)(   r>  r   )r   float64皙?c                 `   d}|dk    rdnd}t          dd||||          \  }}	t          |          }t          d|	                              ||	          }
|                    |d
          }|	                    |d
          }	| ||          }| dk    rt          |g          }n2|                     d          rd}d}nd}d }t          || |||          }|                    ||	           t          |j        |
j        dd           t          |j	        |
j	        dd           d S )Nr   g?g      I@g     @@r\      )r-  rU   r4  r.  rW   rT   r9   )r   r|   F)r2  r<  alphasr=   gHz>r   r   )r|   r   r   r   rW   rZ   r   rtol)
r:  r"   r   r   astyper   
startswithr,   r   r   )r   r4  rT   dtyper   rn   r|   r.  rr   r{   	svd_ridger   r   r   s                 rH   test_solver_consistencyrM    st   $ E&,,DD%E)-'  DAq 	QAU%00044Q::I	U##A	U##A#Qw'''U## 	CHHCH+
 
 
 
IIaOOOEKt$GGGGE$i&:DQQQQQQrJ   gcv_moder9   eigenX_containerX_shape)r  r  )r  r   zy_shape, noise))r  r   )r  rX   r*  )r  r       b@c           	         |\  }}t          |          dk    r|d         nd}t          |||dd|d          \  }	}
|
                    |          }
g d}t          |||d	
          }t          | ||          }|                    |	|
            ||	          }|                    ||
           |j        t          j        |j                  k    sJ t          |j	        |j	        d           t          |j
        |j
        d           d S )NrL   rY   rX   r   Fr   rT   rU   r   rW   r/  r.  r,  rZ   r?  r         $@g     @@neg_mean_squared_errorcvr   rF  scoring)rN  r   rF  rZ   rH  )r	  r:  r   r   r   alpha_r   r   r,   r   r   )rN  rP  rQ  y_shaper   r.  rT   rU   r   rr   r{   rF  	loo_ridge	gcv_ridgeX_gcvs                  rH   test_ridge_gcv_vs_ridge_loo_cvrd     sG    $Iz"7||q00aI)  DAq 	
		'A(((F#(	  I #  I MM!QKNNEMM%v}Y-=>>>>>>IOY_4@@@@I()*>TJJJJJJrJ   c            	         d} d\  }}d}t          |||dddd          \  }}g d}t          |d	|| 
          }t          d	||           }|                    ||           |                    ||           |j        t	          j        |j                  k    sJ d|j        d|j                    t          |j        |j        d           t          |j        |j        d           d S )Nexplained_variance)r\   r   rX   r   Fr   rW  rX  Tr[  )r   rF  r]  zgcv_ridge.alpha_=z, loo_ridge.alpha_=rZ   r^  )	r:  r   r   r_  r   r   r,   r   r   )	r]  rT   rU   r   rr   r{   rF  ra  rb  s	            rH   test_ridge_loo_cv_asym_scoringrg  S  s)   "G!IzI)  DAq )((FD  I d67KKKIMM!QMM!Qv}Y-=>>>>>3933	 033 ?>> IOY_4@@@@I()*>TJJJJJJrJ   rU   r  r   zy_shape, fit_intercept, noise))rR  Tr   )rS  Tg      4@)rT  TrU  )rT  Fr*  c                    g d}t           j                            d          }t          |          dk    r|d         nd}t	          d||dd|          \  }	}
|
                    |          }
d	|                    t          |	                    z  }||                                z
  dz                       t                    }t          j
        t          j        |	j        d                   |          |                    t                    }|	         |
         }}t          |	j        d         
          }|                    ||          }t!          ||d|          }|                    ||           t%          |j        |          }|                    ||          }t)          ||||          }|j        |j        k    r|                    |j                  }||z
  dz  fdt          j        |	j        d                   D             t          j                   ||	          }t!          |d| |          }|                    ||
|           t          |          dk    r-|j        d d d d |                    |j                  f         }n)|j        d d |                    |j                  f         }|j        t1          j        |j                  k    sJ t5          |d           t5          |j        |j        d           t5          |j        |j        d           d S )NrX  r   rL   rY   rX   r  F)rT   rU   r   rW   r/  r.  r  )n_splits)groupsrZ  )rF  r\  r]  r   r   r\  c                 P    g | ]"}t          j        |k             d           #S )r   r   )rB   r   )r   iindiceskfold_errorss     rH   r   z1test_ridge_gcv_sample_weights.<locals>.<listcomp>  s>       78|GqL)222  rJ   T)rF  store_cv_resultsrN  r   r   rZ   r^  )rB   rd   re   r	  r:  r   r   rc   rI  intrepeatr   r   r   r   splitr   r   r   r_  r!   r0  cv_results_indexr   r   r,   r   r   )rN  rP  r   rU   r`  r.  rF  rq   r   rr   r{   r   X_tiledy_tiledr\  splitskfold	ridge_regpredictionsrc  rb  
gcv_errorsrn  ro  s                         @@rH   test_ridge_gcv_sample_weightsr}  s  sG    )((F
)


"
"C"7||q00aI)  DAq 	
		'A		#a&&)))M"]%6%6%8%881<DDSIIMi	!'!*--}==G!((//Mz1W:WG	QWQZ	(	(	(BXXgwwX77F(#	  E 
IIgwELFFFIXXgwwX77F#IwFKKKKGM))!))'-88k)a/L    <>Iagaj<Q<Q  L :l++LKNNE#	  I MM%-M888
7||q*111aaael1K1K+KL

*111fll5<.H.H+HI
<6=)9::::::J48888IOU[t<<<<I(%*:FFFFFFrJ   z2mode, mode_n_greater_than_p, mode_p_greater_than_n))Nr9   rO  )autor9   rO  )rO  rO  rO  )r9   r9   r9   c                     t          dd          \  }}|  | |          }t          ||          |k    sJ t          |j        |          |k    sJ d S )Nr   rL   )rT   rU   )r   r   ri   )r   modemode_n_greater_than_pmode_p_greater_than_nrr   ry   s         rH   test_check_gcv_mode_choicer    sp     Q1555DAq#Q1d##'<<<<<13%%)>>>>>>>rJ   c                 <   t           j        d         }g }| 
t           d}}n | t                     d}}t          |          }|                    |t                     |j        }|                    |           t          }t          t          d          }t          d|          }	  ||	j                  |t                     |	j        t          j        |          k    sJ d }
t          |
          }t          d|          }  ||j                  |t                     |j        t          j        |          k    sJ t          d          }t          d|          }|                    |t                     |j        t          j        |          k    sJ | N|                    |t          t          j        |          	           |j        t          j        |          k    sJ t          j        t          t          f          j        }|                    ||           |                    |          }|                    |t                     |                    |          }t'          t          j        ||f          j        |d
           |S )Nr   TFr   )greater_is_better)r   r]  c                 $    t          | |           S rA   )r   )xr{   s     rH   funcz_test_ridge_loo.<locals>.func  s    "1a((((rJ   rZ  r   h㈵>r^  )r   r   r   r   r   r_  appendr0   r   r   r   r   r   r   rB   r   vstackri   r   r,   )r   rT   retrr   r   	ridge_gcvr_  fr]  
ridge_gcv2r  
ridge_gcv3scorer
ridge_gcv4r   Y_predrF   s                    rH   _test_ridge_loor    s|    #I
C%t=++J77=666I MM!Z   FJJv 	A,FFFGug>>>JAAjna$$$f 5 55555) ) ) $Gug>>>JAAjna$$$f 5 55555 011Fuf===JNN1j!!!f 5 55555 a2793E3EFFF6=#8#88888 		:z*++-AMM!Qq!!FMM!Z   q!!FBIvv.//16EEEEJrJ   c                 b   | t           n | t                     }t                      }|                    |t                     |                    |           t          |j        j                  dk    sJ t          |j	                  t          j        u sJ t          d          }|                    |           |                    |t                     |                    |           t          |j        j                  dk    sJ t          |j	                  t          j        u sJ d S )NrX   r   rk  )r   r   r   r   r   r	  r   r   typer   rB   rA  r   
set_params)r   rr   ridge_cvr\  s       rH   _test_ridge_cvr  
  s   &.

4D4DZ4P4PAyyHLLJQx~#$$))))#$$
2222	qB2LLJQx~#$$))))#$$
222222rJ   zridge, make_dataset)rp  c                      |dd          \  }}t          |           } |                     ||           t          | d          rJ d S )N   r   rT   rW   rt  )r   r   hasattr)r   make_datasetrr   r{   s       rH   $test_ridge_gcv_cv_results_not_storedr    sT     <!"555DAq%LLE	IIaOOOum,,,,,,,rJ   r\  r  c                      |dd          \  }}t          |           } |                     d|           |                     ||           t          | d          sJ t	          | j        t                    sJ d S )Nr  r   r  F)rp  r\  best_score_)r   r  r   r  r   r  r   )r   r  r\  rr   r{   s        rH   test_ridge_best_scorer  +  s     <!"555DAq%LLE	e333	IIaOOO5-(((((e'///////rJ   c            	      F  	 t           j                            d          } d\  }}}|                     ||          }t          j        |d d dgf         t          j        d|f                    t          j        |d d dgf         dt          j        d|f          z            z   t          j        |d d dgf         dt          j        d|f          z            z   |                     ||          z   d		fd	|j        D             }t          	d
                              |          }t          ||j
                   t          t          |j
                                      |          j        |j                   t          	d
d
                              |          }|j
        j        |fk    sJ |j        j        |fk    sJ |j        j        |t#          	          |fk    sJ t          dd
d
                              |          }|j
        j        |fk    sJ |j        j        |fk    sJ |j        j        ||dfk    sJ t          	d
d
                              |d d df                   }t          j        |j
                  sJ t          j        |j                  sJ |j        j        |t#          	          fk    sJ t          	d
d                              |          }t          ||j
                   t          t          |j
                                      |          j        |j                   t          	t'                      d
          }d}t)          j        t,          |          5  |                    |           d d d            n# 1 swxY w Y   t          	dd
          }t)          j        t,          |          5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr   )r   r   r  r   rX   g?rL   rZ   )rX   r(    c                 b    g | ]+}t                                         |          j        ,S )rE  )r   r   r_  )r   r   rr   rF  s     rH   r   z6test_ridge_cv_individual_penalties.<locals>.<listcomp>M  s7    UUUvgV,,,00F;;BUUUrJ   T)rF  alpha_per_targetr   )rF  r  rp  r2)rF  r  r]  )rF  r\  r  z3cv!=None and alpha_per_target=True are incompatibler   r  )rB   rd   re   r   r   r   ri   r   r   r/   r_  r.   r   r   r   r  rt  r	  isscalarr    r   r   r   )
rq   rT   rU   r   r{   optimal_alphasr  msgrr   rF  s
           @@rH   "test_ridge_cv_individual_penaltiesr  :  s    )


#
#C (0$Iz9		)Y''A
qQCy"'1j/2233
&111qc6D27Az?#;#;;
<
<	=
&111qc6EBGQ
O$<$<<
=
=	> ))Iz
*
*	+  F VUUUUQRQTUUUN ft<<<@@AFFH~x777 HO$$$((A..4hn  
 ftdSSSWW	1 H ? YL0000%)5555%)S[[))LLLLL a$NNNRRSTVWXXH? YL0000%)5555%)Y)BBBBB ftdSSSWW	1QQQT7 H ;x''''';x+,,,,,%)S[[)AAAAA ftTJJJNNqRSTTH~x777HO$$$((A..4hn   fNNNH
?C	z	-	-	-  Q              fTBBBH	z	-	-	-  Q                 s$   N::N>N>2PPPc                     | t           n | t                     }t          d          }|                    |t                     t	          j        |                    |t                    d          S )NFr   r   )r   r   r   r   rB   roundr   )r   rr   r   s      rH   _test_ridge_diabetesr    s`    &.

4D4DZ4P4PA&&&E	IIa8EKK:..222rJ   c                    | t           n | t                     }t          j        t          t          f          j        }t           j        d         }t          d          }|                    ||           |j        j        d|fk    sJ |	                    |          }|                    |t                     |	                    |          }t          t          j        ||f          j        |d           d S )NrX   Fr   rL   r  decimal)r   rB   r  r   ri   r   r   r   r   r   r.   )r   rr   r   rU   r   r  rF   s          rH   _test_multi_ridge_diabetesr    s    &.

4D4DZ4P4PA
	:z*++-A!!$J&&&E	IIaOOO;J////]]1F	IIa]]1Fbi(899;VQOOOOOOrJ   c                    t          j        t                    j        d         }t          j        d         }| t          n | t                    }t                      t                      fD ]i}|                    |t                     |j        j        ||fk    sJ |	                    |          }t          j
        t          |k              dk    sJ jt          d          }t          |          }|                    |t                     |	                    |          }t          j
        t          |k              dk    sJ d S )Nr   rX   gHzG?r   rk  g?)rB   uniquey_irisr   X_irisr   r   r   r   r   rC   r   )r   	n_classesrU   rr   regrF   r\  s          rH   _test_ridge_classifiersr    s#   	&!!'*IaJ"*0@0@0H0HA!!#4#6#67 0 06y9j"99999Qwv'((4/////	qB
r
"
"
"CGGAv[[^^F76V#$$++++++rJ   r]  accuracyr   c                     | t           n | t                     }t          |          rt          |          n|}t          ||          }|                    |t
                                        |           d S )N)r]  r\  )r  callabler   r   r   r  r   )r   r]  r\  rr   scoring_clfs         rH   "test_ridge_classifier_with_scoringr    sw     #*0@0@0H0HA'/'8'8E{7###gH
H
4
4
4CGGAvq!!!!!rJ   c                 h   d }| t           n | t                     }t          j        ddd          }t          |t	          |          |          }|                    |t                     |j        t          j	        d          k    sJ |j
        t          j	        |d                   k    sJ d S )	Nc                     dS )NzG?r   rD   s      rH   _dummy_scorez:test_ridge_regression_custom_scoring.<locals>._dummy_score  s    trJ   rL   r   )num)rF  r]  r\  r  r   )r  rB   logspacer   r   r   r  r  r   r   r_  )r   r\  r  rr   rF  r  s         rH   $test_ridge_regression_custom_scoringr    s       #*0@0@0H0HA[QA&&&F
6;|3L3LQS
T
T
TCGGAv?fmD111111:vay11111111rJ   c                 d   | t           n | t                     }t          dd          }|                    |t                     |                    |t                    }t          dd          }|                    |t                     |                    |t                    }||k    sJ d S )Nr  F)r   r   rZ   )r   r   r   r   r   )r   rr   r   r   ridge2score2s         rH   _test_tolerancer    s    &.

4D4DZ4P4PAd%000E	IIaKK:&&Et5111F
JJq*\\!Z((FF??????rJ   c           	      2   t          ||          }t                              |          }t                              |          }|                    ||          }	|                    ||          }
|                    ||           |j        }|j        }t          d          5  t          |                              |	|
          }|j        }|j
        |j
        k    sJ |j        |	j        k    sJ t          t          ||          ||t          |                     |j        }|j
        |j
        k    sJ |j        |	j        k    sJ t          t          ||          ||t          |                     d d d            d S # 1 swxY w Y   d S )NdeviceTarray_api_dispatchxprH  r   )r1   r  rI  r  r0  r   r   r   r   r   r   rK  r,   r&   r%   )name	estimatorarray_namespacer  
dtype_namerH  r  	X_iris_np	y_iris_np	X_iris_xp	y_iris_xpcoef_npintercept_npestimator_xpcoef_xpintercept_xps                   rH   check_array_api_attributesr    s    
ov	6	6Bj))Ij))I

9V
44I

9V
44IMM)Y'''oG'L	4	0	0	0 
 
Y''++IyAA$}----}	////g"---
++		
 	
 	
 	
 $.!\%77777!Y_4444lr222
++		
 	
 	
 	
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   'CFFFz#array_namespace, device, dtype_name)idscheckr  r   c                     | j         j        }i }t          ||          }d|v r'|t          u rt	          ||          |j        k    rd|d<    ||| |f||d| d S )NCVrZ   rH  )r  r  )	__class____name__r1   r  r(   r>  )r  r  r  r  r  r  tolsr  s           rH   test_ridge_array_api_compliancer    s    . 'DD	ov	6	6B///&r622bj@@
 V	Ei17J RV    rJ   z$array_namespace, device_, dtype_namec                 x   t          ||          }t          d          \  }}|                    |          }|                    |          }|                     ||          }	|	                    |          }
t          d          5  |                    ||          |                    ||          }}|                     ||          }|                    |          }|j        |
j        cxk    r|j        k    sn J t          t          ||          |
           d d d            d S # 1 swxY w Y   d S )Nr   rW   Tr  r  r  )
r1   r
   rI  r   r   r   r0  r   r,   r&   )r  r  device_r  r  rr   r{   X_npy_npridge_nppred_npX_xpy_xpridge_xppred_xps                  rH   *test_ridge_classifier_multilabel_array_apir  &  s    
ow	7	7B)q999DAq88JD88JD}}T4((Ht$$G	4	0	0	0 D DZZWZ55rzz$wz7W7Wd==t,,""4((}8888888888)'b9997CCCD D D D D D D D D D D D D D D D D Ds   	BD//D36D3r  )include_numpy_namespacesc                 V   t          | d           }|                    t          d d                   }|                    t          d d                   }t          j        d         d         j        }|ddhz
  D ]}t	          ||dk              }d	|j         d
| d}t          j	        t          |          5  t          d          5  |                    ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t	          dd          }d|j         d}t          j	        t          |          5  t          d          5  |                    ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t	                      }d|j         d}t          j        t          |          5  t          d          5  |                    ||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  r   r   r   r~  r9   lbfgsr   r6  z Array API dispatch to namespace z" only supports solver 'svd'. Got 'z'.r   Tr  zYThe solvers that support positive fitting do not support Array API dispatch to namespace zc. Please either disable Array API dispatch, or use a numpy-like namespace, or set `positive=False`.z&Using Array API dispatch to namespace z with `solver='auto'` will result in using the solver 'svd'. The results may differ from those when using a Numpy array, because in that case the preferred solver would be cholesky. Set `solver='svd'` to suppress this warning.)r1   r0  r  r  r   _parameter_constraintsoptionsr  r   r   r   r   r   r   UserWarning)r  r  r  r  available_solversr   r   expected_msgs           rH   6test_array_api_error_and_warnings_for_solver_parameterr   ?  s    
od	;	;	;B

6"1":&&I

6"1":&&I4X>qAI#vuo5 	0 	0Vf.?@@@-r{ - -"(- - - 	
 ]:\::: 	0 	04888 0 0		)Y///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 $///E	.+-;	. 	. 	.  
z	6	6	6 , ,t444 	, 	,IIi+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,, , , , , , , , , , , , , , , GGE	D 	D 	D 	D  
k	6	6	6 , ,t444 	, 	,IIi+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,, , , , , , , , , , , , , , , , , ,s   :DC."D.C22D5C26DD		D		FE<0F<F 	 FF 	FFFH#H:HH
	
HH
	HH"%H"c                 v   t          | d           }|                    t          d d                   }|                    t          d d                   }t	                      }d}t          j                    5  t          j        d|t                     t          d          5  |
                    ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          d          5  t	          dd	          
                    ||           d d d            d S # 1 swxY w Y   d S )
Nr  r   zkResults might be different than when Array API dispatch is disabled, or when a numpy-like namespace is usederror)messagecategoryTr  r~  r  )r1   r0  r  r  r   warningscatch_warningsfilterwarningsr  r   r   )r  r  r  r  r   r  s         rH   )test_array_api_numpy_namespace_no_warningr  l  s   	od	;	;	;B

6"1":&&I

6"1":&&IGGE	; 
 
	 	"	" , ,TTTTt444 	, 	,IIi+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,, , , , , , , , , , , , , , , 
4	0	0	0 F FVd+++//	9EEEF F F F F F F F F F F F F F F F F FsH   9-C &C	=C 	C	C C	C  C$'C$;&D..D25D2	test_funcc                 f     | d           } | |          }||t          ||d           d S d S d S )Nr  r  )r.   )r	  r  	ret_dense
ret_sparses       rH   test_dense_sparser    sT     	$I=))J!7!)ZCCCCCC !7!7rJ   c                     t          j        ddgddgddgddgddgg          } g d}t          d           }|                    | |           t	          |                    ddgg          t          j        d	g                     t          d	d
i          }|                    | |           t	          |                    ddgg          t          j        dg                     t          d          }|                    | |           t	          |                    ddgg          t          j        d	g                     t          j        ddgddgddgddgg          } g d}t          d           }|                    | |           t          d          }|                    | |           t          |j                  dk    sJ t          |j	        |j	                   t          |j
        |j
                   d S )N      r   皙r   r   rX   rX   rX   rY   rY   class_weightrB  rX   rZ   rY   balanced)rX   rX   rY   rY   rL   )rB   r   r   r   r/   r   r	  classes_r.   r   r   )rr   r{   r  regas       rH   test_class_weightsr    s   
4,q	D$<#sc3ZPQQAA
t
,
,
,CGGAqMMMs{{S$K=1128QC==AAA 5z
2
2
2CGGAqMMM s{{S$K=1128RD>>BBB z
2
2
2CGGAqMMMs{{S$K=1128QC==AAA 	4,q	D$<#sDEEAA
t
,
,
,CGGAqMMM
333DHHQNNNt}""""ci444cndo>>>>>rJ   r  c                     |             }|                     t          j        t          j                    | d          }|                     t          j        t          j                   t	          |j        |j                   t          j        t          j        j                  }|t          j        dk    xx         dz  cc<   dddd} |             }|                     t          j        t          j        |            | |          }|                     t          j        t          j                   t	          |j        |j                    |             }|                     t          j        t          j        |dz              | |          }|                     t          j        t          j        |           t	          |j        |j                   d	S )
z5Check class_weights resemble sample_weights behavior.r  r  rX   r(  r   g      Y@)r   rX   rL   rL   N)	r   irisdatar   r-   r   rB   r   r   )r  reg1reg2r   r  s        rH   "test_class_weight_vs_sample_weightr    s   
 355DHHTY$$$3J'''DHHTY$$$
DJ/// GDK-..M$+"###s*###u--L355DHHTY]3333L)))DHHTY$$$
DJ/// 355DHHTY]A%56663L)))DHHTY]333
DJ/////rJ   c                  n   t          j        ddgddgddgddgddgg          } g d}t          d g d          }|                    | |           t          d	d
ig d          }|                    | |           t	          |                    ddgg          t          j        dg                     d S )Nr  r   r  r   r   r  )r   r?  rX   )r  rF  rX   rZ   )r   r?  rX   r\   gɿrL   rY   )rB   r   r   r   r/   r   )rr   r{   r  s      rH   test_class_weights_cvr    s    
4,q	D$<#sc3ZPQQAA
nnn
E
E
ECGGAqMMM !U<N<N<N
O
O
OCGGAqMMMs{{T1I;//2$@@@@@rJ   rZ  c                    t           j                            d          }d}d}|                    ||          }g d}t	          |          }t          |           rt          |           n| }t          |d d|          }|                    |          }	|                    ||	           |j	        j
        ||fk    sJ d}
|                    ||
          }	|                    ||	           |j	        j
        ||
|fk    sJ t          dd|           }t          j        t          d	
          5  |                    ||	           d d d            d S # 1 swxY w Y   d S )Nr   r  r   r?  r   rY  TrF  r\  rp  r]  r  )r\  rp  r]  zcv!=None and store_cv_resultsr   )rB   rd   re   r   r	  r  r   r   r   rt  r   r   r   r   )r]  rq   rT   rU   r  rF  n_alphasr  rr{   r   s              rH   test_ridgecv_store_cv_resultsr%    s    )


#
#CIJ		)Z((AF6{{H'/'8'8E{7###gHv$xPPPA 			)AEE!QKKK=9h"77777 I		)Y''AEE!QKKK=9i"BBBBB1tW===A	z)H	I	I	I  	a                 s   /EEEc                 F   t          j        ddgddgddgddgddgg          }t          j        g d          }|j        d         }g d}t          |          }t	          |           rt          |           n| }t          |d d|	          }d
}|                    ||           |j        j        |||fk    sJ t          j        g dg dg dg          	                                }|j        d
         }|                    ||           |j        j        |||fk    sJ d S )Nr  r   r  r   r   r  r!  Tr"  rX   )rX   rY   rX   rY   rX   )rY   rY   rX   rY   rY   )
rB   r   r   r	  r  r   r   r   rt  	transpose)	r]  r  r{   rT   rF  r#  r  r$  r   s	            rH   )test_ridge_classifier_cv_store_cv_resultsr(  	  sV   
4,q	D$<#sc3ZPQQA
"""##A
IF6{{H'/'8'8E{7###gH$x	 	 	A
 IEE!QKKK=9i"BBBBB 				---/B/B/BC	 	ikk  
IEE!QKKK=9i"BBBBBBBrJ   	Estimatorc                    t           j                            d          }d}d\  }}| t          u r|                    |          }n|                    dd|          }|                    ||          } | |          }|j        |u sJ d| j         d            |                    ||           t          |j        t          j
        |                     d S )Nr   r!  r   r   rL   rE  z`alphas` was mutated in `z
.__init__`)rB   rd   re   r   r   randintrF  r  r   r/   r0  )r)  rq   rF  rT   rU   r{   rr   	ridge_ests           rH   test_ridgecv_alphas_conversionr.  &  s    
)


"
"CF IzGIIi  KK1i((		)Z((A	(((Iv%%%BI$6BBB &%% MM!Qy'F););<<<<<rJ   c                    t           j                            d          }d}d\  }}|t          u r|                    |          }n|                    dd|          }|                    ||          } |||           }| Lt          j        t          d          5  |	                    ||           ddd           dS # 1 swxY w Y   dS |	                    ||           dS )	z1Check alpha=0.0 raises error only when `cv=None`.r   )r   r   rY  r+  rL   rF  r\  Nz"alphas\[0\] == 0.0, must be > 0.0.r   )
rB   rd   re   r   r   r,  r   r   r   r   )	r\  r)  rq   rF  rT   rU   r{   rr   r-  s	            rH   test_ridgecv_alphas_zeror1  ;  s1    )


"
"CF IzGIIi  KK1i((		)Z((A	B///I	z]:-RSSS 	  	 MM!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	as   CCCc                  .   t           j                            d          } d}dD ]\  }}|                     |          }|                     ||          }d|                     |          z   }t          d          }t          ||          }|                    |||           d|i}	t          t                      |	|	          }
|
                    |||           |j
        |
j        j        k    sJ t          |j        |
j        j                   d S )
Nr   r!  )r  r   r   r   r   r0  r   r|   rk  )rB   rd   re   r   randr   r   r   r   r   r_  best_estimator_r|   r.   r   )rq   rF  rT   rU   r{   rr   r   r\  r<  
parametersgss              rH   test_ridgecv_sample_weightr8  Q  s   
)


"
"CF "3 K K	:IIi  IIi,,chhy1111XXB///Aq666 v&
%'':"555
q!=111~!3!99999!'-1C1IJJJJK KrJ   c                  @   ddg} ddg}t           j                            d          }t          | |          D ]_\  }}|                    ||          |                    |          |                    |          dz  dz   }d}d}|d d t           j        f         |t           j        d d f         t          d                              |                               |                               |           fd}fd	}	d
}
t          j	        t          |
          5   |             d d d            n# 1 swxY w Y   d
}
t          j	        t          |
          5   |	             d d d            n# 1 swxY w Y   ad S )NrL   r  r   rX   r   g       @r   c                  6                                     d S rA   r   )rr   r   sample_weights_not_OKr{   s   rH   fit_ridge_not_okzStest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok  s     IIa122222rJ   c                  6                                     d S rA   r;  )rr   r   sample_weights_not_OK_2r{   s   rH   fit_ridge_not_ok_2zUtest_raises_value_error_if_sample_weights_greater_than_1d.<locals>.fit_ridge_not_ok_2  s     IIa344444rJ   z)Sample weights must be 1D array or scalarr   )rB   rd   re   r   r   r   r   r   r   r   r   )
n_samplessn_featuressrq   rT   rU   sample_weights_OKsample_weights_OK_1sample_weights_OK_2r=  r@  r   rr   r   r<  r?  r{   s              @@@@@rH   9test_raises_value_error_if_sample_weights_greater_than_1drF  i  ss    QJa&K
)


#
#C!$Z!=!= ! !	:IIi,,IIi  IIi00A59!! 1!!!RZ- @"3BJM"BA 			!Q)***		!Q+,,,		!Q+,,,	3 	3 	3 	3 	3 	3 	3 	3	5 	5 	5 	5 	5 	5 	5 	5 >]:W555 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 >]:W555 	! 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!7! !s$   ;EE	E	:FF	F	zn_samples,n_featuresrL   c                    t           j                            d          }t          dd          }t          dd          }|                    | |          }|                    |           }|                    |           dz  dz   } ||          }	|                    |	||           |                    |||           t          |j        |j        d	           d S )
Nr   r   Fr   rL   rX   r   r  r  )rB   rd   re   r   r   r   r.   r   )
rT   rU   r   rq   sparse_ridgedense_ridgerr   r{   sample_weightsr  s
             rH   &test_sparse_design_with_sample_weightsrK    s     )


#
#Cs%888Lc777K		)Z((A		)AYYy))Q.2N""HXq???OOAqO777l0+2CQOOOOOOrJ   c                      t          j        ddgddgddgddgddgg          } g d}t          d          }|                    | |           d S )	Nr  r   r  r   r   r  )rX   r\   r(  rE  )rB   r   r   r   )rr   r{   r   s      rH   test_ridgecv_int_alphasrM    sb    
4,q	D$<#sc3ZPQQAA <(((E	IIaOOOOOrJ   zparams, err_type, err_msgrF  )rX   rY   iz alphas\[1\] == -1, must be > 0.0)gr  g      $z"alphas\[0\] == -0.1, must be > 0.0)rX   r   1z1alphas\[2\] must be an instance of float, not strc                    d\  }}t                               ||          }t                               dd|          }t          j        ||          5   | di |                    ||           ddd           dS # 1 swxY w Y   dS )z?Check the `alphas` validation in RidgeCV and RidgeClassifierCV.r+  r   rL   r   Nr   )rq   r   r,  r   r   r   )r)  rP   err_typer   rT   rU   rr   r{   s           rH   test_ridgecv_alphas_validationrQ    s    ( !Iz		)Z((AAq)$$A	xw	/	/	/ & &	F1%%%& & & & & & & & & & & & & & & & & &s   A==BBc                    d\  }}t                               ||          }| t          u rt                               |          }nt                               dd|          } | d                              ||           dS )zCheck the case when `alphas` is a scalar.
    This case was supported in the past when `alphas` where converted
    into array in `__init__`.
    We add this test to ensure backward compatibility.
    r+  r   rL   rX   rE  N)rq   r   r   r,  r   )r)  rT   rU   rr   r{   s        rH   test_ridgecv_alphas_scalarrS    s}     !Iz		)Z((AGIIi  KK1i((IQAq!!!!!rJ   c                      t          dd          } |                     t          t                     | j        j        d         t          j        d         k    sJ d S )Nr:   rX   )r   r   r   )r   r   r   r   r   r   )r  s    rH   test_sparse_cg_max_iterrU    sP    
{Q
/
/
/CGGJ
###9?1!1!!4444444rJ   z-ignore::sklearn.exceptions.ConvergenceWarningc            	         d} t           t          }}t          j        || df          j        }t          dd          D ]W}dD ]R}t          ||d          }|                    ||           t          |j	        t          j        ||                      SXdD ]3}t          |dd          }|                    ||           |j	        J 4d S )	NrL   rX   rS   )r=   r>   r<   r   )r   r   r   )r:   r9   r;   r?  )
r   r   rB   tileri   ranger   r   r/   n_iter_)r   rr   r{   y_nr   r   r  s          rH   test_n_iterr[    s     IzqA
'!i^
$
$
&C!QKK J J- 	J 	JFveDDDCGGAsOOOs{BGHi,H,HIIII	J
 3 # #6A48883{""""# #rJ   )r<   r:   r  r~  with_sample_weightc                    | dk    }t          d||          \  }}d}|rCt          j                            |          }d|                    |j        d                   z   }| dk    rd	n| }	t          |	d
|          }
t          | d
|          }|
                    |||           |                     ||          ||           t          |
j	        |j	                   t          |
j
        |j
        d           dS )a  Check that ridge finds the same coefs and intercept on dense and sparse input
    in the presence of sample weights.

    For now only sparse_cg and lbfgs can correctly fit an intercept
    with sparse X with default tol and max_iter.
    'sag' is tested separately in test_ridge_fit_intercept_sparse_sag because it
    requires more iterations and should raise a warning if default max_iter is used.
    Other solvers raise an exception, as checked in
    test_ridge_fit_intercept_sparse_error
    r  r   )rU   rW   r6  Nr   r   ra   r~  r:   r   )r   r   r6  r   gƠ>r^  )r:  rB   rd   re   rg   r   r   r   r,   r   r   )r   r\  rn   r  r6  rr   r{   r   rq   dense_solverrI  rH  s               rH   test_ridge_fit_intercept_sparser_    s"      H)$6  DAq M ;i##$677ckkqwqzk::: #)F"2"2;;L|JJJKEHEEELOOAqO666]]1%%qFFFK*L,CDDDK%|'9EEEEEErJ   )r>   r9   r;   c                 "   t          dd          \  }} ||          }t          |           }d                    |           }t          j        t
          |          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nr   r   )rU   rW   r  zsolver='{}' does not supportr   )r:  r   formatr   r   r   r   )r   r  rr   r{   X_csrrH  r   s          rH   %test_ridge_fit_intercept_sparse_errorrc    s     *RaHHHDAqM!E'''L,33F;;G	z	1	1	1 # #"""# # # # # # # # # # # # # # # # # #s    BBBc                 @   t          dd|d          \  }}| rDt          j                            |          }d|                    |j        d                   z   }nd } ||          }t          ddd	d
d          }t          di |}	t          di |}
|	                    |||           t          j
                    5  t          j        dt                     |
                    |||           d d d            n# 1 swxY w Y   t          |	j        |
j        d           t          |	j        |
j        d           t!          j        t          d          5  t          dd	dd                               ||           d d d            d S # 1 swxY w Y   d S )Nr   r   g      @)rU   rT   rW   r5  r   r   ra   r=   Tr   r   )r|   r   r   r   r   r   r  -C6?r^  z"sag" solver requires.*r   rZ   )r   r   r   r   r   )r:  rB   rd   re   rg   r   r   r   r   r  r  simplefilterr  r,   r   r   r   r   )r\  rn   r  rr   r{   rq   r   rb  rP   rI  rH  s              rH   #test_ridge_fit_intercept_sparse_sagrg  *  sb   
 *1Cc  DAq  i##$677ckkqwqzk:::M!E%t  F //&//K??6??LOOAqO666		 	"	" @ @g{333???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ K*L,C$OOOOK%|'9EEEE	k)B	C	C	C W WU$D4HHHLLUTUVVVW W W W W W W W W W W W W W W W W Ws$   3D  DD(FFFreturn_interceptr   r  	container)r~  r:   r;   r<   r=   r>   r  c                 0   t          d          }|                    dd          }g d}t          j        ||          }d}| rd}||z  } ||          }	d\  }
}t          rdnd	}|d
k    }|dvrN| rLt          j        t          d          5  t          |	||
||| ||           ddd           n# 1 swxY w Y   dS t          |	||
|||| |          }| r-|\  }}t          ||d|           t          ||d|           dS t          ||d|           dS )z=check if all combinations of arguments give valid estimationsr   r  r  )rX   rL   r?  r   g     @)rZ   ư>rZ   re  r  )r=   r~  zIn Ridge, only 'sag' solverr   )r|   r   r   rh  r6  r   N)r|   r   r   r6  rh  r   r   r  )
r#   r4  rB   r   r3   r   r   r   r   r,   )rh  r   ri  r   rq   rr   
true_coefsr{   true_intercept	X_testingr|   r   r   r6  outr   r   s                    rH   .test_ridge_regression_check_arguments_validityrp  H  s    R
 
 CqAJ
q*AN ! A	!IJE3&44$D H_$$)9$]:-JKKK 
	 
	+!1!	 	 	 	
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 	
	#)	 	 	C  <ijqt<<<<	>EEEEEEZad;;;;;;s   B00B47B4)r9   r:   r;   r<   r=   r>   r  c                 V   t           j                            d          }d}| dk    }d\  }}|                    ||          }|                    |          }|                    t           j                  }|                    t           j                  }	dt          j        t           j                  j        z  }
t          || d|
|          }|	                    ||	           |j
        }t          || d|
|          }|	                    ||           |j
        }|j        |j        k    sJ |j        |j        k    sJ |                    |          j        |j        k    sJ |                    |          j        |j        k    sJ t          |j
        |j
        dd	
           d S )Nr   r   r  r3  rL     )r|   r   r   r   r6  re  gMb@?r  )rB   rd   re   r   rI  r>  finfo
resolutionr   r   r   rK  r   r,   )r   rq   r|   r6  rT   rU   X_64y_64X_32y_32r   ridge_32coef_32ridge_64coef_64s                  rH   test_dtype_matchr}    s    )


"
"CE H Iz99Y
++D99YD;;rz""D;;rz""D
bhrz""-
-CFScH  H LLtnG FScH  H LLtnG =DJ&&&&=DJ&&&&D!!'4:5555D!!'4:5555HNHNDIIIIIIrJ   c                     t           j                            d          } t          j        ddg          }d\  }}}|                     ||          }|                     ||          }|                    t           j                  }|                    t           j                  }t          |d          }	|	                    ||           |	j	        }
t          |d          }|                    ||           |j	        }|
j
        |j
        k    sJ |j
        |j
        k    sJ |	                    |          j
        |j
        k    sJ |                    |          j
        |j
        k    sJ t          |	j	        |j	        d           d S )	Nr   r   r   )r  r  rL   r;   r   r   r  )rB   rd   re   r   r   rI  r>  r   r   r   rK  r   r-   )rq   r|   rT   rU   n_targetru  rv  rw  rx  ry  rz  r{  r|  s                rH   test_dtype_match_choleskyr    su    )


"
"CHc3Z  E&-#Iz899Y
++D99Y))D;;rz""D;;rz""D 5444HLLtnG 5444HLLtnG =DJ&&&&=DJ&&&&D!!'4:5555D!!'4:5555BBBBBBrJ   )r9   r;   r<   r:   r=   r>   r  seedc                    t           j                            |          }d\  }}|                    ||          }|                    |          }t          j        ||          d|                    |          z  z   }d}| dk    }	t                      }
| dk    rdnd}t           j        t           j        fD ]E}t          |	                    |          |	                    |          || |d |	dd	d
d
          |
|<   F|
t           j                 j
        t           j        k    sJ |
t           j                 j
        t           j        k    sJ t          |
t           j                 |
t           j                 |           d S )Nr3  r   r   r  r:   rZ   r  rr  r   F)	r|   r   rW   r   r6  r   r   return_n_iterrh  r   )rB   rd   re   r   r   r   r>  rA  r   rI  rK  r,   )r   r  rW   rT   rU   rr   r   r{   r|   r6  resultsr   current_dtypes                rH   %test_ridge_regression_dtype_stabilityr    sq   
 9((..L Iz9j11Aj))D
q$$!3!3I!>!>>>AE HffG [((44dD*bj1 
 
!1HH]##HH]##%""
 "
 "
 2:$
22222:$
2222GBJ')<4HHHHHHrJ   c                      t          d          \  } }t          j        |           } | d d dd d f         } |d d d         }t          d                              | |           d S )Nr   r  rL   r=   r  )r   rB   asfortranarrayr   r   )rr   r{   s     rH   test_ridge_sag_with_X_fortranr    ss    +++DAq
!A	##A#qqq&	A	##A#A	Aq!!!!!rJ   zClassifier, paramsc                    t          dd          \  }}|                    dd          }t          j        ||gd          } | d	i |                    ||          }|                    |          }|j        |j        k    sJ t          |dddf         |dddf                    t          d                              ||           dS )
zRCheck that multilabel classification is supported and give meaningful
    results.rX   r   )r  rW   rY   r   Nr=   r  r   )	r
   r   rB   r   r   r   r   r/   r   )
ClassifierrP   rr   r{   r   r  r  s          rH   test_ridgeclassifier_multilabelr    s     *AAFFFDAq			"aA
1vA&&&A
*

v


"
"1a
(
(C[[^^F<17""""vaaad|VAAAqD\222	Aq!!!!!rJ   r~  r  )rZ   r   r?  r   c                 f   t          j        ddgddgddgddgg          }t          j        dd	g          }|rd
}|                    |          |z   }n|                    |          }t          |d| |          }|                    ||           t          j        |j        dk              sJ dS )z:Test that positive Ridge finds true positive coefficients.rX   rL   r  rS   r   r  r  r  r[   r   Tr|   r6  r   r   r   N)rB   r   r   r   r   rf   r   )r   r   r|   rr   r   r   r{   r   s           rH   #test_ridge_positive_regression_testr    s    
 	1a&1a&1a&1a&122A8QHD 	EE$KK)#EE$KKd6  E 
IIaOOO6%+"#######rJ   c                    t           j                            d          }|                    dd          }|                    dd|j        d                   }| rd}||z  |z   }n||z  }||                    |j        d                   d	z  z  }g }d
D ]C}t          ||| d          }	|                    |		                    ||          j
                   Dt          |ddd dS )zTest that Ridge w/wo positive converges to the same solution.

    Ridge with positive=True and positive=False must give the same
    when the ground truth coefs are all positive.
    r   ,  r(  r?  r   rX   ra   r   r   )TFr   )r|   r6  r   r   rk  rG  N)rB   rd   re   r   rg   r   rh   r   r  r   r   r,   )
r   r|   rq   rr   r   r   r{   r  r6  r   s
             rH   %test_ridge_ground_truth_positive_testr     s    )


#
#C		#sA;;sCagaj;11D 	Hy H	$	$t	++AG! . .(-U
 
 
 	uyyA,----W4a000000rJ   )r9   r;   r<   r:   r=   r>   c           	         d}t          j        ddgddgg          }t          j        ddg          }||z  }t          |d| d	          }t          j        t
          d
          5  |                    ||           ddd           n# 1 swxY w Y   t          j        t
          d          5  t          |||d| d          \  }}ddd           dS # 1 swxY w Y   dS )z5Test input validation for positive argument in Ridge.r?  rX   rL   r  rS   rY   TFr  zdoes not support positiver   Nzonly 'lbfgs' solver can be used)r6  r   rh  )rB   r   r   r   r   r   r   r   )r   r|   rr   r   r{   r   ry   s          rH   test_ridge_positive_error_testr  ;  st   
 E
1a&1a&!""A8QGD	DAV5QQQE	z)D	E	E	E  		!Q               
z)J	K	K	K 
 
q%$v
 
 
1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s$   &B		BB/CCCc                 j   	
 t          ddd          \  	
d d}d	 
fd	}t           	                              	
          }t           d
                              	
          } ||          } ||          }||k    sJ t          |          D ]} |||          }||k    sJ dS )z?Check ridge loss consistency when positive argument is enabled.r  r   rT   rU   rW   r?  r(  Nr   c                 :   | j         }|Jt          j                            |          }| j        |                    d|| j        j                  z   }n| j        }dt          j        |z  z
  |z
  dz            z  dz  t          j        |dz            z  z   S )Nr   ra   r   rL   )r   rB   rd   re   r   rg   r   r   )	r   rW   noise_scaler   rq   r   rr   r|   r{   s	         rH   
ridge_lossz,test_positive_ridge_loss.<locals>.ridge_lossV  s    $	#)''55C;Q%+BS!T!TTDD;DRVQT\I5!;<<<sU{RV!GN
 N
 @
 
 	
rJ   r   T)r|   r6  r  )Nr   )r   r   r   rX  )r|   n_checksr  r   model_positivelossloss_positiverW   loss_perturbedrr   r{   s   `        @@rH   test_positive_ridge_lossr  O  s    SSrJJJDAqEH

 

 

 

 

 

 

 

 ""1a((E666::1a@@N
 :eDJ~..M=     h / /#NNNN...../ /rJ   c                     t          ddd          \  }}t          j        |d          }t          j        | g          } dddd}t	          ||| fi |}t          |||           }t          ||d	d
           dS )zETest that LBGFS gets almost the same coef of svd when positive=False.r  r   r  rX   FgؗҜ<i  )r6  r   r   re  r   rG  N)r   rB   expand_dimsr0  r   r   r,   )r|   rr   r{   config
coef_lbfgsr   s         rH   test_lbfgs_solver_consistencyr  u  s     SSrJJJDAq
q!AJwE F aE44V44Jq!U++MJDqAAAAAArJ   c                  $   t          j        ddgddgg          } t          j        ddg          }t          ddddd	d
          }t          j        t
          d          5  |                    | |           ddd           dS # 1 swxY w Y   dS )z1Test that LBFGS solver raises ConvergenceWarning.rX   rY   g    _g    _Br   r  Fr   T)r|   r   r   r   r6  r   zlbfgs solver did not converger   N)rB   r   r   r   r   r   r   )rr   r{   r   s      rH   test_lbfgs_solver_errorr    s    
1b'Aq6"##A
%A  E 
(0O	P	P	P  		!Q                 s   !BB	B	r  tallc                    | |dk    s|dv r| rt          j        d           t          j                            d          }d}|dk    r|dz  }n|dz  }|                    ||          }|                    |          }	| ||          }t          | d	||d
k    |d          }
t          di |
                    ||	d          }|j	        
                                }| r|j        }t          j        |	          }|                    ||	|           t          |j	        |d           | rt          |j        |           |                    dd|j        d                   }d|dd<   |	ddxx         dz  cc<   |                    ||	|           |j	        
                                }| r|j        }|                    |ddddf         |	dd         |dd                    t          |j	        |d           | rt          |j        |           t          di |
                    t          j        |
d         z            }|                    ||	t          j        |z             |dv r| st          j        d| d           t          |j	        |d           | rt          |j        |           ||                                }t          j        ||d|dz           gd          }t          j        |	|	d|dz           g          }|
                                }|d|dz  xx         dz  cc<   t          j        ||d|dz           gd          }| ||          } ||          }t          di |
                    ||	|          }t          di |
                    |||          }t          |j	        |j	                   | rt          |j        |j                   dS 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.
    Nr9   )r;   r>   zunsupported configurationr   rR   r  rL   r   r  r   )r   r|   r   r6  rW   r   r   rk  r^  r   r   r]   r  r|   r   r   zSolver z- does fail test for scaling of sample_weight.r   r   )r   r   rB   rd   re   r4  r   r   r   r   r2  r   	ones_liker,   rg   r   r  pir   toarrayr   )r   r   r  r   rn   rq   rT   rU   rr   r{   rP   r  r   r   r   r  X2y2sample_weight_1sample_weight_2r  s                        rH   $test_ridge_sample_weight_consistencyr    su    #U??v)===-=K3444
 )


#
#CIv~~!^

]
J''AA#Q#G#'  F //&//

a$

7
7C9>>D #N	LOOMGGAqG...CIt$//// 3	222
 KKDqqwqzKBBMM"##bccFFFdNFFFGGAqG...9>>D #N	GGAcrc111fIq"v]3B3-?G@@@CIt$//// 3	222 ??6??%%BEF7O,C%DDDHHQ!6H777   TvTTTUUUDJ40000 4333 #IIKK	A.	Q./0q	9	9	9B	A.	Q./0	1	1B#((**O$i1n$%%%*%%%n	&6	Q&678q  O #Qb!!??6??q!?CCD??6??r2_EEDDJ
+++ :99999: :rJ   r   c                    t          dd|d          \  }}t          j        |j        d         f          }| rd|ddd<   d	}t	          |d
|d          }|                    |||           t          j        g |j        t          |          R           }t                      }	t          |          D ]\  }
}t          |	
                    ||                    D ]c\  }\  }}t          ||          }|                    ||         ||         ||                    |                    ||                   ||d|
f<   dt          |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(  r\   r   )rT   rU   r   rW   r   r   NrL   r!  rZ  T)rF  r]  r   rp  r   r   .)r   rB   r   r   r   r   emptyr	  r    	enumeraters  r   r   r,   rt  )r\  r   r   rr   r{   r   rF  r  r{  r\  	alpha_idxr|   idx	train_idxtest_idxr   s                   rH   !test_ridge_cv_results_predictionsr    s   " "	  DAq G171:-000M ! cccF (#	  H LLA]L333 (!817!8CKK!8!8999K	B%f-- J J	5*3BHHQNN*C*C 	J 	J&C&)X]CCCEIIa	lAiL-	2JKKK/4}}Qx[/I/IKS)+,,	J H(+66666rJ   c                    t          d|           \  t          j        j        d         f          t	          dd          }|                               t                      }t          |j        	          t          j	        f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.
    rL   r   rW   r   r  rZ  T)r]  rp  r   r   c                     g | ]H\  }}                     |         |         |                                        |                   IS )r   r   r   )r   traintestrr   r   r   r{   s      rH   r   z;test_ridge_cv_multioutput_sample_weight.<locals>.<listcomp>8	  se     	
 	
 	
 t IIah%e8LIMMUU$ 	
 	
 	
rJ   N)r   rB   r   r   r   r   r    r   r_  squeezers  r,   r  r   )rn   r  r\  
y_pred_loorr   r   r   r{   s       @@@@rH   'test_ridge_cv_multioutput_sample_weightr  (	  s     Q5GHHHDAqG171:-000M7$OOOHLLA]L333	B(((E	
 	
 	
 	
 	
 	
 	
  "xx{{		
 	
 	
 J H(+=a+L+L*LMMMMMrJ   c                     t          dd          \  d fd} t          |           }|                               t                      }t	          |j                  t          j        fd|                              D                       }t          |j
         |                      d	S )
zECheck that `RidgeCV` works properly with a custom multioutput scorer.rL   r   r  c                     | |z
  dz  }t          j        |d          }|j        dk    rt          j        |ddg           S | S )NrL   r   r   rX   )r  )rB   rC   ndimr  )y_truerF   errorsmean_errorss       rH   custom_errorz=test_ridge_cv_custom_multioutput_scorer.<locals>.custom_errorF	  sX    6/a'gf1---q  J{QF;;;;; |rJ   c                 D     ||                      |                     S )zGMultioutput score that give twice more importance to the second target.)r   )r  rr   r{   r  s      rH   custom_multioutput_scorerzJtest_ridge_cv_custom_multioutput_scorer.<locals>.custom_multioutput_scorerP	  s&    Q	 1 1! 4 45555rJ   )r]  r   c                     g | ]@\  }}                     |         |                                       |                   AS r   r  )r   r  r  rr   r   r{   s      rH   r   z;test_ridge_cv_custom_multioutput_scorer.<locals>.<listcomp>Z	  sE    WWWKE41U8QuX	&	&	.	.qw	7	7WWWrJ   N)r   r   r   r    r   r_  rB   r  rs  r,   r  )r  r  r\  r  rr   r  r   r{   s       @@@@rH   'test_ridge_cv_custom_multioutput_scorerr  B	  s    QQ777DAq  6 6 6 6 6 8999HLLA	B(((EWWWWWW288TU;;WWW J H(<<:+F+F*FGGGGGrJ   metaestimator)enable_metadata_routingc                 >     |                                               dS )zTest that `RidgeCV` or `RidgeClassifierCV` with default `scoring`
    argument (`None`), don't enter into `RecursionError` when metadata is routed.
    N)get_metadata_routing)r  s    rH   *test_metadata_routing_with_default_scoringr  d	  s"     MOO((*****rJ   zmetaestimator, make_datasetc                      |ddd          \  }}t          |           } |                     ||t          j        |j        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   r   N)r   r   rB   r   r   )r  r  rr   r{   s       rH   +test_set_score_request_with_default_scoringr  m	  s\     <#!"EEEDAq-((Ma"'!'!**=*=>>>>>rJ   )r(  r(  r   r\   rX   r)  r*  r*  TFFNrA   )r  	itertoolsr   numpyrB   r   scipyr   sklearnr   r   sklearn.baser   sklearn.datasetsr   r	   r
   r   sklearn.exceptionsr   sklearn.linear_modelr   r   r   r   r   r   sklearn.linear_model._ridger   r   r   r   r   r   r   sklearn.metricsr   r   r   sklearn.model_selectionr   r   r   r    r!   sklearn.preprocessingr"   sklearn.utilsr#   sklearn.utils._array_apir$   r%   r&   r'   r(   r)   r*   -sklearn.utils._test_common.instance_generatorr+   sklearn.utils._testingr,   r-   r.   r/   r0   sklearn.utils.estimator_checksr1   r2   sklearn.utils.fixesr3   r4   r5   r6   r7   r8   SOLVERSr   r   load_diabetesdiabetesr  r   r   r   r   r   indrd   re   rq   r/  	load_irisr  r  r  rI   rM   fixturer   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r  r  r"  r'  r:  rM  r0  rd  rg  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   sortedr  r  r  r  r  r%  r(  r.  r1  r8  rF  rK  rM  r   	TypeErrorrQ  rS  rU  r  r[  r_  rc  rg  r   r   rp  r}  r  rX  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rJ   rH   <module>r     sT                     , , , , , , , ,                  2 1 1 1 1 1                                 H G G G G G G G G G              / . . . . . , , , , , ,                  S R R R R R                                    B
A
A 4 #S  !8!##! 
Jbi
 #$$iA C   	$3$i#C*S/ 
JxDK% % %+ + + '(((C& C& )(C&L 7++4-88)# )# 98 ,+)#X 7++4-88#? #? 98 ,+#?L 7++4-88%2 %2 98 ,+%2P 7++4-882+ 2+ 98 ,+2+j 7++4-8828 28 98 ,+28j 7++4-882+ 2+ 98 ,+2+j 7++4-88+dVn-DEE3+../' /' /. FE 98 ,+/'d+ + +
 
 
4 4 4<> > >$0 0 0*  @ "2"2"233.99
D 
D :9 43
D "N"N"NOO*T5M::.99. . :9 ;: PO.$ "N"N"NOO*T5M::.993 3 :9 ;: PO3& 	
	* * * *Z  *1'GGGF^#+
 +
  
 
 (FFF +R +R	 
 
+R\ eW%566~(EFFWh$7884-88   $K $K  98 98 GF 76$KNK K K@ eW%566~(EFF2w//#   ;G ;G  0/ GF 76;G| +dVn-DEE8   ? ?  FE?6 6 6r3 3 3$ 	%	(	(	(/:		E	2	2	24GH - - - gii!$5$5$7$79L#MN  ay))0 0 *)	 
0D D DN3 3 3P P P, , ,$ T:7I$JKKeeAhh/00+dVn-DEE" " FE 10 LK" eeAhh/00+dVn-DEE2 2 FE 102    @D$
 $
 $
 $
N )--//'   
 %'AB    
 Uu%%%			 	!  	 	 	 	  (( /////1B1B1D1DE  *--//'   
D D  D" ''GGG ', ', ',T *FF3I,J,JKKF F LKF. "
 
 .99D D :9
 
D ?  ?  ?F 2C DEE0 0 FE08A A A .0LM   : T:7I$JKKC C LKC8 w0A&BCC= = DC=( ay))w0A&BCC  DC *)(K K K0$! $! $!N /1a&1a&1ABB^#n4~EV P P	  CB
P"   w0A&BCC
M	"J0ST*+1	
 }%@	
  & &!  DC"& w0A&BCC" " DC""5 5 5 KLL# # ML#$ #I#I#IJJ-e}==.99#F #F :9 >= KJ#FL #>#>#>??.99# # :9 @?# -e}==.99W W :9 >=W8 +eT];;4*?@@rxj>&ABBOOO 4< 4<  CB A@ <;4<n NNN J J JDC C C< NNN  q**I I +* I@" " " 	"	T4L)	T1I& " " " FG#4554-88"8"8"899$ $ :9 98 65$" 4-88"8"8"8991 1 :9 9812 EEE 
 
 
" "8"8"899"/ "/ :9"/J "8"8"899B B :9B   " 5$-88+dVn-DEE&&!1227gY#677\: \: 87 32 FE 98\:~ -t}==5$-88q!f--(7 (7 .- 98 >=(7VN N N4H H HD 74E*FGG---+ + .- HG+ !	O$				12  ---? ? .- ? ? ?rJ   