
    Mpj                       S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJ	r	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJrJrJr  S S
KJr  S SKJ r J!r!J"r"  S SK#J$r$J%r%  S SK&J'r'J(r(J)r)  S SK*J+r+J,r,J-r-J.r.J/r/J0r0  S SK1J2r2  S SK3J4r4J5r5J6r6  S SK7J8r8  S SK9J:r:J;r;  S SK<J=r=J>r>J?r?  S SK<J@rA  S SKBJCrCJDrD  S SKEJFrFJGrGJHrH  \R                  R                  S5      rK\R                  R                  S5      rKSrLSS /S S/SS//rM/ SQrN/ SQrO\" 5       rPS rQ\R                  R                  S\H5      S  5       rS\R                  R                  S\H5      S! 5       rT\R                  R                  S"5      \R                  R                  S#S$S%/5      S& 5       5       rU\R                  R                  S'5      \R                  R                  S(5      \R                  R                  S)\ \!/5      S* 5       5       5       rV\R                  R                  S'5      \R                  R                  S+5      \R                  R                  S)S,/\ S-4\!S.4/5      S/ 5       5       5       rW\R                  R                  S0\G5      S1 5       rXS2 rYS3 rZS4 r[S5 r\S6 r]\R                  R                  S7 5       r_\R                  R                  S8S9S:/5      S; 5       r`\R                  R                  S'5      S< 5       raS= rb\R                  R                  S>S?S@/4SASBSC/4SDSBSC/4SES@/4SFSBSC/4/5      SG 5       rcSH rd\R                  R                  S8S9S:/5      SI 5       re\R                  R                  SJS:S9/5      \R                  R                  SKSLSM/5      SN 5       5       rfSO rg\R                  R                  SPS:S9/5      SQ 5       rh\R                  R                  SPS:S9/5      SR 5       ri\R                  R                  S#\L5      \R                  R                  S\H5      SS 5       5       rj\R                  R                  STSUSVSW.SUSVSXSY./5      \R                  R                  SZSTS[/5      S\ 5       5       rk\R                  R                  S'5      \R                  R                  S(5      \R                  R                  S]S^5      \R                  R                  S#\L5      S_ 5       5       5       5       rl\R                  R                  S#\L5      S` 5       rmSa rnSb ro\R                  R                  SSc /\H-   5      Sd 5       rpSe rqSf rr\R                  R                  \R                  R                  S\H5      Sg 5       5       rs\R                  R                  S-SS /5      Sh 5       rtSi ru\R                  R                  Sj\R                  " SSk5      5      \R                  R                  Sl/ SmQ5      Sn 5       5       rw\R                  R                  S#\L5      \R                  R                  S8S9S:/5      So 5       5       rx\R                  R                  S#\y" \z" \L5      \z" Sp/5      -
  5      5      \R                  R                  SqSr5      \R                  R                  SPSr5      Ss 5       5       5       r{\R                  R                  S#S%St/5      \R                  R                  SPSr5      \R                  R                  SuS\R                  45      Sv 5       5       5       r}\R                  R                  S-SW5      \R                  R                  S\H5      Sw 5       5       r~\R                  R                  S#\L5      \R                  R                  SPS:S9/5      \R                  R                  S\H5      Sx 5       5       5       rSy rSz r\R                  R                  S{5      \R                  R                  Su/ S|Q5      \R                  R                  S}S~S/5      S 5       5       5       r\R                  R                  Su/ SQ5      S 5       r\R                  R                  Su\GR                  " SSLS5      5      \R                  R                  S-/ SQ5      S 5       5       r\R                  R                  SKS5      S 5       r\R                  R                  S.S\GR                  " S SSL5      45      \R                  R                  SKS5      S 5       5       r\R                  R                  SKS5      S 5       rS r\R                  R                  S{5      S 5       r\R                  R                  Su\GR                  " SSLS5      5      \R                  R                  S-/ SQ5      S 5       5       rS rS r\R                  R                  S{5      \R                  R                  S#\y" \z" \L5      \z" Sp/5      -
  5      5      S 5       5       r\R                  R                  S#\y" \z" \L5      \z" Sp/5      -
  5      5      S 5       r\R                  R                  \R                  R                  SSS:SSS.S S9SSS.S S:SSS./5      S 5       5       rS r\R                  R                  S#/ SQ5      \R                  R                  SPS:S9/5      S 5       5       r\R                  R                  SZSSSSY.S[/5      S 5       r\R                  R                  S#\L5      \R                  R                  S\H5      S 5       5       rS rS rS r\" S9S9S 5       rS r\R                  R                  S#\L5      S 5       rS rS r\R                  R                  S'5      \R                  R                  S(5      \R                  R                  S\ \!/5      S 5       5       5       r\R                  R                  S'5      \R                  R                  S5      \R                  R                  S\ \!/5      S 5       5       5       rS r\R                  R                  S5      \R                  R                  S5      S 5       5       rS r\R                  R                  SS:S9/5      \R                  R                  SS:S9/5      \R                  R                  SS:S9/5      \R                  R                  SZ/ SQ5      \R                  R                  S\?" 5       5      \R                  R                  S"5      S 5       5       5       5       5       5       r\R                  R                  S5      \R                  R                  S}SS/5      S 5       5       r\R                  R                  S5      S 5       r\R                  R                  S'5      S 5       r\R                  R                  SS9S:/5      \R                  R                  S\?" 5       5      \R                  R                  S"5      S 5       5       5       r\R                  R                  Sj/ SQ5      \S 5       5       r\R                  R                  SKSLSM/5      \R                  R                  SPS9S:/5      \S 5       5       5       r\S 5       rg)    N)assert_allcloseassert_array_almost_equalassert_array_equal)sparse)LinAlgWarningsvd)config_context)HalfMultinomialLoss)clone)RecordingCallbackskip_callback_test_if_wasm)	load_irismake_classificationmake_low_rank_matrix)ConvergenceWarning)LogisticRegressionLogisticRegressionCVSGDClassifier)_log_reg_scoring_path_logistic_regression_path)brier_score_loss
get_scorerlog_loss)GridSearchCVKFoldLeaveOneGroupOutStratifiedKFoldcross_val_scoretrain_test_split)OneVsRestClassifier)LabelEncoderStandardScalerscale)l1_min_c)compute_class_weightshuffle)_atol_for_typemove_to)yield_namespace_device_dtype_combinationsdevice)_array_api_for_testsignore_warnings)	_IS_32BITCOO_CONTAINERSCSR_CONTAINERSz6error::sklearn.exceptions.ConvergenceWarning:sklearn.*z6ignore:The default value for l1_ratios.*:FutureWarning)lbfgs	liblinear	newton-cgnewton-choleskysagsaga   )r   r8   r8   )   r8   r   c                    [        U5      n[        R                  " U5      nUR                  S   nU R	                  X5      R                  U5      n[        U R                  U5        UR                  U4:X  d   e[        Xb5        U R                  U5      nUR                  X54:X  d   e[        UR                  SS9[        R                  " U5      5        [        UR                  SS9U5        g)z;Check that the model is able to fit the classification datar   r8   axisN)lennpuniqueshapefitpredictr   classes_predict_probar   sumonesargmax)clfXy	n_samplesclasses	n_classes	predictedprobabilitiess           d/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictionsrQ   E   s    AIiilGa I%%a(Is||W-??yl***y$%%a(M9"8888M%%1%-rwwy/AB}+++3Q7    csr_containerc                 |   [        [        5       [        [        5        [        [        5       U " [        5      [        5        [        [        SS9[        [        5        [        [        SS9U " [        5      [        5        [        [        SS9[        [        5        [        [        SS9U " [        5      [        5        g )Nd   CFfit_intercept)rQ   r   rI   Y1rS   s    rP   test_predict_2_classesr\   W   s|     (*Ar2(*M!,<bA(3/B7(3/q1A2F(u=q"E(u=}Q?OQSTrR   c                     [        [        SS9[        [        5        [        [        SS9U " [        5      [        5        g )N
   rV   )rQ   r   rI   Y2r[   s    rP   test_predict_3_classesr`   e   s+    (2.26(2.a0@"ErR   z,error::sklearn.exceptions.ConvergenceWarningsolverr1   r4   c                    [         R                  " / SQ/ SQ/5      R                  n[         R                  " / SQ5      n[        SUR                  S   -  SSSU S	9nUR                  X5        [        UR                  S
SS9  [        UR                  SS//SS9  [         R                  " / SQ5      nUR                  X5        [        UR                  / SQSS9  [        UR                  SS/SS/SS//SSS9  g)z<Compare Logistic regression with L2 regularization to glmnet)	r7   r   r8   r9         )	r   r   r8   r   r8   r8   r8   r   r   )	r   r   r   r8   r8   r8   r8   r8   r8         ?r   T:0yE>,  )rW   rY   tolmax_iterra   g;?h㈵>rtolg&+4u?gGGٍ?)	r   r   r   r8   r8   r8   r9   r9   r9   )g:MupgH"q?gÜ麿gމUؿg	Wdg0Rfg'u=?gnHW?g;%ro   atolN)	r>   arrayTr   r@   rA   r   
intercept_coef_)ra   rI   rJ   glms       rP   test_logistic_glmnetrw   k   s      	13NOPRRA
,-A

!''!*
C GGAMCNNM=CII >?dK6 	,-AGGAMHt 		^,/=)	

 	rR   z1ignore:The default value.*scoring.*:FutureWarningz.ignore:.*use_legacy_attributes.*:FutureWarningLRc                 ,   [         R                  [         R                  p!S HB  nSU S3nU " US9n[        R                  " [
        US9   UR                  X5        S S S 5        MD     S HT  nSU-  nU [        :X  a  U " USS	9nOU " US
S9n[        R                  " [
        US9   UR                  X5        S S S 5        MV     S HB  nSU-  nU " USS9n[        R                  " [
        US9   UR                  X5        S S S 5        MD     S HU  nSU S3nU [        :X  a  U " USS	9nOU " USS9n[        R                  " [
        US9   UR                  X5        S S S 5        MW     U [        L aK  SnU " [        R                  SS9n[        R                  " [
        US9   UR                  X5        S S S 5        g g ! , (       d  f       GM  = f! , (       d  f       GMs  = f! , (       d  f       GM,  = f! , (       d  f       M  = f! , (       d  f       g = f)Nr2   zThe 'z4' solver does not support multiclass classification.ra   match)r1   r3   r4   r5   z/Solver %s supports only 'l2' or None penalties,r8   )ra   l1_ratior8   )ra   	l1_ratios)r1   r3   r4   r5   r6   z1Solver %s supports only dual=False, got dual=TrueT)ra   dualz;Only 'saga' solver supports elasticnet penalty, got solver=.      ?)r   z6penalty=None is not supported for the liblinear solverr2   rW   ra   )
irisdatatargetpytestraises
ValueErrorrA   r   r>   inf)rx   rI   rJ   ra   msglrs         rP   test_check_solver_optionr      s   
 99dkkq  fXQRv]]:S1FF1L 21   C?&H##6A.B6T2B]]:S1FF1L 21 C KAFJvD)]]:S1FF1L 21 K  KF8STU##6C0B6V4B]]:S1FF1L 21   
F"&&-]]:S1FF1L 21  A 21 21
 21 21 21s<   
F:$G,G G3H:
G
	
G	 
G0	3
H	
Hzignore::FutureWarningargr~   r   c                    U " SSSS.US 0D6n[         R                  " [        SS9   UR                  [        R
                  " SS/SS	//5      [        R
                  " S
S/5      5        S S S 5        g ! , (       d  f       g = f)N
elasticnetr6   )penaltyra   z.*l1_ratio.*r|   r8   r9   rf   rg   r    )r   r   r   rA   r>   rr   )rx   r   models      rP   $test_elasticnet_l1_ratio_err_helpfulr      sg     B|FBsDkBE	z	9		"((QFQF+,bhh1v.>? 
:	9	9s   AA33
Bcoo_containerc                 J   [         R                  R                  u  p[         R                  [         R                     n[        [         R                  5      n[        5       R                  XC5      nUR                  U5      nUR                  5         [        R                  " UR                  5      (       d   eUR                  U5      nU " U5      nUR                  U5      n	UR                  5         UR                  U5      n
[        Xg5        [        Xi5        [        Xj5        g N)r   r   r@   target_namesr   r#   r   rA   decision_functionsparsifyr   issparseru   densifyr   )r   rK   
n_featuresr   rI   rH   pred_d_dpred_s_dsp_datapred_s_spred_d_ss              rP   test_sparsifyr      s     !IIOOIt{{+FdiiA


"
"1
-C$$Q'HLLN??399%%%%$$Q'HAG$$W-HKKM$$W-Hh1h1h1rR   c                  &   [         R                  R                  S5      n U R                  S5      n[         R                  " UR
                  S   5      nSUS'   [        SS9nUS S n[        R                  " [        SS9   UR                  [        U5        S S S 5        [        R                  " [        SS9   UR                  X5      R                  U R                  S5      5        S S S 5        g ! , (       d  f       N`= f! , (       d  f       g = f)	Nr   )   r^   random_stater7   z.Found input variables with inconsistent numberr|   zX has 12 features, but)rf      )r>   randomRandomStaterandom_samplerF   r@   r   r   r   r   rA   rI   rB   )rngX_y_rH   y_wrongs        rP   test_inconsistent_inputr     s    
))


"C			7	#B	!	BBqE
!
,C "gG	J
 	7
 
z)A	B 1 1' :; 
C	B
 
 
C	Bs    C180D1
C?
Dc                      [        5       n U R                  [        [        5        SU R                  S S & SU R
                  S S & [        U R                  [        5      S5        g )Nr   )r   rA   rI   rZ   ru   rt   r   r   rH   s    rP   test_write_parametersr   $  sG    

CGGArNCIIaLCNN1c33A6:rR   c                     [         R                  " [        [         R                  S9n [         R                  U S'   [        5       n[        R                  " [        SS9   UR                  U [        5        S S S 5        g ! , (       d  f       g = f)Ndtyper   r8   zInput X contains NaN.r|   )r>   rr   rI   float64nanr   r   r   r   rA   rZ   )XnanrH   s     rP   test_nanr   -  sW     88ARZZ(DDJ

C	z)@	Ab 
B	A	As   A>>
Bc                 B   [         R                  R                  U 5      n[         R                  " UR	                  SS5      SS/-   UR	                  SS5      45      nS/S-  S/S-  -   n[         R
                  " SSS5      n[        nS H~  nU" [        5      " UUSS/US	S
USU S9	u  ptn[        U5       HO  u  p[        U
S	S
UU SS9nUR                  X#5        UR                  R                  5       n[        XU	   SSU-  S9  MQ     M     S H  nS/nU" [        5      " UUSS/USUSU S9u  ptn[        US   SSU US9nUR                  X#5        [         R                  " UR                  R                  5       UR                  /5      n[        XS   SSU-  S9  M     g )NrU   r9   r8   r7   r   rg   r^   r5   r6   Frm     )rL   CsrY   rk   ra   rl   r   )rW   rY   rk   ra   r   rl   zwith solver = %s)decimalerr_msg)r1   r3   r4   r2   r5   r6        @@ư>     @)rL   r   rk   ra   intercept_scalingr   )rW   rk   r   r   ra   )r>   r   r   concatenaterandnlogspacer-   r   	enumerater   rA   ru   ravelr   rt   )global_random_seedr   rI   rJ   r   fra   coefs_irW   r   lr_coefs                rP   test_consistency_pathr   8  s   
))

 2
3C
		#q)QF2CIIc14EFGA	
c	RD3JA	Q2	BA "23F+

1 bMDA##/B FF1Lhhnn&G%q16H66Q " "8 XU23F%+	
1  e%+
 	q.."((.."2BMM!BC!1Xq2Dv2M	
+ XrR   c                      [         R                  R                  S5      n [         R                  " U R	                  SS5      SS/-   U R	                  SS5      45      nS/S-  S/S-  -   nS/n[
        R                  " [        5       n[        XSS/USSSSS9  S S S 5        [        W5      S:X  d   eUS   R                  R                  S   nS	U;   d   eS
U;   d   eSU;   d   eSU;   d   eg ! , (       d  f       N\= f)Nr   rU   r9   r8   r7   r           )rL   r   rk   rl   r   verbosez-lbfgs failed to converge after 1 iteration(s)z!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r>   r   r   r   r   r   warnsr   r   r=   messageargs)r   rI   rJ   r   recordwarn_msgs         rP   .test_logistic_regression_path_convergence_failr   x  s   
))


"C
		#q)QF2CIIc14EFGA	
c	RD3JA
B
 
(	)V!1a&RS11VW	
 
*
 v;!ay  %%a(H:hFFF.(:::x'''2h>>> 
*	)s   C//
C=c                    [        SU S9u  p[        U SSSS9nUR                  X5        [        U SSSS9nUR                  X5        [        U S-   SSSS9nUR                  X5        [        UR                  UR                  5        Sn[
        R                  " [        US	9   [        UR                  UR                  5        S S S 5        g ! , (       d  f       g = f)
N   rK   r   TMbP?r2   )r   r   rk   ra   r8   z)Arrays are not almost equal to 6 decimalsr|   )r   r   rA   r   ru   r   r   AssertionError)r   rI   rJ   lr1lr2lr3r   s          rP    test_liblinear_dual_random_stater     s     :LMDA
'	C GGAM
'	C GGAM
'!+	C GGAM cii3
5C	~S	1!#))SYY7 
2	1	1s   "!C
Cuse_legacy_attributesTFc                    Su  p#n[         R                  R                  U 5      nUR                  X#5      n[         R                  " UR                  SUR                  U5      -  5      5      nXfR                  5       -  nXfR                  5       -  n[        S/SSU SUSUS9nUR                  Xg5        [        SSU SS	9n	U	R                  Xg5        [        U	R                  UR                  5        UR                  R                  S
U4:X  d   e[        UR                  SS
/5        [!        UR                  5      S:X  d   eUR"                  R                  S:X  d   eUR"                  R                  S   n
UR$                  R                  S:X  d   eUR$                  R                  S   nU(       a  [         R&                  " [)        UR*                  R-                  5       5      5      nUR                  S
XJX4:X  d   e[         R&                  " [)        UR.                  R-                  5       5      5      nUR                  S
XJU4:X  d   eg UR*                  R                  XKU
S
U4:X  d   e[1        UR2                  [4        5      (       d   e[1        UR6                  [4        5      (       d   eUR.                  R                  XKU
4:X  d   eg )N2   r   rf   r   rh   r   Fr2   neg_log_loss)r   r   rY   r   ra   cvscoringr   )rW   rY   r   ra   r8   r7   r9   r   r   )r>   r   r   r   signdotmeanstdr   rA   r   r   ru   r@   r   rC   r=   Cs_
l1_ratios_asarraylistcoefs_paths_valuesscores_
isinstanceC_float	l1_ratio_)r   r   rK   r   n_cvr   X_refrJ   lr_cvr   n_Csn_l1_ratioscoefs_pathsscoress                 rP   test_logistic_cvr    s\    #+I4
))

 2
3CIIi,E
		!cii
3345A	ZZ\E	YY[E 5'3	E 
IIe	
U1CK
B FF5bhh4;;J///u~~Aw/u~~!###99??d"""99??1D!!T)))""((+Kjje&8&8&?&?&A!BC  QK$LLLLD!5!5!789||4{;;;;!!''DtQ
+SSSS%((E****%//51111}}""t$&????rR   c                 z    [        U S9u  p[        S/SSU S9nUR                  X5        UR                  S:X  d   eg)a5  Test that non-elasticnet penalty with refit=False and
use_legacy_attributes=False works without error.

For non-elasticnet penalties, l1_ratio=0.0 (equivalent to pure L2).
Previously, None was stored, which caused float() to raise a
TypeError when use_legacy_attributes=False converted the value to a scalar.
r   r   F)r   refitr   r   N)r   r   rA   r   )r   rI   rJ   r   s       rP   +test_logistic_cv_refit_false_non_elasticnetr    sH     ,>?DA %#'	E 
IIaO??c!!!rR   c                      " S S5      n U " 5       n/ SQnSn[        USUUSS9n[        SS	9u  pVUR                  XV5        UR                  US   :X  d   eUR                  U[        U5      -  :X  d   eSUl        UR                  XTR                  U5      5      nXqR                  S   :X  d   eUR                  S
:X  d   eg)z0Test that LogisticRegressionCV calls the scorer.c                   $    \ rS rSrS rSS jrSrg)0test_logistic_cv_mock_scorer.<locals>.MockScoreri  c                 $    SU l         / SQU l        g )Nr   )皙?g?皙?r   callsr  )selfs    rP   __init__9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__  s    DJ.DKrR   Nc                     U R                   U R                  [        U R                   5      -     nU =R                  S-  sl        U$ )Nr8   )r  r  r=   )r  r   rI   rJ   sample_weightscores         rP   __call__9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__  s4    KK

S-= =>EJJ!OJLrR   r  r   )__name__
__module____qualname____firstlineno__r  r  __static_attributes__r   rR   rP   
MockScorerr	    s    	/	rR   r  )r8   r9   rf   rg   r9   r   F)r   r   r   r   r   r   r   r8   N)	r   r   rA   r   r  r=   r  rB   r  )r  mock_scorerr   r   r   rI   rJ   custom_scores           rP   test_logistic_cv_mock_scorerr     s      ,K	B	
B	#
B A.DAFF1L 55BqE>> SW,,, K88Azz!}-L--a0000!!!rR   zscoring, multiclass_agg_listaccuracy 	precision_macro	_weightedf1r   recallc                    [        SSSSS9u  p#[        R                  " S5      [        R                  " SS5      pT[        SSS	9nUR	                  5       nS
US'   S H  nXx	 M     UR                  X$   X4   5        U HW  n	[        X	-   5      n
[        [        UUUU4[        R                  " U5      S/U
S S S S.UD6S   S   U
" XbU   X5   5      5        MY     g )NrU   *   rf      )rK   r   rM   n_informativeP   rh   r1   r   l2r   )rW   n_jobs
warm_start)rL   r   r   max_squared_sumr  score_paramsr9   r   )
r   r>   aranger   
get_paramsrA   r   r   r   r?   )r   multiclass_agg_listrI   rJ   traintestr   paramskey	averagingscorers              rP   "test_logistic_cv_multinomial_scorer;    s   & B!1DA ))B-2s!34	c'	2B]]_F
 F9 -K -FF18QX(	G/0!!	
 		!5 $"!    2w(	
 )rR   c                     Su  pn[        U UUSSS9u  p4[        5       R                  / SQ5      R                  U5      n[        R
                  " U5      S-
  n[        5       n[        SSSS	9n[        5       n[        SSSS	9n	UR                  X45        UR                  X45        UR                  X55        U	R                  X55        [        UR                  UR                  5        [        UR                  U5      UR                  U5      5        [        UR                  5      / SQ:X  d   e[        UR                  U	R                  5        [        UR                  U5      U	R                  U5      5        [        UR                  5      / SQ:X  d   e[        U	R                  5      / SQ:X  d   e[        [        R                  " UR                  U5      5      5      / SQ:X  d   e[        [        R                  " U	R                  U5      5      5      1 S
k::  d   e[        / SQSSS	9R                  X55      n	[        [        R                  " U	R                  U5      5      5      / SQ:X  d   e[        SSSS.S9R                  X55      n	[        [        R                  " U	R                  U5      5      5      SS/:X  d   eg)zTest internally encode labelsr   rf   r   )rK   r   rM   r+  r   )barbazfoor8   Fr   )r   r   r   >   r=  r>  r?  )r8   r9   r^   r9   )class_weightr=  r>  N)r   r!   rA   inverse_transformr>   rr   r   r   r   ru   rD   sortedrC   r?   rB   set)
rK   r   rM   r   rJ   y_strr   r   lr_str	lr_cv_strs
             rP   2test_multinomial_logistic_regression_string_inputsrG  U  s\   '/$I9"HE N45GGJE
aA		B #E
  !F$#I FF5	IIe
JJuMM%BHHfll+B$$U+V-A-A%-HI&//"&;;;;EKK1E''.	0G0G0NO&//"&;;;;)$$%)>>>> "))FNN51237LLLLryy**51237LLLL %# 
c%	 
 "))I--e456:OOOO #!A0NOSSI "))I--e4565%.HHHrR   c                    [         R                  [         R                  p!UR                  u  p4Sn[	        U5      n[        UR                  X5      5      n[        USSSS9nUR                  X5        UR                  R                  SU4:X  d   e[        UR                  / SQ5        [        R                  " [        UR                  R                  5       5      5      n	U	R                  SUSUS	-   4:X  d   eUR                   R                  S
:X  d   e[        R                  " [        UR"                  R                  5       5      5      n
U
R                  SUS4:X  d   e[%        ['        [)        SS95      S[        R*                  " SSSS90SS9R                  X5      nS GH  nUS;   a  SOSn[        UUSUS;   a  SOSSSU S9nUS:X  a  [-        U5      nUR                  X5        UR/                  X5      nUR/                  X5      nUU:  d   eUR                  R                  UR                  R                  :X  d   e[        UR                  / SQ5        U (       Ga  [        R                  " [        UR                  R                  5       5      5      n	U	R                  SUSUS	-   4:X  d   eUR                   R                  S
:X  d   e[        R                  " [        UR"                  R                  5       5      5      n
U
R                  SUS4:X  d   e[1        UR                  S   R                  S   5       H  nUR                   Vs/ s H  nUR                  U   US S 2S S24   PM     nn[        R2                  " US	S5      R5                  [7        UR                   5      S5      n[        R8                  " UU-  S	S9n[        R:                  " [        R<                  " U5      S:  5      (       a  M   e   GMb  SSS	SUS	-   4u  nnnnnUR                  R                  UUUUU4:X  d   e[?        UR@                  [B        5      (       d   e[?        URD                  [B        5      (       d   eUR"                  R                  UUU4:X  d   e[1        UR                  R                  S   5       Hi  nUR                  USS S 2S S 2S S24   n[        R8                  " UU-  SS9n[        R:                  " [        R<                  " U5      S:  5      (       a  Mi   e   GM     [G        SS9n[        RH                  " U5      n[7        U5      S:X  d   eUR                  X5       H  u  nn[7        [        RH                  " UU   5      5      S:X  d   e[7        [        RH                  " UU   5      5      S	:X  d   e[K        UU   5      [K        UU   5      -  [K        5       :X  a  M   e   [        USS S!9R                  X5      n[        R:                  " UR"                  S":H  5      (       d   e[        US#[        R*                  " S$SS5      SS%9R                  X5      nUR@                  S&:X  d   eUR"                  * n[        R:                  " US':  5      (       d   e[        RL                  " U5      S(:  d   eg s  snf ))Nr9   r4   Tr   )r   ra   r   r   rf   r   r8   r9   r^   r8   )r^   r{   estimator__Crc   rg   )numr   )r1   r3   r5   r6   r        r)  r   {Gz?)ra   rl   r   rk   r   r   r   r1   r   r7   r;   )re   r7   n_splitsFr!  )r   r   r   r   neg_brier_score)r   r   r   r   r   gffffff?g?)'r   r   r   r@   r   r   splitr   rA   ru   r   rC   r>   r   r   r   r   r   r   r    r   r   r#   r  rangeswapaxesreshaper=   rE   alldiffr   r   r   r   r   r?   rC  min)r   rI   rJ   rK   r   r   r   precomputed_foldsrH   r  r  clf_ovrra   rl   	clf_multimulti_score	ovr_scorefoldcr   normsn_foldsn_csr   rM   n_dofrL   r5  r6  brier_scoress                                 rP   test_multinomial_cv_irisrg    s    99dkkqGGI D		BRXXa^,  "	C GGAM 99??q*o---s||Y/**T#"2"2"9"9";<=KD"j1n ====77==E!!!ZZS[[//123F<<AtR=((( .6GHI	R34 
c!i	 
 8 O33(/1t""7
	 WaAaooa+MM!'	Y&&& yy)//"7"77779--y9 **T)*@*@*G*G*I%JKK$$D"j1n(EEEE==&&%///ZZY%6%6%=%=%? @AF<<AtR=000 i44Q7==a@A FOEWEWEWI**1-dAssl;EW   E1a088Y]]9KRPuu}15vvbggen12222 B <=b!Q
UV;V8GT;	5))//4    illE2222i1159999$$**wT.JJJJ i44::1=>
 "..tQ1crc/ABuu}8<vvbggen12222 ?s 8J 
	BiilGw<1xx~t299QuX&'1,,,299QtW%&!+++1U8}s1T7|+su444 &
 # 
c!i	  66#++$%%%% !;;r1b!#	
 
c!i  66T>>KK<L 66,())))66,')))As   #[enable_metadata_routingrM   r9   rf   c           
      R   [        U S9   [        R                  " / SQ5      SSU-   n[        R                  " SU-  5      SS2S4   n[	        US9nUR                  X25       H  u  pV[        [        R                  " X%   5      5      US-
  :X  d   e[        [        R                  " X&   5      5      S:X  d   e[        X%   5      [        X&   5      -  [        5       :X  a  M   e   [        US[        R                  " SS	S
5      SSS9R                  X25      nUR                  S:X  d   e[        UR                  X25      5       H  u  nu  pV[        UR                  S9R                  X25      n	UR                  USSSS2SS24   U	l        UR                  USSSS2S4   U	l        US::  a"  [%        X&   U	R'                  X6   5      SSS/S9n
O [%        X&   U	R'                  X6   5      / SQS9n
[)        UR*                  USS4   * U
5        M     SSS5        g! , (       d  f       g= f)zdTest that LogisticRegressionCV correctly computes scores even when classes are
missing on CV folds.
rh  )ark  brl  ra  ra  Nr9   rP  r8   rR  rS  r*  r   r  F)r   r   r   r   r   r   rV   r   r7   rl  rk  )	pos_labellabels)rk  rl  ra  )rn  )r	   r>   rr   r2  r   rT  r=   r?   rC  r   r   rA   r   r   r   r   ru   rt   r   rD   r   r   )rh  rM   rJ   rI   r   r5  r6  rH   r   clf2bss              rP   +test_logistic_cv_folds_with_classes_missingrq    s    
0G	HHH34_q9}EIIa)m$QW- I&88A>KEryy*+y1}<<<ryy)*a///qx=3qw</35888 *
 #%{{2q!$"'
 #a) 	 vv~~ )"((1. 9A} &/33A9D))!Q1crc/:DJ!..q!Q2~>DOA~%G&&qw/!:	 &GT//8 S[[Aq1126% !:+ 
I	H	Hs   CH"D-H
H&c                 4   [        SSSU S9u  p[        SSU S9n[         Vs0 s H   nU[        SSU0UD6R	                  X5      _M"     nn[
        R                  " US	S
9 H0  u  pg[        XV   R                  XW   R                  SSSU SU 3S9  M2     gs  snf )z)Test solvers converge to the same result.   r^   r   )rK   r   r+  r   r  F)rW   rY   r   ra   r9   rr   -C6?zCompare  vs )rq   ro   r   Nr   )	r   dictSOLVERSr   rA   	itertoolscombinationsr   ru   )r   rI   rJ   r7  ra   classifierssolver_1solver_2s           rP    test_logistic_regression_solversr  N  s    "ADVDA Cu;MNF F 	";&;F;??EE  
 (44[AF!''!''xjXJ7	
 Gs   'BrY   c                 "   Su  pn[        UUSUSS9u  pESn[        XSS9nSS	S	S
.n[        [        5      [        S/5      -
   V	s0 s H0  n	U	[	        SXR                  U	S5      S.UD6R                  XE5      _M2     n
n	U
R                  5        H+  u  pUR                  R                  X24:X  a  M"   SU	 S35       e   [        R                  " U
SS9 H|  u  p[        X   R                  X   R                  US:X  d  US:X  a  SOSU SU 3S9  U (       d  ME  [        X   R                  X   R                  US:X  d  US:X  a  SOSU SU 3S9  M~     [        [        5      [        S/5      -
   V	s0 s H5  n	U	[        SS/U	UR                  U	S5      SSS.UD6R                  XE5      _M7     nn	U HR  n	[        X   R                  X   R                  SS9  U (       d  M/  [        X   R                  X   R                  SS9  MT     gs  sn	f s  sn	f )zATest solvers converge to the same result for multiclass problems.)r   r   rf   r^   r   rK   r   r+  rM   r   ri   r)  )rY   rk   r   rs  i N  r1   r5   r6   r2   rU   ra   rl   zSolver z" generates coef_ with wrong shape.r9   rt  r6   {Gzt?r   rw  ro   r   rh   Fr   )r   ra   rl   r   r   rO  rn   Nr   )r   rx  rC  ry  r   getrA   itemsru   r@   rz  r{  r   rt   r   )rY   rK   r   rM   rI   rJ   rk   r7  solver_max_iterra   r|  rH   r}  r~  classifiers_cvs                  rP   +test_logistic_regression_solvers_multiclassr  h  sz    (1$I9DA CRHF !$FFCO 'lS+%77	 8F 	" 
$7$7$D
HN

#a)	 8	   #((*yy9"99 	
fX?@	
9 +
 (44[AF!''!''"f,F0BjXJ/		
 =%00%00&&0H4FTT#*D
3	 G6 'lS+%77
 8F 	$ 
u$((5"'"
 
 #a)	 8  
 !"((+*=*C*C$	
 =&11#.. !Q:
s   7H0<Hc                    Su  p#n[         R                  R                  U5      n[        UX0-   X0-   SUS9nU (       a	  SUSS2S4'   [	        U5      u  pxn	[         R
                  " US:  5      (       d   e[         R                  " U5      [         R                  " U5      -  S:  d   eU (       a  USS2SS24   nUR                  SS	X4-  S
9n
U
R                  XC5      n
UR                  SSUS
9U -  nXjR                  -  U-   n[        US9nUR                  R                  U5      n[         R                  " U5      n[        U5       H4  n[         R                   " UR#                  SUUSS24   S95      S   UU'   M6     Sn[%        XS9nSSSS.nSSS.n['        [(        5      ['        S/5      -
   Vs0 s HQ  nU[+        S"[         R,                  UUR/                  UU5      UR/                  US5      S.UD6R1                  Xo5      _MS     nnUR3                  5        H)  n[5        UU   R6                  R9                  SS9SSUS9  M+     [:        R<                  " USS9 H  u  nn[5        UU   R6                  UU   R6                  US:X  d  US:X  a  SOSU S U 3S!9  U (       d  MH  [5        UU   R>                  UU   R>                  US:X  d  US:X  a  SOSU S U 3S!9  M     gs  snf )#zGTest and compare solver results for unpenalized multinomial multiclass.)rU   rg   rf   r  )rK   r   effective_ranktail_strengthr   r8   Nr7   r   rU   rf   )lowhighsize)rM   )npvals)r   r   g&.>)rY   r   rs  '  r  ri   r   r2   )rW   ra   rk   rl   r   r;   绽|=)rq   r   r9   rt  r6   r  gMb`?rw  r  r   ) r>   r   r   r   r   rX  maxrZ  uniformrW  rs   r
   linkinversezerosrU  argwheremultinomialrx  rC  ry  r   r   r  rA   keysr   ru   rE   rz  r{  rt   )rY   r   rK   r   rM   r   rI   UsVtcoef	interceptraw_predictionlossprobarJ   r   rk   r7  r  
solver_tolra   
regressorsr}  r~  s                            rP   7test_logistic_regression_solvers_multiclass_unpenalizedr    s    (1$I9
))

 2
3C-!1	A !R%1vHA"66!d(66!9rvvay 3&&&a"fI;;11:+A;BD<<	.D;mKIZ)+N3DIIn-E
A9{{3??QeAqDk?BCDI!  COF #FFCOt,J 'lS+%77	 8F 	" 
ffvs+$((5	

 
 #a)	 8  	 //#v$$((a(0!%	
 $ (44Z1E(x &&x &&"f,F0BjXJ/		
 =8$//8$//&&0H4FTT#*D
3	 F!	s   3AK%c                    [        SSU S9u  p4SX3S:  '   [        / SQSSSS	9n[        SUS
SS.UD6nUR                  X45        [        SUS
SS.UD6nUR                  U" U5      U5        US;   a  SOSn[	        UR
                  UR
                  US9  [	        UR                  UR                  US9  UR                  UR                  :X  d   eg)z?Test that sparse and dense X gives same result for each solver.rU   r   rK   r   r   r   )r  r8         $@r  gHz>r)  )r   rl   rk   r   Fr   )ra   r   r   r   gQ?rm   rn   Nr   )r   rx  r   rA   r   ru   rt   r   )	r   ra   rS   rI   rJ   r7  rH   clfsro   s	            rP   test_logistic_cv_sparser    s     !2DDA A#gJ^f$RPF
 # 	C GGAM # 	D 	HH]1q!_,4$DDJJ		5DOOS^^$?77cffrR   weightr  皙?r   r   rI  r@  balancedc           
         [        U 5      nUS:X  a  U n[        SSSSSUUS9u  pE[        SSUSSS	9n[        SS
SS.UD6n[	        [
        S9   UR                  XE5        SSS5        [        [        5      [        / SQ5      -
   H_  n[        SUSS.UD6n	US;   a  U	R                  SSUS-   S9  U	R                  XE5        [        U	R                  UR                  SU S3S9  Ma     g! , (       d  f       N= f)z+Test class_weight for LogisticRegressionCV.r  rN  rf   r   )rK   r   
n_repeatedr+  n_redundantrM   r   r8   Fri   )r   rY   r@  rk   r   r1   r   )ra   r   categoryN)r1   r2   r4   r   gC]r2<r  )rk   rl   r   r   z	 vs lbfgsr  r   )r=   r   rx  r   r-   r   rA   rC  ry  
set_paramsr   ru   )
r  r@  r   rM   rI   rJ   r7  	clf_lbfgsra   rH   s
             rP   (test_logistic_regressioncv_class_weightsr    s,    FIx'DA !#F %  I 
"4	5a 
6 g,%N!OO" 
"
 

 _$NNE8JQ8N   	IIyTfXY;O	
 P 
6	5s   C((
C6problem)singler   c           	         SnSn[        X4-  SSSSUS9u  pV[        R                  R                  U5      n[        R                  " UR
                  S   5      nUSUR                  S5      (       a  S	OS
SS.n	U	R                  5       n
UR                  SSUS9US U& [        R                  " XXR                  [        5      SS9n[        R                  " XhR                  [        5      SS9nU S:X  a  [        nOU S:X  a  [        n[        R                  " [        R                  " US5      [        R                  " US5      [        R                  " US5      /5      n[!        [#        5       R%                  X^S95      nU	R'                  SUS.5        [        R                  " XR                  [        5      SS9n[!        [#        5       R%                  UUS95      nU
R'                  SUS.5        W" SSU0U	D6nU" SSU0U
D6nUS:X  a[  [(        R*                  " 5          [(        R,                  " S[.        5        UR1                  XVUS9  UR1                  X5        S S S 5        O!UR1                  XVUS9  UR1                  X5        U S:X  a&  [3        UR4                  S   UR4                  S   5        [3        UR6                  UR6                  SS9  g ! , (       d  f       NZ= f)Nrs  rf   r   r9   r   )rK   r   r+  rM   r  r   Fr5   順 r   ri   r   rY   rl   rk   r  r;   r  r   r8   )groupsr^   )r   r   ra   r1   ignorer  rm   rq   r   )r   r>   r   r   rF   r@   
startswithcopyrandintrepeatastypeintr   r   r   fullr   r   rT  updatewarningscatch_warningssimplefilterr   rA   r   r   ru   )r  ra   r   n_samples_per_cv_groupn_cv_groupsrI   rJ   r   swkw_weightedkw_repeated
X_repeated
y_repeatedrx   groups_weightedsplits_weightedgroups_repeatedsplits_repeatedclf_sw_weightedclf_sw_repeateds                       rP   'test_logistic_regression_sample_weightsr  M  s    !K(6'DA ))

 2
3C		B +%0077GU	K ""$K"%++a9O+"PB1iin15J1iin15J(	D!...2.2.2
 /1777RS"O<=))OYYs^!L$$Z$H
 	"O<=66+6O66+6O $$&!!(,>?B7
7 '& 	A3J3$//2O4K4KA4NOO))?+@+@tL '&s   =K
Kc                     [        SSSSUS9u  p#US-   nUSSS	S
.n[        SU SSS.S.UD6nUR                  X#5        [        SSU 0UD6nUR                  X#US9  [        UR                  UR                  SS9  g )Nrj   r   rf   r9   r  r8   Fr  ri   r  r   )ra   r@  ra   r  r   r  r   r   r   rA   r   ru   )ra   r   rI   rJ   r  r  	clf_cw_12	clf_sw_12s           rP   -test_logistic_regression_solver_class_weightsr    s     'DA EM +	K # aL4?I MM!"@&@K@IMM!mM4IOOY__4@rR   c                    [        SSSSU S9u  pUS-   n[        SSSSS	.SS
SU S9nUR                  X5        [        SSSS
SU S9nUR                  XU5        [        UR                  UR                  SS9  [        SSSSS	.SS
SSU S9nUR                  X5        [        SSSS
SSU S9nUR                  XU5        [        UR                  UR                  SS9  g )Nrj   r   rf   r9   r  r8   r2   Fr   r  -q=)ra   rY   r@  r~   rl   rk   r   )ra   rY   r~   rl   rk   r   r  r  r   T)ra   rY   r@  r~   rl   rk   r   r   )ra   rY   r~   rl   rk   r   r   r  )r   rI   rJ   r  clf_cwclf_sws         rP   2test_sample_and_class_weight_equivalence_liblinearr    s    'DA EMq\'F JJq'F JJq]#FLL&,,U;q\'	F JJq'F JJq]#FLL&,,U;rR   c                 n    [         R                  " U 5      n[        SXS9n[        [	        X5      5      nU$ )Nr  )rL   rJ   )r>   r?   r%   rx  zip)rJ   rL   r@  class_weight_dicts       rP    _compute_class_weight_dictionaryr    s1    iilG'
GILS78rR   c                     U $ r   r   )xs    rP   <lambda>r    s    QrR   c                    [        [        R                  5      nUSS 2S S 24   nU" U5      n[        R                  SS  n[	        U5      n[        [        5      [        SS/5      -
   GH  n[        USU S9n[        SSS0UD6n[        SSU0UD6n	UR                  X45        U	R                  X45        [        UR                  5      S:X  d   e[        UR                  U	R                  S	S
9  [        R                  " UR                   S   5      n
UR                   H  nXU:H  ==   X[   -  ss'   M     [        S0 UD6R                  X4U
S9n[        UR                  U	R                  S	S
9  GM     USS2S S 24   n[        R                  SS n[	        U5      n[         Hi  n[        USU S9n[        SSS0UD6n[        SSU0UD6n	UR                  X45        U	R                  X45        [#        UR                  U	R                  SS9  Mk     g )N-   r2   r4     )ra   rl   r   r@  r  rf   rv  rn   r   r  rU   r   r*  r   r   )r#   r   r   r   r  rC  ry  rx  r   rA   r=   rC   r   ru   r>   rF   r@   r   )r   rS   X_irisrI   rJ   r  ra   r7  clf1ro  r  ra  clf3s                rP   &test_logistic_regression_class_weightsr    s    499FrsAvAaABCA8;g,k3D%E!FFVdAST!DzDVD!K/@KFK4==!Q&&&

DJJT:WWQWWQZ AAvJ+..J !+F+//B/G

DJJT: G  	r#vqyABsA8;VdAST!DzDVD!K/@KFK!$**djj!D rR   c                     [        SSU S9u  p[        SSU S9nUR                  X5        [        R                  " S5      n[        UR                  U5      [        R                  " S5      5        g )Nr   r  Fr2   )rY   ra   r   )r   r   )r   r   rA   r>   r  r   rB   )r   rI   rJ   rH   s       rP   %test_liblinear_decision_function_zeror    sc     0BDA K>PC GGAM 	As{{1~rxx{3rR   c                  n    [        SS9n U R                  [        [        5        U R                  S:X  d   eg )NFrX   r   )r   rA   rI   rZ   rt   r   s    rP   "test_logreg_intercept_scaling_zeror  2  s-     5
1CGGArN>>S   rR   c           	         [         R                  R                  U 5      nSn[        USU S9u  pEUR	                  US4S9n[         R
                  " US4S9n[         R                  " XFU4SS	9n[        SS
SSSU S9n[        SSS0UD6n	U	R                  XE5        [        SSS0UD6n
U
R                  XE5        [        U
R                  U	R                  SS9  U" U5      n[        SSS0UD6nUR                  X5        [        UR                  U	R                  5        [        SSS0UD6nUR                  X5        [        UR                  U
R                  5        g )NrU   r   r  rf   r  r9   r@   r8   r;   rh   Fr  r  )r~   rW   rY   rl   rk   r   ra   r2   r6   g333333?r  r   )r>   r   r   r   normalrF   r   rx  r   rA   r   ru   )r   rS   r   rK   rI   rJ   X_noise
X_constantr7  lr_liblinearlr_sagaX_splr_liblinear_sp
lr_saga_sps                 rP   test_logreg_l1r  <  sU    ))

 2
3CI9KDA jjy!nj-G	1~.J
J/a8A
'F &C[CFCLQ 99&9GKKGMM<#5#5C@ D(FFvFO O))<+=+=>#<6<V<JNN4J$$gmm4rR   c           	          [        SSU S9u  p#[        SU SSS9n[        SS/U4S	S
SS.UD6nUR                  X#5        [	        SSUS.UD6nUR                  X#5        [        UR                  UR                  5        g )NrU   r   r  r6   r  r  )ra   r   rl   rk   rh   Tr   F)r   r   r  r   r   rW   r~   r   )r   rx  r   rA   r   r   ru   )r   r~   rI   rJ   common_paramsr   r   s          rP   !test_logistic_regression_cv_refitr  e  s     "3EDA '	M ! 5+# E 
IIaO		FcH	F	FBFF1LEKK*rR   c                    [        SSU SSS9u  p[        5       nUR                  X5        [        X#R	                  U5      5      n[        [        5       5      nUR                  X5        [        X%R	                  U5      5      nXd:  d   e[        X#R	                  U5      5      n[        X#R                  U5      5      nXt:  d   eg )Nr^   r   rf   )rK   r   r   rM   r+  )r   r   rA   r   rD   r    _predict_proba_lr)r   rI   rJ   r]  clf_multi_lossr\  clf_ovr_lossclf_wrong_losss           rP   %test_logreg_predict_proba_multinomialr    s    'DA #$IMM!a!8!8!;<N!"4"67GKKA44Q78L((( a!8!8!;<Na!<!<Q!?@N***rR   rl   r   zsolver, message))r3   zAnewton-cg failed to converge.* Increase the number of iterations.)r2   z@Liblinear failed to converge, increase the number of iterations.)r5   ?The max_iter was reached which means the coef_ did not converge)r6   r  )r1   lbfgs failed to converge)r4   z6Newton solver did not converge after [0-9]* iterationsc                 z   [         R                  [         R                  R                  5       pTSXUS:H  '   US:X  a  US:  a  [        R
                  " S5        [        USU US9n[        R                  " [        US9   UR                  XE5        S S S 5        UR                  S   U:X  d   eg ! , (       d  f       N$= f)	Nr   r9   r4   r8   z/solver newton-cholesky might converge very fastgV瞯<)rl   rk   r   ra   r|   )r   r   r   r  r   skipr   r   r   rA   n_iter_)r   rl   ra   r   rI   y_binr   s          rP   test_max_iterr    s    ( yy$++**,uE1*""x!|EF	'	
B 
(	8
q 
9 ::a=H$$$ 
9	8s   <B,,
B:c                 F   [         R                  [         R                  p2U S:X  a  [        U5      n[        R
                  " U5      R                  S   nUS:X  d   eUR                  5       nSXUS:H  '   SnSnSn[        SSU S	S
9n	U	R                  X%5        U	R                  R                  S:X  d   e[        SU USUS	USS9n
U
R                  X%5        U(       a   U
R                  R                  SXvU4:X  d   eOU
R                  R                  XxU4:X  d   eU S;   a  g U	R                  X#5        U	R                  R                  S:X  d   eU
R                  X#5        U(       a   U
R                  R                  SXvU4:X  d   eg U
R                  R                  XxU4:X  d   eg )Nr1   r   rf   r9   rg   r8   rO  rh   r)  )rk   rW   ra   r   r   r   r   )rk   ra   r   r   r   r   r   r   rz   )r   r   r   r#   r>   r?   r@   r  r   rA   r  r   )ra   r   rI   rJ   rM   r  r   	n_cv_foldr   rH   clf_cvs              rP   test_n_iterr    s    99dkkq!H		!""1%I>> FFHEE1*DIK V"
MCGGA;;$$$!3	F JJq~~##9K'HHHH~~##	'EEEE  GGAM;;$$$
JJq~~##9K'HHHH~~##	'EEEErR   r2   r/  )TFc                    [         R                  [         R                  pT[        SUUU US9n[	        [
        S9   UR                  XE5        UR                  nSUl        UR                  XE5        S S S 5        [        R                  " [        R                  " WUR                  -
  5      5      nSU SU< SU< 3n	U(       a  SU:  d   U	5       eg US:  d   U	5       eg ! , (       d  f       Nu= f)	Nrv  )rk   r/  ra   r   rY   r  r8   z Warm starting issue with solver zwith fit_intercept=z and warm_start=       @)r   r   r   r   r-   r   rA   ru   rl   r>   rE   abs)
r   ra   r/  rY   rI   rJ   rH   coef_1cum_diffr   s
             rP   test_warm_startr     s     99dkkq
'#C 
"4	5 
6 vvbffVcii/01H
*6(
0ZM	3  X~"s"~#~"s"~ 
6	5s   6C
C-r3   rW   c                    [         R                  [         R                  pC[        U SUUS9n[	        [
        S9   UR                  X45        SSS5        [        U SSUUS9n[	        [
        S9   UR                  X45        UR                  X45        SSS5        [        UR                  UR                  5        U(       a!  [        UR                  UR                  5        gg! , (       d  f       N= f! , (       d  f       Nh= f)zITest that 2 steps at once are the same as 2 single steps with warm start.r9   )ra   rl   rY   rW   r  Nr8   T)ra   rl   r/  rY   rW   )
r   r   r   r   r-   r   rA   r   ru   rt   )ra   rY   rW   rI   rJ   r  ro  s          rP   test_warm_start_newton_solverr  !  s    
 99dkkq#
	D 
"4	5 
6 #
D 
"4	5 
6 DJJ

+9  
6	5 
6	5s   C!-#C2!
C/2
D c                 P   [        5       nUR                  UR                  pT[        R                  " U/S-  5      n[        R                  " U/S-  5      nXES:*     nXUS:*     S-  S-
  n[        SSU S9u  pU" U5      nXg4X44 H  u  pEUR                  S   n
[        R                  " SSS5       Hn  n[        S	X-  -  US
SSU SS9n[        S	X-  -  USSSU SS9nUR                  XE5        UR                  XE5        [        UR                  UR                  S5        Mp     M     g )Nrf   r8   r9   r   r   r  r   r7   rh   r6   rM  Fr   )rW   r~   ra   rl   rY   r   rk   r2   )r   r   r   r>   r   r   r@   r   r   rA   r   ru   )r   rS   r~   r   rI   rJ   X_binr  X_sparsey_sparserK   alphar6   r2   s                 rP   test_saga_vs_liblinearr%  A  s9    ;D99dkkq
sQwA
sQwA1fIE1fIMAE,2DH X&H(!56GGAJ	[[Q*E%*+!#/D +*+!"#/I HHQNMM!%djj)//1E1 + 7rR   c                    U S:X  a  [         R                  O[         R                  n[         R                  " [        5      R                  [         R                  5      n[         R                  " [        5      R                  [         R                  5      n[         R                  " [        5      R                  [         R                  5      n[         R                  " [        5      R                  [         R                  5      nU" [        [         R                  S9nU" [        [         R                  S9n	Sn
[        U SU
US9n[        U5      nUR                  XE5        UR                  R                  U:X  d   e[        U5      nUR                  X5        UR                  R                  U:X  d   e[        U5      nUR                  Xg5        UR                  R                  [         R                  :X  d   e[        U5      nUR                  X5        UR                  R                  [         R                  :X  d   eSU
-  n[        R                  S:X  a  [        (       a  Sn[        UR                  UR                  R                  [         R                  5      US	9  U S
;   a	  U(       a  Sn[        UR                  UR                  US	9  [        UR                  UR                  US	9  g )Nr2   r   gMb@?r)  )ra   r   rk   rY   gQ@ntrO  r  r   r  )r>   r   float32rr   rI   r  rZ   r   r   rA   ru   r   osnamer.   r   )ra   rY   rS   
out32_typeX_32y_32X_64y_64X_sparse_32X_sparse_64r  lr_templlr_32lr_32_sparselr_64lr_64_sparserq   s                    rP   test_dtype_matchr7  o  s     &4"**J88A;bjj)D88B<rzz*D88A;bjj)D88B<rzz*D4K4KJ!#	H (OE	IId;;
*** ?L['##z111 (OE	IId;;

*** ?L['##rzz111 j D	ww$99 EKK!3!3BJJ!?dK ] EKK!3!3$?EKK!3!3$?rR   c                    [         R                  R                  U 5      n[         R                  " UR	                  SS5      SS/-   UR	                  SS5      45      n[         R
                  " S/S-  S/S-  -   5      n[        SSSU S9n[        SS	SU S9n[        X4R                  X#5      R                  U5      5      n[        S
5       H  nUR                  X#5        M     [        X5R                  U5      5      n[        XhSS9  g )NrU   r9   r8   r7   r5   Fr   )ra   r/  rk   r   Tr   rm   rn   )r>   r   r   r   r   rr   r   r   rA   rD   rU  r   )	r   r   rI   rJ   lr_no_wslr_wslr_no_ws_lossr   
lr_ws_losss	            rP   test_warm_start_converge_LRr=    s     ))

 2
3C
		#q)QF2CIIc14EFGA
!sbTCZ'(A!D?QH 4>PE QQ 2 @ @ CDM1X		! !0034JMD9rR   c           
      p   [        U S9u  pSn[        5       nS H=  n[        UUSU SSS9nUR                  X5        UR	                  UR
                  5        M?     Uu  pxn	[        R                  " XxSSS	9(       a   e[        R                  " XySSS	9(       a   e[        R                  " XSSS	9(       a   eg )
Nr   r  )r   r8   r   r6   r   rM  )rW   r~   ra   r   rk   rl   r   rp   )r   r   r   rA   appendru   r>   allclose)
r   rI   rJ   rW   coeffsr~   r   elastic_net_coeffs	l1_coeffs	l2_coeffss
             rP   test_elastic_net_coeffsrE    s     ,>?DAAVF+
 	qbhh   06,9 {{-qtLLL{{-qtLLL{{9adCCCCrR   z1ignore:.*'penalty' was deprecated.*:FutureWarning)r   r  r8   r^   rU   r       .Azpenalty, l1_ratio)l1r8   )r-  r   c           	          [        U S9u  pE[        SUUSU SS9n[        X!SU SS9nUR                  XE5        UR                  XE5        [        UR                  UR                  5        g )Nr   r   r6   rO  )r   rW   r~   ra   r   rk   )r   rW   ra   r   rk   )r   r   rA   r   ru   )r   rW   r   r~   rI   rJ   lr_enetlr_expecteds           rP   "test_elastic_net_l1_l2_equivalencerK    sr     ,>?DA 
'G %V:LRVK KKOOAgmm[->->?rR   )r   r8   rU   rF  c                    [        SSS9u  p[        XSS9u  p4pVS[        R                  " SSS5      0n[	        SU SSS	S
9n[        XSS9n	[	        SU SSS	S
9n
[	        SU SSS	S
9nXU4 H  nUR                  X55        M     U	R                  XF5      U
R                  XF5      :  d   eU	R                  XF5      UR                  XF5      :  d   eg )NrM  r   r   r~   r8   r   r   r6   rO  )r~   rW   ra   r   rk   T)r  )r   r   r>   linspacer   r   rA   r  )rW   rI   rJ   X_trainX_testy_trainy_test
param_gridenet_clfgsl1_clfl2_clfrH   s                rP   test_elastic_net_vs_l1_l2rW    s    
 s3DA'71'M$GWbkk!Q23J!
H 
h$	7BaQDF  aQDF F#! $ 88F#v||F'CCCC88F#v||F'CCCCrR   rd   rg   )r  r   ?c           
         ^ ^^^ [        SSSSSSSS9u  mm[        T5      m[        TT SSSS	9n[        SSST SS
9nUR                  TT5        UR                  TT5        U UUU4S jnU" U5      U" U5      :  d   eg )Nr   r9   r   r^   r   rK   rM   r   r+  r  r  r   r6   F)r~   rW   ra   r   rY   )r~   ra   r   rW   rY   c                   > U R                   R                  5       nT[        TU R                  T5      5      -  nUT[        R
                  " [        R                  " U5      5      -  -  nUST-
  S-  [        R                  " X5      -  -  nU$ )Nrh   r   )ru   r   r   rD   r>   rE   r  r   )r   r  objrW   rI   r~   rJ   s      rP   enet_objectiveEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objectiveC  su    xx~~(1b..q122x"&&...h#%t(:::
rR   )r   r#   r   rA   )rW   r~   rI  lr_l2r]  rI   rJ   s   ``   @@rP   -test_LogisticRegression_elastic_net_objectiver`  #  s     DAq 	aA 
G 6QeE KK1	IIaO  '"^E%::::rR   )r9   rf   c                    [        SU SSS9u  p[        S5      n[        R                  " SSS5      n[        R                  " SSS5      n[        UUS	USS
SSS9nUR                  X5        XTS.n[        S	SS
S9n[        XUSS9n	U	R                  X5        U	R                  S   UR                  :X  d   eU	R                  S   UR                  :X  d   eg )NrU   rf   r   )rK   rM   r+  r   r   r8   rc   rg   r6   rO  r   F)r   r   ra   r   r   rk   r   r   r  )ra   r   rk   r   r   r~   rW   )r   r   r>   rM  r   r   rA   r   r   best_params_r   r   )
rM   rI   rJ   r   r   r   lrcvrR  r   rT  s
             rP   2test_LogisticRegressionCV_GridSearchCV_elastic_netre  N  s    
 	DA 
	BAq!$I	RA	B#	D 	HHQN1J	
B
 
b^	DBFF1L??:&$..888??3477***rR   r  c                    Sn[        SUUUSS9u  p4[        R                  " SSS5      n[        UU SSS	S
SSS9nUR	                  X45        US:X  a  SOUnUR
                  R                  U4:X  d   eUR                  R                  U4:X  d   eUR                  R                  X4:X  d   e[        UR
                  UR
                  S   5        [        U 5      S:  a$  [        UR                  UR                  S   5        g g )Nr   rs  r   rK   rM   r+  r   r   rc   rg   rf   r6   rO  Fr   T)r   r   ra   r   rk   r  r   r   r9   r8   )r   r>   r   r   rA   r   r@   r   ru   r   r=   )r   rM   r   rI   rJ   r   rd  s          rP   "test_LogisticRegressionCV_no_refitrh  x  s    
 JDA 
RA	B"	D 	HHQN!^I77==YL(((>>I<///::	6666DGGTWWQZ(
9~q(9: rR   c                 \   Sn[        SU U USS9u  p#[        R                  " SSS5      n[        R                  " SSS	5      nS	n[	        UUS
USSSSS9nUR                  X#5        [        R                  " [        UR                  R                  5       5      5      nU S	:X  a  SOU n UR                  U UUR                  UR                  US-   4:X  d   e[        R                  " [        UR                  R                  5       5      5      n	U	R                  XUR                  UR                  4:X  d   eUR                  R                  SXdR                  UR                  4:X  d   e[        UR                  UR                  S   5        [        UR                   UR                   S   5        g )Nr   rs  r   rg  rc   rg   rf   r8   r9   r6   rO  r   T)r   r   ra   r   r   rk   r   r   )r   r>   r   rM  r   rA   r   r   r   r   r@   r  r   r  r   r   r   )
rM   r   rI   rJ   r   r   rc  rd  r  r  s
             rP   5test_LogisticRegressionCV_elasticnet_attribute_shapesrj    s~   
 JDA 
RA	BAq!$IG"	D 	HHQN**T$"3"3":":"<=>K!^I
Q!    ZZT\\00234F<<IHHHH<<!Wggy~~!FFFF DGGTWWQZ(DNNDNN1$56rR   c            	      6   [         R                  [         R                  p[        SSSSS9R	                  X5      n[        S5      n[        UR                  X5      5      nSS/SS/S	S
/4 H  u  pVXE   S   n[        UR                  U   SSS9R	                  X   X   5      n[        R                  " U5       HY  n	[        UR                  U	   XVSS24   UR                  U	   SS9  [        UR                  U	   XVS4   UR                  U	   SS9  M[     M     g)zETest that LogisticRegressionCV produces the correct result on a fold.r4   ri   Tr   )ra   rk   r   r   r   r   r8   rf   r*  )rW   ra   rk   Nr7   rm   rn   )r   r   r   r   rA   r   r   rT  r   r   r>   r?   r   r   ru   rt   )
rI   rJ   rd  r   foldsidx_foldidx_Ctrain_fold_0r   cls
             rP   "test_LogisticRegressionCV_on_foldsrq    s'   99dkkq "	
 
c!i 	 
	B! E FQFQF3q)hhuo$
 #aoq
/	 	 ))A,B!!"%hss&:; !!"%hr&9:b!  4rR   c                      Sn [         R                  " [        U S9   [        SSSS9R	                  [
        [        5        S S S 5        g ! , (       d  f       g = f)NzQl1_ratio parameter is only used when penalty is 'elasticnet'\. Got \(penalty=l1\)r|   rG  r6   r   )r   ra   r~   )r   r   UserWarningr   rA   rI   rZ   )r   s    rP   test_l1_ratio_non_elasticnetrt    sA    	.  
k	-4EII!RP 
.	-	-s   $A		
Ac                    Sn[        USSSSSU S9u  pE[        U5      n[        SUU SS SS	U-  U-  S
S9n[        UU SSSUSS9nUR	                  XE5        UR	                  XE5        [        UR                  UR                  SS9  g )NrM  r9   r   r   rZ  r   Fr  rh   r   )r   r~   r   rY   rk   rl   r$  r  rm   r   r6   )r~   r   rY   rk   rl   rW   ra   gffffff?r  )r   r#   r   r   rA   r   ru   )r   rW   r~   rK   rI   rJ   sgdlogs           rP   test_elastic_net_versus_sgdrx     s     I'DA 	aA
'Ag	!	C '
C GGAMGGAMCIIsyyt4rR   c            
         [        SSSSSSSS9u  p/ SQn[        U U[        R                  " U5      SUS	SS
9u  n  n[        R
                  " [        5         [        US   US   SS9  S S S 5        [        R
                  " [        5         [        US   US   SS9  S S S 5        [        R
                  " [        5         [        US   US   SS9  S S S 5        g ! , (       d  f       Nw= f! , (       d  f       NT= f! , (       d  f       g = f)Nrs  rf   r9   r   r8   rK   rM   r+  r  n_clusters_per_classr   r   )rm   r8   r  rG  r6   )rL   r   r   ra   r   r  )r   r   r>   r?   r   r   r   r   )rI   rJ   r   r   r   s        rP   /test_logistic_regression_path_coefs_multinomialr|  *  s     DA 
B+				!KE1a 
~	&!%(E!Ha@ 
'	~	&!%(E!Ha@ 
'	~	&!%(E!Ha@ 
'	&	 
'	&	&	&	&	&s$   CC+?C<
C(+
C9<
D
c            
      "   [        SSSSSSSS9u  p[        R                  " U5      n[        R                  " S5      n[	        U UUUSS9  S	[
        R                  " [        UR                  5      5       S
3n[        R                  " [        US9   [	        XX#SSS9  S S S 5        [        SSSSSSSS9u  p[        R                  " U5      n[        R                  " S5      n[	        U UUUSS9  [        R                  " S5      n[	        U UUUSS9  S	[
        R                  " [        UR                  5      5       S3n[        R                  " [        US9   [	        XX#SSS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nrs  rf   r9   r   r8   rz  )rf   rf   )rL   r  r   z Initialization coef is of shape z.+expected.+\(3, 2\)r|   F)rL   r  r   rY   )r8   rf   z.+expected.+\(2,\) or \(1, 2\))r   r>   r?   rF   r   reescapestrr@   r   r   r   )rI   rJ   rL   r  r   s        rP   (test_logistic_regression_path_init_coefsr  J  s   DA iilG 776?D		 ,BIIc$**o,F+G	   
z	-!'1E	
 
.
 DA iilG
 771:D		 776?D		 ,BIIc$**o,F+G)	*  
z	-!'1E	
 
.	-S 
.	-R 
.	-s   E/F /
E= 
Fc                    [        SSU S9u  p#Sn[        S USS9n[        R                  " [        US9   UR                  X#5        S S S 5        [        S USU S	9n[        S
[        R                  USU S9nUR                  X#5      R                  U5      nUR                  X#5      R                  U5      n	[        X5        g ! , (       d  f       N= f)Nr   r   rK   r  r   z&Setting penalty=None will ignore the Crg   )r   ra   rW   r|   rj   )r   ra   rl   r   r-  )r   rW   ra   rl   r   )
r   r   r   r   rs  rA   r>   r   rB   r   )
r   ra   rI   rJ   r   r   lr_nonelr_l2_C_inf	pred_nonepred_l2_C_infs
             rP   test_penalty_noner    s     A4FDA 3C	D1	=B	k	-
q 
. !Vc@RG %
&&'K A!))!,IOOA)11!4My0 
.	-s   C
Cc                 ,   [        SSSS9u  p[        [        R                  U S9n[        R
                  " 5          [        R                  " S5        [        R                  " S[        S9  UR                  X5        S	S	S	5        g	! , (       d  f       g	= f)
zTest that C=np.inf (recommended approach) produces no warnings.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/32927
rU   r   r)  r  r   errorr  r  N)
r   r   r>   r   r  r  r  filterwarningsr   rA   )ra   rI   rJ   r   s       rP   test_c_inf_no_warningr    sf     !"MDA	bffV	4B		 	 	"g&3EF
q 
#	"	"s   AB
Br7  r   r   )r~   r   rk   rl   r  c                    [         R                  " SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS//[         R                  " S5      S9n[         R                  " / SQ[         R                  " S5      S9n[         R                  " X"/5      n[         R                  " USU-
  /5      n[         R
                  " [        U5      S-  S	9nS
U[        U5      S & [        XEX`S9u  pEn[        SU S9nUR                  " S0 UD6  [        U5      R                  X#5      n[        U5      R                  XEUS9n	S H0  n
[        X5      " U5      n[        X5      " U5      n[        X5        M2     g )Nr8   rf   r9   rg   r   r   )r8   r8   r8   r8   r9   r9   r9   r9   r8   r8   r8   r8   r9   r9   r9   r9   r  r  r   r   r2   )ra   r   r  )rB   rD   r   r   )r>   rr   r   vstackhstackrF   r=   r&   r   r  r   rA   getattrr   )r   r7  rI   rJ   X2y2r  base_clfclf_no_weightclf_with_weightmethodX_clf_no_weightX_clf_with_weights                rP   /test_logisticregression_liblinear_sample_weightr    s    	FFFFFFFFFFFFFFFF!	
$ hhw'	A* 	8	A 
A6	B	Aq1u:	BGG#a&1*-MM#a&(#
BM "CUVH!&!(O''-MHo))")NOC!-8;#O<Q?; DrR   c                     [        SSS9u  p[        SS9nSS/n/ SQn[        UUUS	SS
SSSS9	nUR                  X5        UR                  S   R                  SS9n[        U5       H_  u  px[        U5       HK  u  p[        UU
S	SS
SS9n[        XXSS9R                  5       nXgU	4   [        R                  " USS9:X  a  MK   e   Ma     g )Nr   r   r   r   rP  r  rX  )r  r8   r^   r6      r   r   T)	r   r   r   ra   r   rl   rk   r   r   r8   r;   )rW   r~   ra   r   rl   rk   rb  )rel)r   r   r   rA   r   r   r   r   r   r   approx)rI   rJ   r   r   r   rd  avg_scores_lrcvr   rW   jr~   r   avg_score_lrs                rP   'test_scores_attribute_layout_elasticnetr    s     A>DA	!	$Bc
I	B"
D 	HHQNll1o***2O"$Y/KA#!B +qdf  #a4(FMM,D,QQQQ 0 rR   )r1   r3   r4   c                    [         R                  [         R                     n[        [	        [         R
                  5      U US9n[        [         R
                  5      nUR                  XB5        [        UR                  R                  SS9SSS9  U(       a3  UR                  R                  SS9[        R                  " SSS9:X  d   egg)	a<  Test that the multinomial classification is identifiable.

A multinomial with c classes can be modeled with
probability_k = exp(X@coef_k) / sum(exp(X@coef_l), l=1..c) for k=1..c.
This is not identifiable, unless one chooses a further constraint.
According to [1], the maximum of the L2 penalized likelihood automatically
satisfies the symmetric constraint:
sum(coef_k, k=1..c) = 0

Further details can be found in [2].

Reference
---------
.. [1] :doi:`Zhu, Ji and Trevor J. Hastie. "Classification of gene microarrays by
       penalized logistic regression". Biostatistics 5 3 (2004): 427-43.
       <10.1093/biostatistics/kxg046>`

.. [2] :arxiv:`Noah Simon and Jerome Friedman and Trevor Hastie. (2013)
       "A Blockwise Descent Algorithm for Group-penalized Multiresponse and
       Multinomial Regression". <1311.6529>`
)rW   ra   rY   r   r;   r  r  gdy=)r  N)r   r   r   r   r=   r   r#   rA   r   ru   rE   rt   r   r  )ra   rY   r   rH   X_scaleds        rP   (test_multinomial_identifiability_on_irisr  +	  s    2 t{{+F

dii.#C TYYHGGH CIIMMqM)159~~!!q!)V]]1%-HHHH rR   rh   r  c                     [        SS9u  p[        U5      n[        R                  " U5      nSUS US-  & UR	                  5       n[        U SS9nUR                  XUS9  [        XT5        g )NT
return_X_yr9   rs  )r@  rl   r  )r   r=   r>   rF   r  r   rA   r   )r@  rI   rJ   r   WexpectedrH   s          rP   test_sample_weight_not_modifiedr  U	  sk    %DAQJ

AA
avvxH
!C GGAG"H rR   c           	         U" [         R                  " SSSS95      nS H'  n[        X#[        X#5      R	                  S5      5        M)     [
        R                  R                  S5      nUR                  SUR                  S   S	9nU S
;   a=  Sn[        R                  " [        US9   [        U S9R                  X%5        S S S 5        g [        U S9R                  X%5        g ! , (       d  f       g = f)Nr   r^   r)  r   )indicesindptrint64r9   r   r  )r2   r5   r6   z0Only sparse matrices with 32-bit integer indicesr|   r{   )r   randsetattrr  r  r>   r   r   r  r@   r   r   r   r   rA   )ra   rS   rI   attrr   rJ   r   s          rP   test_large_sparse_matrixr  f	  s     	fkk"br:;A%)009: &
))


#CAAGGAJ'A--@]]:S1f-11!7 21 	&)--a3 21s   'C""
C0c                     [         R                  " SS/5      R                  SS5      n [         R                  " SS/5      nSn[        R                  " [
        US9   [        SS9R                  X5        S S S 5        g ! , (       d  f       g = f)	Nr   g}Ô%ITr7   r8   zUsing the 'liblinear' solver while X contains a maximum value > 1e30 results in a frozen fit. Please choose another solver or rescale the input X.r|   r2   r{   )r>   rr   rW  r   r   r   r   rA   )rI   rJ   r   s      rP    test_liblinear_with_large_valuesr  {	  sn    
 	!U$$R+A
!QA	) 
 
z	-+.2218 
.	-	-s   A>>
Bc                      [         R                  " / SQ/5      R                  n [         R                  " / SQ5      nU R                  S   S:X  d   e[	        SSS9R                  X5        g )N)r   g?g?g      ?r  gHzG?gffffff?ffffff?)r8   r8   r   r   r8   r8   r   r8   r8   r3   Tra   rY   )r>   rr   rs   r@   r   rA   )rI   rJ   s     rP   test_single_feature_newton_cgr  	  sT     	>?@BBA
)*A771:??k>BB1HrR   c           
         [         R                  R                  5       n[         R                  R                  5       nXS:g     nX"S:g     n[	        5       R                  U5      n[        XSS9S-  n[        SUSSSS	U S
9n[        R                  " 5          [        R                  " S[        5        UR                  X25        S S S 5        g ! , (       d  f       g = f)Nr9   rw  )r  gnt@r8   r2   r   rU   r   )r~   rW   ra   rk   rl   r   r   r  )r   r   r  r   r"   fit_transformr$   r   r  r  r  r   rA   )r   rI   rJ   X_preprW   rH   s         rP   test_liblinear_not_stuckr  	  s    		AA	q&	A	q&	A++A.FE"_4A

!'C 
	 	 	"g'9: 
#	"	"s   -C
Crj  c                 \   [         R                  R                  U 5      n[        SUS9u  p#[        SUS9u  pE[         R                  " [        U5      5      nSUS[        U5      S-  & SU0n[        S5      R                  SS9n[        US	S
S9n	U	R                  " X#40 UD6  [        S5      R                  S
S9n
[        U
S	S
S9nUR                  " X#40 UD6  [         R                  " U	R                  S   UR                  S   5      (       a   eSn[        R                  " [        [        R                   " U5      S9   U	R"                  " XE40 UD6  SSS5        U	R#                  XE5      nUR"                  " XE40 UD6n[         R                  " X5      (       a   eg! , (       d  f       NP= f)zTest that `sample_weight` is correctly passed to the scorer in
`LogisticRegressionCV.fit` and `LogisticRegressionCV.score` by
checking the difference in scores with the case when `sample_weight`
is not requested.
r  r   r9   Nr  r!  Fr  gTqs*>T)r   rk   r   r8   zlLogisticRegressionCV.score got unexpected argument(s) {'sample_weight'}, which are not routed to any object.r|   )r>   r   r   r   rF   r=   r   set_score_requestr   rA   r@  r   r   r   	TypeErrorr~  r  r  )r   r   rI   rJ   X_ty_tr  kwargsscorer1lr_cv1scorer2lr_cv2r   score_1score_2s                  rP   8test_lr_cv_scores_differ_when_sample_weight_is_requestedr  	  sx    ))

 2
3CC@DA"TDHCGGCFOM#$M-CFaK }-F$66U6KG!'tSWXF
JJqv$66T6JG!'tSWXF
JJqv{{6>>!,fnnQ.?@@@@	/  
y		'(:	;S(( 
<ll3$Gll3.v.G{{7,,,,, 
<	;s   ?F
F+c                     [         R                  R                  S5      n [        SU S9u  p[        SU S9u  p4[         R                  " [        U5      5      nSUS[        U5      S-  & SU0n[        SS9   [        S5      n[        USS	9nUR                  " X40 UD6  UR                  " X440 UD6n	SSS5        [        S
S9   [        S5      n
U
R                  S
S9  [        U
SS	9nUR                  " X40 UD6  UR                  " X440 UD6nSSS5        [        WR                  S   WR                  S   5        [        W	W5        g! , (       d  f       N= f! , (       d  f       NR= f)zTest that `sample_weight` is passed correctly to the scorer in
`LogisticRegressionCV.fit` and `LogisticRegressionCV.score` even
when `enable_metadata_routing=False`
r^   r   r9   Nr  Frj  r!  )r   r   Tr  r8   )r>   r   r   r   rF   r=   r	   r   r   rA   r  r  r   r   )r   rI   rJ   r  r  r  r  r  r  r  r  r  r  s                rP   3test_lr_cv_scores_without_enabling_metadata_routingr  	  sJ   
 ))


#C#>DA"RcBHCGGCFOM#$M-CFaK }-F		6Z(%"'
 	

1"6",,s262 
7 
	5Z(!!!5%"'
 	

1"6",,s262 
6 FNN1%v~~a'89GW%) 
7	6 
6	5s   5<EAE
E
E'c                 z   [        SS9u  pUS:H  n[        [        S9   [        U SS9R	                  X5      nS S S 5        U S;  a  WR
                  S:X  d   eU S:w  a  [        WR                  [        R                  " UR                  5      5        [        UR                  U5      [        R                  " UR                  S   UR                  S	95        [        UR                  U5      [        R                  " UR                  S   S4S
S	95        WR                  X5      S:  d   eg ! , (       d  f       N= f)NTr  r9   r  r   r  )r6   r5   r1   )r@   
fill_valuer   r  )r   r-   r   r   rA   r  r   ru   r>   
zeros_liker   r  r@   rt   rD   r  )ra   rI   rJ   rH   s       rP   test_zero_max_iterr  	  s     %DA	QA	"4	5 ;??E 
6_${{a		2==#;<!!!$GG!''!*@	
 	a GG1771:q/c:	
 99Q?S   # 
6	5s   D,,
D:c                     [        SSS9u  p[        SSS9nSn[        SS9   S	S
0n[        R                  " [
        US9   UR                  " X40 UD6  SSS5        [        R                  " [
        US9   UR                  " X40 UD6  SSS5        SSS5        g! , (       d  f       NL= f! , (       d  f       N(= f! , (       d  f       g= f)zTest that the right error message is raised when metadata params
are passed while not supported when `enable_metadata_routing=False`.r^   r   r   Fr   )r   r   z1is only supported if enable_metadata_routing=Truerj  extra_paramrh   r|   N)r   r   r	   r   r   r   rA   r  )rI   rJ   r   r   r7  s        rP   5test_passing_params_without_enabling_metadata_routingr  
  s     !<DA #E >C		6%]]:S1IIa%f% 2 ]]:S1KK'' 2 
7	6 21 21 
7	6s;   B< B!B<5B+	B<
B(	$B<+
B9	5B<<
C
c                     [        SSSS9u  pSn[        SUS9n[        R                  " 5          [        R                  " S5        UR                  X5        UR                  S	   nS S S 5        WS
:  d   e[        SUS9n[        [        S9   UR                  X5        UR                  S	   nS S S 5        WU:X  d   e[        SX$S
-
  S9n[        [        S9   [        R                  " [        SS9   UR                  X5        UR                  S	   nS S S 5        S S S 5        WUR                  S
-
  :X  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NN= f! , (       d  f       NW= f)Nr^   r   r)  r  gꌠ9Y>)Fr1   )ra   rW   r  r   r8   r4   r  )ra   rW   rl   r  r|   )r   r   r  r  r  rA   r  r-   r   r   r   r   rl   )	rI   rJ   rW   lr_lbfgsn_iter_lbfgslr_nc	n_iter_nclr_nc_limitedn_iter_nc_limiteds	            rP   &test_newton_cholesky_fallback_to_lbfgsr  %
  sQ    LDAA "A6H		 	 	"g&Q''* 
#
 1 &71=E	-	0		!MM!$	 
1 $$$ ' Aq0@M 
-	0\\,4NOa# - 5 5a 8 P 
1
  6 6 ::::9 
#	" 
1	0 PO 
1	0s;   7D9!E
E,2!EE,9
E

E
E)	%E,,
E:	Estimatorc                     Sn[         R                  " [        US9   U " SS9R                  [        R
                  [        R                  5        SSS5        g! , (       d  f       g= f)z<Check that liblinear raises an error on multiclass problems.zAThe 'liblinear' solver does not support multiclass classificationr|   r2   r{   N)r   r   r   rA   r   r   r   )r  r   s     rP    test_liblinear_multiclass_raisesr  N
  sA     NC	z	-%))$))T[[A 
.	-	-s   3A
A&z7ignore:.*default.*use_legacy_attributes.*:FutureWarningestc                     [        SSSS9u  pU " SS9nSn[        R                  " [        US9   UR	                  X5        S	S	S	5        g	! , (       d  f       g	= f)
z?Check that penalty in LogisticRegression and *CV is deprecated.r9   r   r*  rM   rK   r+  r-  )r   z'penalty' was deprecatedr|   N)r   r   r   FutureWarningrA   )r  rI   rJ   r   r   s        rP   test_penalty_deprecatedr  Z
  sH    
 bJDA	T	B
$C	m3	/
q 
0	/	/s   A


Ac                      [        SSSS9u  p[        SS9nSn[        R                  " [        US9   UR                  X5        S S S 5        g ! , (       d  f       g = f)	Nrf   r   r*  r  r   rL  z@The default value of use_legacy_attributes will change from Truer|   r   r   r   r   r  rA   rI   rJ   r   r   s       rP   :test_logisticregressioncv_warns_with_use_legacy_attributesr  g
  sL    bJDA	
B MC	m3	/
q 
0	/	/   A
Az3ignore:l1_ratios parameter is only us.*:UserWarningc                     [        SSSS9u  p[        SS9nSn[        R                  " [        US9   UR                  X5        SSS5        [        S	S
9nSn[        R                  " [        US9   UR                  X5        SSS5        [        SS	S9nSn[        R                  " [        US9   UR                  X5        SSS5        g! , (       d  f       N= f! , (       d  f       N_= f! , (       d  f       g= f)z=Check that l1_ratio=None in LogisticRegression is deprecated.r9   r   r*  r  N)r~   z'l1_ratio=None' was deprecatedr|   r   rL  z+The default value for l1_ratios will change)r   r   z'l1_ratios=None' was deprecated)r   r   r   r   r  rA   r   r  s       rP   test_l1_ratio_None_deprecatedr  r
  s     bJDA	T	*B
*C	m3	/
q 
0 

B 8C	m3	/
q 
0 

B ,C	m3	/
q 
0	/ 
0	/ 
0	/ 
0	/s#   C
0C/C,

C
C),
C:c                      [        SSSS9u  p[        SS9nSn[        R                  " [        US9   UR                  X5        S S S 5        g ! , (       d  f       g = f)	Nrf   r   r*  r  r8   )r.  z'n_jobs' has no effectr|   )r   r   r   r   r  rA   r  s       rP   )test_logisticregression_warns_with_n_jobsr  
  sF    bJDA	1	%B
"C	m3	/
q 
0	/	/r  binary	use_str_yuse_sample_weight)Nr  rx  z(array_namespace, device_name, dtype_namec           
      
   [        XEU5      u  px[        R                  R                  USS9n	U	R                  u  pUR                  XS9nU(       a  U (       aW  [        R                  S:  R                  [        R                  5      n[        R                  " SS/5      U   nUS:X  a  SS	S
.nO-[        R                  [        R                     nUS:X  a  SSS	S.nUR                  5       n[        R
                  " USS9nOU (       a<  [        R                  S:  R                  [        R                  5      nUS:X  a  SS	S.nO[        R                  nUS:X  a  SSS	S.nUR                  U5      nUR                  XS9nU(       aN  [        R                  R                  S5      R                  SSU
S9R                  SS 5      R                  U5      nOS n[!        SSSSUS9n["        R$                  " 5          ['        S#0 UD6R)                  XUS9nUR*                  UR,                  :  d   e S S S 5        [        R.                  " WR0                  5      R3                  5       S:  d   eUR5                  U	5      nUR7                  U	5      nUR9                  U	5      n[;        U5      S-  nUS:X  a  SOSn[=        SS9   ["        R$                  " 5          ["        R>                  " S[@        5        ['        S#0 UD6R)                  XUS9nS S S 5        WR*                  R                  UR*                  R                  :X  d   e[C        UR*                  S   5      UR,                  :  d   eS Hj  n[E        UU5      n[E        UU5      n[G        [I        U[        S S!9UUUS"9  URJ                  URJ                  :X  d   e[M        U5      [M        U5      :X  a  Mj   e   UR5                  U5      n[G        [I        U[        S S!9UUUS"9  URJ                  URJ                  :X  d   e[M        U5      [M        U5      :X  d   eUR7                  U5      n[G        [I        U[        S S!9UUUS"9  URJ                  URJ                  :X  d   e[M        U5      [M        U5      :X  d   eUR9                  U5      nU(       d  [I        U[        S S!9n[O        UU5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       g = f)$NTr  r*   r   setosa
not-setosarx  rh   g      @)r  r  r  )	virginicar  
versicolorr   rI  r7   r   r  rO  r1   r  rM  )rW   ra   rk   rl   r@  r  r  r^   r(  r  rm   array_api_dispatchr  )ru   rt   cpu)xpr+   rp   r   )(r,   r   r   r  r@   r   r   r>   r  rr   r   r  r   default_rngr  cliprx  r  r  r   rA   r  rl   r  ru   r  rD   predict_log_probarB   r'   r	   r  r   r  r  r   r(   r   array_api_devicer   )r  r  r  r@  array_namespacedevice_name
dtype_namer  r+   X_nprK   r   X_xpr   y_np
y_xp_or_npr  	lr_paramslr_nppredict_proba_nppreditct_log_proba_npprediction_nprq   ro   lr_xp	attr_nameattr_xpattr_nppredict_proba_xppredict_log_proba_xpprediction_xps                                  rP   -test_logistic_regression_array_api_compliancer  
  sw   $ &oJOJB99JT2D::LI::d:*DkkAo--bhh7FXXx67?Fv%*-SA&&t{{3Fv%-0CsS{{}ZZ40
kkAo--bhh7Fv%#&3/[[Fv%#&337}}Z(ZZZ4
II!!!$WRW+T!T]VJ	 	  
wEClI 
	 	 	""/Y/33m 4 
 }}u~~--- 
# 66%++""$s*****40!33D9MM$'M *%*D*4D	4	0$$& !!'+=>&3377 8 E	 ' }}""emm&9&99995==#$u~~5550IeY/GeY/GBu5wTPT ==DJJ...#G,0@0FFFF 1 !..t4$E:		
  %%333 015Ed5KKKK$66t<(R>!		
 $))TZZ777 459I$9OOOOd+#MbGM=-8Y 
1	0% 
#	"& '& 
1	0s8   :6SS<5S*CS<C7S<
S'*
S9	4S<<
T
zignore:'penalty' was deprecated)rG  r   )r-  rh   c                     [        SS9u  p#[        SXS9nSU  SU 3n[        R                  " [        US9   UR                  X#5        SSS5        g! , (       d  f       g= f)	z=Check that incompatible penalty and l1_ratio raise a warning.r   rK   r6   )ra   r   r~   zInconsistent values: penalty=z with l1_ratio=r|   N)r   r   r   r   rs  rA   )r   r~   rI   rJ   r   r   s         rP   $test_lr_penalty_l1ratio_incompatibler    sS     ,DA	67	NB)'/(
LC	k	-
q 
.	-	-s   A
A c                      [        SS9u  p[        S/S9nSn[        R                  " [        US9   UR                  X5        SSS5        g! , (       d  f       g= f)z$Check that scoring raises a warning.r   r  r   )r   z8The default value of the parameter 'scoring' will changer|   Nr  r  s       rP   test_lr_scoring_warnsr  (  sF     ,DA		,B
DC	m3	/
q 
0	/	/s   A
Ac                  l    [        5       n U R                  5       R                  R                  S:X  d   eg)z;Test that LogisticRegressionCV gets correct default scorer.accuracy_scoreN)r   _get_scorer_score_funcr  )r   s    rP   test_get_default_scorerr  3  s.     
	B>>''004DDDDrR   c                    [        XU5      u  pE[        R                  R                  USS9nU (       a#  [        R                  S:  R                  U5      nO[        R                  R                  U5      nUR                  XeS9nUR                  XuS9n	[        SS9   [        SSSSS	9n
U
R                  X5        U
R                  U5        U
R                  X5        S
S
S
5        g
! , (       d  f       g
= f)z~Test that warm_start=True works with array API inputs across
multiple fit calls for both binary and multiclass classification.Tr  r   r*   r  rO  r1   rj   )rW   ra   rl   r/  N)
r,   r   r   r  r   r   r	   r   rA   rB   )r  r  r  r  r  device_r   r  r  y_xpr   s              rP   -test_logistic_regression_array_api_warm_startr  :  s     'ZPKB99JT2Da''
3{{!!*-::d:+D::d:+D	4	0$wQUV
t


4
t	 
1	0	0s   A C&&
C4)r   r9   r   c                    [        SSS9u  p[        5       n[        SU S9R                  U5      nUR	                  X5        UR                  S5      S:X  d   eUR                  S5      S:X  d   eUR                  S	5      S[        UR                  S5      -   S-   :X  d   eUR                  S
5      S[        UR                  S5      -   S-   :X  d   eg)z1Test the callback support for LogisticRegression.rg   r   )r   r   r1   r  setupr8   teardownon_fit_task_beginon_fit_task_endN)r   r   r   set_callbacksrA   count_hooksr  r  )rl   rI   rJ   cbr   s        rP   )test_logistic_regression_callback_supportr'  Z  s     !!<DA		B	7X	>	L	LR	PBFF1L>>'"a'''>>*%***>>-.!c"**a6H2H12LLLL>>+,C

A4F0F0JJJJrR   c                    [        SSSU SS9u  p#[        5       nSUS.n[        S0 UD6R                  U5      R	                  X#5      nUR
                  S   nUR                   Vs/ s H%  nUS   S:X  d  M  SUS	   R                  ;   d  M#  UPM'     n	nUR                   Vs/ s H%  nUS   S
:X  d  M  SUS	   R                  ;   d  M#  UPM'     n
n[        [        X5      5       GHo  u  nu  pUS	   R                  U:X  d   eUS	   R                  U:X  d   eUS:  a  US   S   n[        S0 UDSU0D6R	                  X#5      n[        UR                  UR                  5        [        UR                  UR                  5        [        UR                  U5      UR                  U5      5        X:  a  US   S   n[        S0 UDSUS-   0D6R	                  X#5      n[        UR                  UR                  5        [        UR                  UR                  5        [        UR                  U5      UR                  U5      5        GMd  US   S   c  GMp   e   gs  snf s  snf )zCheck the fitted_estimator in callback hooks.

It is able to predict, with learned parameters identical to the ones obtained if the
owner estimator had been fitted with the same number of iterations.
rg   r   )r   r+  r  rM   r   r1   r  r*  r"  itercontextr#  r  fitted_estimatorrl   r8   Nr   )r   r   r   r$  rA   r  r   	task_namer   r  task_idr   ru   rt   rB   )rM   rY   rI   rJ   r&  r  r   n_iterreciter_begins	iter_endsr   
iter_beginiter_endr  expected_lrs                   rP   2test_logistic_regression_callback_fitted_estimatorr5  l  s_    DA 
	B"]CI		(i	(	6	6r	:	>	>q	DBZZ]F 99Cv;-- 	28C	N<T<T2T 	   99Cv;++ 	06#i.:R:R0R 	   &/s;/J%K!!J)$,,111	"**a///q5X&'9:C,EyE1EII!OKCII{'8'89CNNK,B,BCCKKNK,?,?,BC:8$%78C,IyI1q5IMMaSKCII{'8'89CNNK,B,BCCKKNK,?,?,BC H%&89AAA' &L
s$   %I6II!I2IIc                      [        5       n [        R                  " [        SS9   [	        SS9R                  U 5        SSS5        g! , (       d  f       g= f)zLTest the warning message when trying to set a callback with solver!='lbfgs'.zECallbacks are only supported in LogisticRegression for solver='lbfgs'r|   r2   r{   N)r   r   r   rs  r   r$  )r&  s    rP   1test_logistic_regression_callback_support_warningr7    sC     
	B	U
 	+.<<R@	
 
 
s   A
A)rz  r)  r~  r  numpyr>   r   numpy.testingr   r   r   scipyr   scipy.linalgr   r   sklearnr	   sklearn._lossr
   sklearn.baser   sklearn.callback.tests._utilsr   r   sklearn.datasetsr   r   r   sklearn.exceptionsr   sklearn.linear_modelr   r   r   sklearn.linear_model._logisticr   r   sklearn.metricsr   r   r   sklearn.model_selectionr   r   r   r   r   r   sklearn.multiclassr    sklearn.preprocessingr!   r"   r#   sklearn.svmr$   sklearn.utilsr%   r&   sklearn.utils._array_apir'   r(   r)   r+   r  sklearn.utils._testingr,   r-   sklearn.utils.fixesr.   r/   r0   markr  
pytestmarkry  rI   rZ   r_   r   rQ   parametrizer\   r`   rw   r   r   r   r   r   r   r   r   thread_unsafer   r  r  r   r;  rG  rg  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  r  r  rB  rC  r  r   r  r%  r7  r=  rE  rK  rW  r   r`  re  rM  rh  rj  rq  rt  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r5  r7  r   rR   rP   <module>rQ     s    	 	    
  + " -  R Q 1 X X C B  3 E E   7 
 I I I[[''<
 [[''<
 P!Wq!fq!f{8$ .9
U :
U .9F :F
 JKG->#?@B A LBL OPLM 24HIJ+ K N Q+^ OP34	5M*%(<k'JK@	 5 Q@ .92 :20<,;=
@?0 8 8D 04-@)@ A)@Z OP" Q"&&"R "	bT	x-. 
+&'	"	Hk*+%
%
P:I| 04-@G* AG*T 2UDMBq!f-+7 . C+7\
4 5$-8B 9BJ 5$-8B 9BJ 7+.9 : ,: $4###6N#OP(J)?@4
 A Q4
p OPLM$457+@M , 6 N Q
@MF 7+A ,A<8<v ;-.*HI$E J$EN4&! .9$5 : $5N aV,+ -+@+4 RYYq!_5"%# 6$%( 7+04-@5F A ,5Fp 6#g,k]9K*K#LM}5-8# 9 6 N#< $5{#CD-8q"&&k*: + 9 E:: V,.9)F : -)FX 7+5$-8.9A@ : 9 ,A@H:*D8 OPAB,y).DE@ F C Q@. 23D 4DB bkk"a34_5%; 6 5%;R f-&+ .&+R tR[[Aq-A&BCf- ; . D ;F f--7 .-7`$P OPQ QQ bkk"a34_5%5 6 5%5PA@F
T OP6#g,k]9K*K#LM1 N Q1< 6#g,k]9K*K#LM N" dEUEeF,< ,<^*RZ #LM5$-8%I 9 N%IP cds*CZ)PQ! R!  7+.94 : ,4&9"I2 -!- .!-H &F 7+! ,!2((%;R OPLM'9;O&PQB R N QB OPUV!35I JK L W Q QRUV W S4 E4=1udm4,udm<)CD.-/ JKy9 L	 E = 5 2y9z =>,{K.HI J ? UV W OPE QE D%=1.-/ JK L	 24 \2K  3K  q!f-4-81B  9 .1BD A ArR   