
    Q3j                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZ d d
lmZ d dlm Z m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z>m?Z? d dl<m@ZA d dlBmCZCmDZD d dlEmFZFmGZGmHZH ej                  j                  d      ZKej                  j                  d      ZKdZLdd gd dgddggZMg dZNg dZO e       ZPd ZQej                  j                  deH      d         ZSej                  j                  deH      d!        ZTej                  j                  d"      ej                  j                  d#d$d%g      d&               ZUej                  j                  d'      ej                  j                  d(      ej                  j                  d)e e!g      d*                      ZVej                  j                  d'      ej                  j                  d+      ej                  j                  d)d,ge d-fe!d.fg      d/                      ZWej                  j                  d0eG      d1        ZXd2 ZYd3 ZZd4 Z[d5 Z\d6 Z]ej                  j                  d7        Z_ej                  j                  d8d9d:g      d;        Z`ej                  j                  d'      d<        Zad= Zbej                  j                  d>d?d@gfdAdBdCgfdDdBdCgfdEd@gfdFdBdCgfg      dG        ZcdH Zdej                  j                  d8d9d:g      dI        Zeej                  j                  dJd:d9g      ej                  j                  dKdLdMg      dN               ZfdO Zgej                  j                  dPd:d9g      dQ        Zhej                  j                  dPd:d9g      dR        Ziej                  j                  d#eL      ej                  j                  deH      dS               Zjej                  j                  dTdUdVdWdUdVdXdYg      ej                  j                  dZdTd[g      d\               Zkej                  j                  d'      ej                  j                  d(      ej                  j                  d]d^      ej                  j                  d#eL      d_                             Zlej                  j                  d#eL      d`        Zmda Zndb Zoej                  j                  ddc geHz         dd        Zpde Zqdf Zrej                  j                  ej                  j                  deH      dg               Zsej                  j                  d-dd g      dh        Ztdi Zuej                  j                  dj ej                  ddk            ej                  j                  dlg dm      dn               Zwej                  j                  d#eL      ej                  j                  d8d9d:g      do               Zxej                  j                  d# ey ezeL       ezdpg      z
              ej                  j                  dqdr      ej                  j                  dPdr      ds                      Z{ej                  j                  d#d%dtg      ej                  j                  dPdr      ej                  j                  dudej                  f      dv                      Z}ej                  j                  d-dW      ej                  j                  deH      dw               Z~ej                  j                  d#eL      ej                  j                  dPd:d9g      ej                  j                  deH      dx                      Zdy Zdz Zej                  j                  d{      ej                  j                  dug d|      ej                  j                  d}d~dg      d                      Zej                  j                  dug d      d        Zej                  j                  du ej                  ddLd            ej                  j                  d-g d      d               Zej                  j                  dKd      d        Zej                  j                  d.d ej                  d ddL      f      ej                  j                  dKd      d               Zej                  j                  dKd      d        Zd Zej                  j                  d{      d        Zej                  j                  du ej                  ddLd            ej                  j                  d-g d      d               Zd Zd Zej                  j                  d{      ej                  j                  d# ey ezeL       ezdpg      z
              d               Zej                  j                  d# ey ezeL       ezdpg      z
              d        Zej                  j                  ej                  j                  ddd:dddd d9dddd d:dddg      d               Zd Zej                  j                  d#g d      ej                  j                  dPd:d9g      d               Zej                  j                  dZddddYd[g      d        Zej                  j                  d#eL      ej                  j                  deH      d               Zd Zd Zd Z ed9      d        Zd Zej                  j                  d#eL      d        Zd Zd Zej                  j                  d'      ej                  j                  d(      ej                  j                  de e!g      d                      Zej                  j                  d'      ej                  j                  d      ej                  j                  de e!g      d                      Zd Zej                  j                  d      ej                  j                  d      d               Zd Zej                  j                  dd:d9g      ej                  j                  dd:d9g      ej                  j                  dd:d9g      ej                  j                  dZg d      ej                  j                  d e?             ej                  j                  d"      d                                           Zej                  j                  d      ej                  j                  d}ddg      d               Zej                  j                  d      d        Zej                  j                  d'      d        Zej                  j                  dd9d:g      ej                  j                  d e?             ej                  j                  d"      d                      Zej                  j                  djg d      ed               Zej                  j                  dKdLdMg      ej                  j                  dPd9d:g      ed                      Zed        Zy)    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                    t        |      }t        j                  |      }|j                  d   }| j	                  ||      j                  |      }t        | j                  |       |j                  |fk(  sJ t        ||       | j                  |      }|j                  ||fk(  sJ t        |j                  d      t        j                  |             t        |j                  d      |       y)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           U/DATA/.local/lib/python3.12/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictionsrQ   E   s    AIiilGa I1%%a(Is||W-??yl***y!$%%a(M9i"8888M%%1%-rwwy/AB}+++3Q7    csr_containerc                    t        t               t        t               t        t                | t              t               t        t        d      t        t               t        t        d       | t              t               t        t        d      t        t               t        t        d       | t              t               y )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                     t        t        d      t        t               t        t        d       | t              t               y )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                    t        j                  g dg dg      j                  }t        j                  g d      }t        d|j                  d   z  ddd| 	      }|j                  ||       t        |j                  d
d       t        |j                  ddggd       t        j                  g d      }|j                  ||       t        |j                  g dd       t        |j                  ddgddgddggdd       y)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 GGAqMCNNM=CII >?dK6 	,-AGGAqMHt 		^,/=)	

 	rR   z1ignore:The default value.*scoring.*:FutureWarningz.ignore:.*use_legacy_attributes.*:FutureWarningLRc                 &   t         j                  t         j                  }}dD ]G  }d| d} | |      }t        j                  t
        |      5  |j                  ||       d d d        I dD ][  }d|z  }| t        k(  r | |d	      }n
 | |d
      }t        j                  t
        |      5  |j                  ||       d d d        ] dD ]G  }d|z  } | |d      }t        j                  t
        |      5  |j                  ||       d d d        I dD ]\  }d| d}| t        k(  r | |d	      }n
 | |d      }t        j                  t
        |      5  |j                  ||       d d d        ^ | t        u rQd} | t        j                  d      }t        j                  t
        |      5  |j                  ||       d d d        y y # 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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   
 99dkkqA  fXQRv]]:S1FF1aL 21   C?&H##6A.B6T2B]]:S1FF1aL 21 C KAFJvD)]]:S1FF1aL 21 K  KF8STU##6C0B6V4B]]:S1FF1aL 21   
F"&&-]]:S1FF1aL 21  A 21 21
 21 21 21s<   G0G!<G.G;7HG	!G+	.G8	;H	Hzignore::FutureWarningargr~   r   c                      | dddd|d i}t        j                  t        d      5  |j                  t	        j
                  ddgdd	gg      t	        j
                  d
dg             d d d        y # 1 sw Y   y xY w)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A<coo_containerc                 H   t         j                  j                  \  }}t         j                  t         j                     }t        t         j                        }t               j                  ||      }|j                  |      }|j                          t        j                  |j                        sJ |j                  |      } | |      }|j                  |      }	|j                          |j                  |      }
t        ||       t        ||	       t        ||
       y 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Izt{{+FdiiA


"
"1f
-C$$Q'HLLN??399%%%$$Q'HAG$$W-HKKM$$W-Hh1h1h1rR   c                      t         j                  j                  d      } | j                  d      }t        j                  |j
                  d         }d|d<   t        d      }|d d }t        j                  t        d      5  |j                  t        |       d d d        t        j                  t        d      5  |j                  ||      j                  | j                  d             d d d        y # 1 sw Y   ^xY w# 1 sw Y   y xY w)	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B 1 1' :; 
C	B
 
 
C	Bs   C8>1D8DDc                      t               } | j                  t        t               d| j                  d d  d| j
                  d d  t        | j                  t              d       y )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                     t        j                  t        t         j                        } t         j                  | d<   t               }t        j                  t        d      5  |j                  | t               d d d        y # 1 sw Y   y xY w)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   "BBc                 b   t         j                  j                  |       }t        j                  |j	                  dd      ddgz   |j	                  dd      f      }dgdz  dgdz  z   }t        j
                  ddd      }t        }dD ]  }  |t              ||ddg|d	d
|d| 	      \  }}}t        |      D ]W  \  }	}
t        |
d	d
|| d      }|j                  ||       |j                  j                         }t        |||	   dd|z         Y  dD ]  }dg}  |t              ||ddg|d|d|       \  }}}t        |d   dd| |      }|j                  ||       t        j                  |j                  j                         |j                  g      }t        ||d   dd|z          y )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 "3q23F+

r1 bMDAq##/B FF1aLhhnn&G%q16H66Q " "8 XU3q23F%+	
r1  e%+
 	q!.."((.."2BMM!BC!U1Xq2Dv2M	
+ XrR   c                     t         j                  j                  d      } t        j                  | j	                  dd      ddgz   | j	                  dd      f      }dgdz  dgdz  z   }dg}t        j                  t              5 }t        ||ddg|dddd       d d d        t              dk(  sJ |d   j                  j                  d   }d	|v sJ d
|v sJ d|v sJ d|v sJ y # 1 sw Y   NxY w)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!q1a&RS11VW	
 
*
 v;!ay  %%a(H:hFFF.(:::x'''2h>>> 
*	)s   C((C1c                    t        d|       \  }}t        | ddd      }|j                  ||       t        | ddd      }|j                  ||       t        | dz   ddd      }|j                  ||       t        |j                  |j                         d}t        j                  t        |	      5  t        |j                  |j                         d d d        y # 1 sw Y   y xY w)
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MDAq
'	C GGAqM
'	C GGAqM
'!+	C GGAqM cii3
5C	~S	1!#))SYY7 
2	1	1s   4!CC'use_legacy_attributesTFc           
         d\  }}}t         j                  j                  |       }|j                  ||      }t        j                  |j                  d|j                  |      z              }||j                         z  }||j                         z  }t        dgdd| d|d|      }|j                  ||       t        dd| d	      }	|	j                  ||       t        |	j                  |j                         |j                  j                  d
|fk(  sJ t        |j                  dd
g       t!        |j                        dk(  sJ |j"                  j                  dk(  sJ |j"                  j                  d   }
|j$                  j                  dk(  sJ |j$                  j                  d   }|rt        j&                  t)        |j*                  j-                                     }|j                  d
||
||fk(  sJ t        j&                  t)        |j.                  j-                                     }|j                  d
||
|fk(  sJ y |j*                  j                  |||
d
|fk(  sJ t1        |j2                  t4              sJ t1        |j6                  t4              sJ |j.                  j                  |||
fk(  sJ y )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    sl    #+Iz4
))

 2
3CIIi,E
		!cii
3345A	UZZ\E	UYY[E 5'3	E 
IIeQ	
U1CK
B FF5!bhh4;;J///u~~Aw/u~~!###99??d"""99??1D!!T)))""((+Kjje&8&8&?&?&A!BC  QdK$LLLLD!5!5!789||4{;;;;!!''D+tQ
+SSSS%((E***%//5111}}""t[$&????rR   c                     t        |       \  }}t        dgdd|       }|j                  ||       |j                  dk(  sJ y)aI  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    sL     ,>?DAq %#'	E 
IIaO??c!!!rR   c                      G d d      }  |        }g d}d}t        |d||d      }t        d	      \  }}|j                  ||       |j                  |d   k(  sJ |j                  |t        |      z  k(  sJ d|_        |j                  ||j                  |            }||j                  d   k(  sJ |j                  d
k(  sJ y)z0Test that LogisticRegressionCV calls the scorer.c                       e Zd Zd ZddZy)0test_logistic_cv_mock_scorer.<locals>.MockScorerc                 $    d| _         g d| _        y )Nr   )皙?g?皙?r   )callsr  )selfs    rP   __init__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__  s    DJ.DKrR   Nc                     | j                   | j                  t        | j                         z     }| xj                  dz  c_        |S )Nr8   )r  r  r=   )r  r   rI   rJ   sample_weightscores         rP   __call__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__  s4    KK

S-= =>EJJ!OJLrR   r   )__name__
__module____qualname__r  r  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.DAqFF1aL 55BqE>> SW,,, K88Arzz!}-L;--a0000!!!rR   zscoring, multiclass_agg_listaccuracy 	precision_macro	_weightedf1r   recallc                    t        dddd      \  }}t        j                  d      t        j                  dd      }}t        dd	      }|j	                         }d
|d<   dD ]  }||=  |j                  ||   ||          |D ]X  }	t        | |	z         }
t        t        ||||ft        j                  |      dg|
d d d d|d   d    |
|||   ||                Z y )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_scorer6    s   & B!1DAq ))B-2s!34E	c'	2B]]_F
 F9 -3K -FF1U8QuX(	Gi/0!!	
 		!5 $"!    2qw$(	
 )rR   c                     d\  } }}t        | ||dd      \  }}t               j                  g d      j                  |      }t	        j
                  |      dz
  }t               }t        ddd	      }t               }t        ddd	      }	|j                  ||       |j                  ||       |j                  ||       |	j                  ||       t        |j                  |j                         t        |j                  |      |j                  |             t        |j                        g dk(  sJ t        |j                  |	j                         t        |j                  |      |	j                  |             t        |j                        g dk(  sJ t        |	j                        g dk(  sJ t        t	        j                  |j                  |                  g dk(  sJ t        t	        j                  |	j                  |                  h d
k  sJ t        g ddd	      j                  ||      }	t        t	        j                  |	j                  |                  g dk(  sJ t        dddd      j                  ||      }	t        t	        j                  |	j                  |                  ddgk(  sJ y)zTest internally encode labelsr   rf   r   )rK   r   rM   r&  r   )barbazfoor8   Fr   )r   r   r   >   r8  r9  r:  )r8   r9   r^   r9   )class_weightr8  r9  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_inputsrB  U  sl   '/$Iz9"HE1 N45GGJE
aA		B #E
  !F$#I FF5!	IIeQ
JJue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uI "))I--e4565%.HHHrR   c           
      .   t         j                  t         j                  }}|j                  \  }}d}t	        |      }t        |j                  ||            }t        |ddd      }|j                  ||       |j                  j                  d|fk(  sJ t        |j                  g d       t        j                  t        |j                  j                                     }	|	j                  d|d|d	z   fk(  sJ |j                   j                  d
k(  sJ t        j                  t        |j"                  j                                     }
|
j                  d|dfk(  sJ t%        t'        t)        d            dt        j*                  ddd      id      j                  ||      }dD ]X  }|dv rdnd}t        ||d|dv rdnddd|       }|dk(  rt-        |      }|j                  ||       |j/                  ||      }|j/                  ||      }||kD  sJ |j                  j                  |j                  j                  k(  sJ t        |j                  g d       | rt        j                  t        |j                  j                                     }	|	j                  d|d|d	z   fk(  sJ |j                   j                  d
k(  sJ t        j                  t        |j"                  j                                     }
|
j                  d|dfk(  sJ t1        |j                  d   j                  d         D ]  }|j                  D cg c]  }|j                  |   |d d d df    }}t        j2                  |d	d      j5                  t7        |j                         d      }t        j8                  ||z  d	      }t        j:                  t        j<                  |      dk\        rJ  Kddd	d|d	z   f\  }}}}}|j                  j                  |||||fk(  sJ t?        |j@                  tB              sJ t?        |jD                  tB              sJ |j"                  j                  |||fk(  sJ t1        |j                  j                  d         D ]c  }|j                  |dd d d d d df   }t        j8                  ||z  d      }t        j:                  t        j<                  |      dk\        rcJ  [ tG        d      }t        jH                  |      }t7        |      dk(  sJ |j                  ||      D ]{  \  }}t7        t        jH                  ||               dk(  sJ t7        t        jH                  ||               d	k(  sJ tK        ||         tK        ||         z  tK               k(  r{J  t        |dd !      j                  ||      }t        j:                  |j"                  d"k(        sJ t        |d#t        j*                  d$dd      d%      j                  ||      }|j@                  d&k(  sJ |j"                   }t        j:                  |d'kD        sJ t        jL                  |      d(k  sJ y c c}w ))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?   r>  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   r0  r1  brier_scoress                                 rP   test_multinomial_cv_irisrb    s    99dkkqAGGIz D		BRXXa^,  "	C GGAqM 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!Qi	 
 8 O33(/1t""7
	 WaAaooa+MM!Q'	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 B <=b!Q
UV;V8GT;	5))//4    illE222i115999$$**wT.JJJJ i44::1=>
 "..tQ1crc/ABuu}8<vvbggen1222 ?s 8J 
	BiilGw<1xx1~t299QuX&'1,,,299QtW%&!+++1U8}s1T7|+su444 &
 # 
c!Qi	  66#++$%%% !;;r1b!#	
 
c!Qi  66T>>KK<L 66,()))66,')))As    Zenable_metadata_routingrM   r9   rf   c           
      n   t        |       5  t        j                  g d      dd|z   }t        j                  d|z        dddf   }t	        |      }|j                  ||      D ]~  \  }}t        t        j                  ||               |dz
  k(  sJ t        t        j                  ||               dk(  sJ t        ||         t        ||         z  t               k(  r~J  t        |dt        j                  dd	d
      dd      j                  ||      }|j                  dk(  sJ t        |j                  ||            D ]  \  }\  }}t        |j                        j                  ||      }	|j                  |ddddddf   |	_        |j                  |dddddf   |	_        |dk  r't%        ||   |	j'                  ||         dddg      }
n%t%        ||   |	j'                  ||         g d      }
t)        |j*                  |ddf    |
        	 ddd       y# 1 sw Y   yxY w)zlTest that LogisticRegressionCV correctly computes scores even when classes are
    missing on CV folds.
    rc  )arf  brg  r\  r\  Nr9   rK  r8   rM  rN  r%  r   r  F)r   r   r   r   r   r   rV   r   r7   rg  rf  )	pos_labellabels)rf  rg  r\  )ri  )r	   r>   rr   r-  r   rO  r=   r?   r>  r   r   rA   r   r   r   r   ru   rt   r   rD   r   r   )rc  rM   rJ   rI   r   r0  r1  rH   r   clf2bss              rP   +test_logistic_cv_folds_with_classes_missingrl    s    
0G	HHH34_q9}EIIa)m$QW- I&88Aq>KE4ryy5*+y1}<<<ryy4)*a///qx=3qw</35888 *
 #%{{2q!$"'
 #a) 	 vv~~ )"((1a. 9A}t &/33Aq9D))!Q1crc/:DJ!..q!Q2~>DOA~%dG&&qw/!:	 &dGT//$8 S[[Aq1126% !:+ 
I	H	Hs   CH+&D;H++H4c                 J   t        ddd|       \  }}t        dd|       }t        D ci c]   }|t        dd|i|j	                  ||      " }}t        j                  |d	
      D ]5  \  }}t        ||   j                  ||   j                  ddd| d|        7 yc c}w )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   r2  ra   classifierssolver_1solver_2s           rP    test_logistic_regression_solversrz  N  s    "ADVDAq Cu;MNF F 	";&;F;??1EE  
 (44[AF(!''!''xjXJ7	
 Gs   %B rY   c                 2   d\  }}}t        ||d|d      \  }}d}t        | |d      }dd	d	d
}t        t              t        dg      z
  D 	ci c]1  }	|	t	        d|	|j                  |	d      d|j                  ||      3 }
}	|
j                         D ]+  \  }	}|j                  j                  ||fk(  r"J d|	 d        t        j                  |
d      D ]|  \  }}t        |
|   j                  |
|   j                  |dk(  s|dk(  rdnd| d|        | sCt        |
|   j                  |
|   j                  |dk(  s|dk(  rdnd| d|        ~ t        t              t        dg      z
  D 	ci c]5  }	|	t        ddg|	|j                  |	d      ddd|j                  ||      7 }}	|D ]U  }	t        ||	   j                  |
|	   j                  d       | s.t        ||	   j                  |
|	   j                  d       W yc c}	w c c}	w )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   rn  i N  r1   r5   r6   r2   rU   ra   rl   zSolver z" generates coef_ with wrong shape.r9   ro  r6   {Gzt?r   rr  ro   r   rh   Fr   )r   ra   rl   r   r   rJ  rn   Nr   )r   rs  r>  rt  r   getrA   itemsru   r@   ru  rv  r   rt   r   )rY   rK   r   rM   rI   rJ   rk   r2  solver_max_iterra   rw  rH   rx  ry  classifiers_cvs                  rP   +test_logistic_regression_solvers_multiclassr  h  s    (1$Iz9DAq C3RHF !$FFCO 'lS+%77	 8F 	" 
O$7$7$D
HN

#a)	 8	   #((*yy9j"99 	
fX?@	
9 +
 (44[AF(!''!''"f,F0BjXJ/		
 H%00H%00&&0H4FTT#*D
3	 G6 'lS+%77
 8F 	$ 
u$((5"'"
 
 #a)	 8  
 !6"((+f*=*C*C$	
 v&11F#.. !Q:
s   6H8:Hc                    d\  }}}t         j                  j                  |      }t        ||| z   || z   d|      }| r	d|dddf<   t	        |      \  }}}	t        j
                  |dkD        sJ t        j                  |      t        j                  |      z  dk  sJ | r|ddddf   }|j                  dd	||z  
      }
|
j                  ||      }
|j                  dd|
      | z  }||
j                  z  |z   }t        |      }|j                  j                  |      }t        j                  |      }t        |      D ]5  }t        j                   |j#                  d||ddf               d   ||<   7 d}t%        | |      }dddd}ddd}t'        t(              t'        dg      z
  D ci c]Q  }|t+        d"t         j,                  ||j/                  ||      |j/                  |d      d|j1                  ||      S }}|j3                         D ].  }t5        ||   j6                  j9                  d      dd|       0 t;        j<                  |d      D ]|  \  }}t5        ||   j6                  ||   j6                  |dk(  s|dk(  rdnd| d | !       | sCt5        ||   j>                  ||   j>                  |dk(  s|dk(  rdnd| d | !       ~ yc c}w )#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   rn  '  r}  ri   r   r2   )rW   ra   rk   rl   r   r;   绽|=)rq   r   r9   ro  r6   r  gMb`?rr  r  r   ) r>   r   r   r   r   rS  maxrU  uniformrR  rs   r
   linkinversezerosrP  argwheremultinomialrs  r>  rt  r   r   r  rA   keysr   ru   rE   ru  rv  rt   )rY   r   rK   r   rM   r   rI   UsVtcoef	interceptraw_predictionlossprobarJ   r   rk   r2  r  
solver_tolra   
regressorsrx  ry  s                            rP   7test_logistic_regression_solvers_multiclass_unpenalizedr    s    (1$Iz9
))

 2
3C-!M1	A !R%1vHAq"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<N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   6AK&c                    t        dd|       \  }}d||dk  <   t        g dddd	      }t        d|d
dd|}|j                  ||       t        d|d
dd|}|j                   ||      |       |dv rdnd}t	        |j
                  |j
                  |       t	        |j                  |j                  |       |j                  |j                  k(  sJ y)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   rs  r   rA   r   ru   rt   r   )	r   ra   rS   rI   rJ   r2  rH   clfsro   s	            rP   test_logistic_cv_sparser    s     !2DDAq Aa#gJ^f$RPF
 # 	C GGAqM # 	D 	HH]1q!_,4$DDJJ		5DOOS^^$?77cffrR   weightr  皙?r   r   rD  r;  balancedc           	         t        |       }|dk(  r| }t        ddddd||      \  }}t        dd|dd	      }t        dd
dd|}t	        t
              5  |j                  ||       ddd       t        t              t        g d      z
  D ]c  }t        d|dd|}	|dv r|	j                  dd|dz          |	j                  ||       t        |	j                  |j                  d| d       e y# 1 sw Y   xY w)z+Test class_weight for LogisticRegressionCV.r  rI  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   rs  r   r-   r   rA   r>  rt  
set_paramsr   ru   )
r  r;  r   rM   rI   rJ   r2  	clf_lbfgsra   rH   s
             rP   (test_logistic_regressioncv_class_weightsr    s2    FIx'DAq !#F %  I 
"4	5a 
6 g,%N!OO" 
"
 

 _$NNE8JQ8N   	1IIyTfXY;O	
 P 
6	5s   C55C>problem)singler   c                    d}d}t        ||z  dddd|      \  }}t        j                  j                  |      }t        j                  |j
                  d         }|d|j                  d      rd	nd
dd}	|	j                         }
|j                  dd|      |d | t        j                  ||j                  t              d      }t        j                  ||j                  t              d      }| dk(  rt        }n| dk(  rt        }t        j                  t        j                  |d      t        j                  |d      t        j                  |d      g      }t!        t#               j%                  ||            }|	j'                  d|d       t        j                  ||j                  t              d      }t!        t#               j%                  ||            }|
j'                  d|d        dd|i|	} |dd|i|
}|dk(  r^t)        j*                         5  t)        j,                  dt.               |j1                  |||       |j1                  ||       d d d        n&|j1                  |||       |j1                  ||       | dk(  r&t3        |j4                  d   |j4                  d          t3        |j6                  |j6                  d       y # 1 sw Y   WxY w)Nrn  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   rO  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'DAq ))

 2
3C		B +%007GU	K ""$K"%++a9O+"PB1biin15J1biin15J(	D!...2.2.2
 /177/7RS"O<=))ORYYs^!L$$Z$H
 	"O<=66+6O66+6O $$&!!(,>?1B7
J7 '& 	Aq3J
3$//2O4K4KA4NOO))?+@+@tL '&s   'AK%%K.c                    t        dddd|      \  }}|dz   }|ddd	d
}t        d| dddd|}|j                  ||       t        dd| i|}|j                  |||       t        |j                  |j                  d       y )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     'DAq EM +	K # aL4?I MM!Q"@&@K@IMM!QmM4IOOY__4@rR   c           
         t        dddd|       \  }}|dz   }t        ddddd	dd
d|       }|j                  ||       t        dddd
d|       }|j                  |||       t        |j                  |j                  d       t        ddddd	dd
dd|       }|j                  ||       t        dddd
dd|       }|j                  |||       t        |j                  |j                  d       y )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    'DAq EMq\'F JJq!'F JJq!]#FLL&,,U;q\'	F JJq!'F JJq!]#FLL&,,U;rR   c                 v    t        j                  |       }t        d||       }t        t	        ||            }|S )Nr  )rL   rJ   )r>   r?   r%   rs  zip)rJ   rL   r;  class_weight_dicts       rP    _compute_class_weight_dictionaryr    s5    iilG'
GqILS,78rR   c                     | S r   r   )xs    rP   <lambda>r    s    QrR   c                 >   t        t        j                        }|dd d d f   } ||      }t        j                  dd  }t	        |      }t        t              t        ddg      z
  D ]  }t        |d|       }t        dddi|}t        dd|i|}	|j                  ||       |	j                  ||       t        |j                        dk(  sJ t        |j                  |	j                  d	
       t        j                  |j                   d         }
|j                  D ]  }|
||k(  xx   ||   z  cc<    t        di |j                  |||
      }t        |j                  |	j                  d	
        |ddd d f   }t        j                  dd }t	        |      }t        D ]p  }t        |d|       }t        dddi|}t        dd|i|}	|j                  ||       |	j                  ||       t#        |j                  |	j                  d       r y )N-   r2   r4     )ra   rl   r   r;  r  rf   rq  rn   r   r  rU   r   r%  r   r   )r#   r   r   r   r  r>  rt  rs  r   rA   r=   rC   r   ru   r>   rF   r@   r   )r   rS   X_irisrI   rJ   r  ra   r2  clf1rj  r  r\  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AA4==!Q&&&

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

DJJT: G  	r#vqyABsA8;VdAST!DzDVD!K/@KFKAA!$**djj!D rR   c                     t        dd|       \  }}t        dd|       }|j                  ||       t        j                  d      }t        |j                  |      t        j                  d             y )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    sg     0BDAq K>PC GGAqM 	As{{1~rxx{3rR   c                  r    t        d      } | j                  t        t               | j                  dk(  sJ y )NFrX   r   )r   rA   rI   rZ   rt   r   s    rP   "test_logreg_intercept_scaling_zeror  2  s-     5
1CGGArN>>S   rR   c                    t         j                  j                  |       }d}t        |d|       \  }}|j	                  |df      }t        j
                  |df      }t        j                  |||fd	      }t        dd
ddd|       }t        dddi|}	|	j                  ||       t        dddi|}
|
j                  ||       t        |
j                  |	j                  d        ||      }t        dddi|}|j                  ||       t        |j                  |	j                         t        dddi|}|j                  ||       t        |j                  |
j                         y )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   rs  r   rA   r   ru   )r   rS   r   rK   rI   rJ   X_noise
X_constantr2  lr_liblinearlr_sagaX_splr_liblinear_sp
lr_saga_sps                 rP   test_logreg_l1r  <  sa    ))

 2
3CI9KDAq jjy!nj-G	1~.J
7J/a8A
'F &C[CFCLQ 99&9GKK1GMM<#5#5C@ D(FFvFOa O))<+=+=>#<6<V<JNN4J$$gmm4rR   c           	         t        dd|       \  }}t        d| dd      }t        ddg|fd	d
dd|}|j                  ||       t	        dd|d|}|j                  ||       t        |j                  |j                         y )NrU   r   r  r6   r  r  )ra   r   rl   rk   rh   Tr   F)r   r   r  r   r   rW   r~   r   )r   rs  r   rA   r   r   ru   )r   r~   rI   rJ   common_paramsr   r   s          rP   !test_logistic_regression_cv_refitr  e  s     "3EDAq '	M ! 5+# E 
IIaO		FcH	F	FBFF1aLEKK*rR   c                    t        dd| dd      \  }}t               }|j                  ||       t        ||j	                  |            }t        t                     }|j                  ||       t        ||j	                  |            }||kD  sJ t        ||j	                  |            }t        ||j                  |            }||kD  sJ y )Nr^   r   rf   )rK   r   r   rM   r&  )r   r   rA   r   rD   r    _predict_proba_lr)r   rI   rJ   rX  clf_multi_lossrW  clf_ovr_lossclf_wrong_losss           rP   %test_logreg_predict_proba_multinomialr    s    'DAq #$IMM!Qa!8!8!;<N!"4"67GKK1Aw44Q78L.((( a!8!8!;<Na!<!<Q!?@N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                 x   t         j                  t         j                  j                         }}d||dk(  <   |dk(  r|dkD  rt	        j
                  d       t        |d| |      }t	        j                  t        |      5  |j                  ||       d d d        |j                  d   |k(  sJ y # 1 sw Y   xY w)	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$++**,uAE%1*""x!|EF	'	
B 
(	8
q% 
9 ::a=H$$$ 
9	8s    B00B9c           
      :   t         j                  t         j                  }}| dk(  rt        |      }t	        j
                  |      j                  d   }|dk(  sJ |j                         }d||dk(  <   d}d}d}t        dd| d	
      }	|	j                  ||       |	j                  j                  dk(  sJ t        d| |d|d	|d      }
|
j                  ||       |r|
j                  j                  d|||fk(  s J |
j                  j                  |||fk(  sJ | dv ry |	j                  ||       |	j                  j                  dk(  sJ |
j                  ||       |r |
j                  j                  d|||fk(  sJ y |
j                  j                  |||fk(  sJ y )Nr1   r   rf   r9   rg   r8   rJ  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    99dkkqA!H		!""1%I>> FFHEE%1*DIK V"
MCGGAu;;$$$!3	F JJq%~~##9dK'HHHH~~##	;'EEEE  GGAqM;;$$$
JJq!~~##9dK'HHHH~~##	;'EEEErR   r2   r*  )TFc                    t         j                  t         j                  }}t        d||| |      }t	        t
              5  |j                  ||       |j                  }d|_        |j                  ||       d d d        t        j                  t        j                  |j                  z
              }d| d|d|}	|rd|kD  sJ |	       y |dkD  sJ |	       y # 1 sw Y   exY w)	Nrq  )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     99dkkqA
'#C 
"4	511 
6 vvbffVcii/01H
*6(
0ZM	3  X~"s"~#~"s"~ 
6	5s   8CC&r3   rW   c                    t         j                  t         j                  }}t        | d||      }t	        t
              5  |j                  ||       ddd       t        | dd||      }t	        t
              5  |j                  ||       |j                  ||       ddd       t        |j                  |j                         |r!t        |j                  |j                         yy# 1 sw Y   xY w# 1 sw Y   YxY w)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  rj  s          rP   test_warm_start_newton_solverr  !  s    
 99dkkqA#
	D 
"4	5A 
6 #
D 
"4	5AA 
6 DJJ

+9  
6	5 
6	5s    C,;%C8,C58Dc                 j   t               }|j                  |j                  }}t        j                  |gdz        }t        j                  |gdz        }||dk     }||dk     dz  dz
  }t        dd|       \  }}	 ||      }||f||	ffD ]  \  }}|j                  d   }
t        j                  ddd      D ]w  }t        d	|
|z  z  |d
dd| d      }t        d	|
|z  z  |ddd| d      }|j                  ||       |j                  ||       t        |j                  |j                  d       y  y )Nrf   r8   r9   r   r   r  r   r7   rh   r6   rH  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  sO    ;D99dkkqA
sQwA
sQwAa1fIEa1fIMAE,2DHh X&H(H!561GGAJ	[[Q*E%U*+!#/D +U*+!"#/I HHQNMM!Q%djj)//1E1 + 7rR   c                    | dk(  rt         j                  nt         j                  }t        j                  t              j                  t         j                        }t        j                  t              j                  t         j                        }t        j                  t              j                  t         j                        }t        j                  t              j                  t         j                        } |t        t         j                        } |t        t         j                        }	d}
t        | d|
|      }t        |      }|j                  ||       |j                  j                  |k(  sJ t        |      }|j                  ||       |j                  j                  |k(  sJ t        |      }|j                  ||       |j                  j                  t         j                  k(  sJ t        |      }|j                  |	|       |j                  j                  t         j                  k(  sJ d|
z  }t        j                  dk(  rt        rd}t        |j                  |j                  j                  t         j                        |	       | d
v r|rd}t        |j                  |j                  |	       t        |j                  |j                  |	       y )Nr2   r   gMb@?r$  )ra   r   rk   rY   gQ@ntrJ  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_matchr2  o  s     &4"**J88A;bjj)D88B<rzz*D88A;bjj)D88B<rzz*D4K4KJ!#	H (OE	IIdD;;
*** ?L[$'##z111 (OE	IIdD;;

*** ?L[$'##rzz111 j D	ww$9 EKK!3!3BJJ!?dK ] EKK!3!3$?EKK!3!3$?rR   c                 "   t         j                  j                  |       }t        j                  |j	                  dd      ddgz   |j	                  dd      f      }t        j
                  dgdz  dgdz  z         }t        ddd|       }t        dd	d|       }t        ||j                  ||      j                  |            }t        d
      D ]  }|j                  ||        t        ||j                  |            }t        ||d       y )NrU   r9   r8   r7   r5   Fr   )ra   r*  rk   r   Tr   rm   rn   )r>   r   r   r   r   rr   r   r   rA   rD   rP  r   )	r   r   rI   rJ   lr_no_wslr_wslr_no_ws_lossr   
lr_ws_losss	            rP   test_warm_start_converge_LRr8    s     ))

 2
3C
		#q)QF2CIIc14EFGA
!sbTCZ'(A!D?QH 4>PE QQ 2 @ @ CDM1X		!Q !U0034JM:D9rR   c           	      r   t        |       \  }}d}t               }dD ]@  }t        ||d| dd      }|j                  ||       |j	                  |j
                         B |\  }}}	t        j                  ||dd	      rJ t        j                  ||	dd	      rJ t        j                  |	|dd	      rJ y )
Nr   r  )r   r8   r   r6   r   rH  )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_coeffsr@    s     ,>?DAqAVF+
 	q!bhh   06,	9 {{-yqtLLL{{-yqtLLL{{9iadCCCCrR   z1ignore:.*'penalty' was deprecated.*:FutureWarning)r   r  r8   r^   rU   r       .Azpenalty, l1_ratio)l1r8   )r(  r   c                     t        |       \  }}t        d||d| d      }t        ||d| d      }|j                  ||       |j                  ||       t        |j                  |j                         y )Nr   r   r6   rJ  )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_equivalencerF    sz     ,>?DAq 
'G %1V:LRVK KK1OOAqgmm[->->?rR   )r   r8   rU   rA  c                    t        dd      \  }}t        ||d      \  }}}}dt        j                  ddd      i}t	        d| ddd	
      }t        ||d      }	t	        d| ddd	
      }
t	        d| ddd	
      }|	|
|fD ]  }|j                  ||        |	j                  ||      |
j                  ||      k\  sJ |	j                  ||      |j                  ||      k\  sJ y )NrH  r   r   r~   r8   r   r   r6   rJ  )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_l2rR    s   
 s3DAq'711'M$GVWfbkk!Q23J!
H 
h
$	7BaQDF  aQDF FF#! $ 88FF#v||FF'CCCC88FF#v||FF'CCCCrR   rd   rg   )r  r   ?c           	      
    t        ddddddd      \  t              t         ddd	      }t        ddd d
      }|j                         |j                          fd} ||       ||      k  sJ y )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                    | j                   j                         }t        | j                              z  }|t	        j
                  t	        j                  |            z  z  }|dz
  dz  t	        j                  ||      z  z  }|S )Nrh   r   )ru   r   r   rD   r>   rE   r  r   )r   r  objrW   rI   r~   rJ   s      rP   enet_objectivezEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objectiveC  sw    xx~~(1b..q122x"&&...h#%tT(:::
rR   )r   r#   r   rA   )rW   r~   rD  lr_l2rX  rI   rJ   s   ``   @@rP   -test_LogisticRegression_elastic_net_objectiverZ  #  s     DAq 	aA 
G 6QeE KK1	IIaO '"^E%::::rR   )r9   rf   c           
         t        d| dd      \  }}t        d      }t        j                  ddd      }t        j                  ddd      }t        ||d	|dd
dd      }|j                  ||       ||d}t        d	dd
      }t        |||d      }	|	j                  ||       |	j                  d   |j                  k(  sJ |	j                  d   |j                  k(  sJ y )NrU   rf   r   )rK   rM   r&  r   r   r8   rc   rg   r6   rJ  r   F)r   r   ra   r   r   rk   r   r   r  )ra   r   rk   r   r   r~   rW   )r   r   r>   rH  r   r   rA   r   r   best_params_r   r   )
rM   rI   rJ   r   r   r   lrcvrM  r   rO  s
             rP   2test_LogisticRegressionCV_GridSearchCV_elastic_netr_  N  s    
 	DAq 
	BAq!$I	RA	B#	D 	HHQNy1J	
B
 
b*^	DBFF1aL??:&$..888??3477***rR   r  c           
         d}t        d|||d      \  }}t        j                  ddd      }t        || ddd	d
dd      }|j	                  ||       |dk(  rdn|}|j
                  j                  |fk(  sJ |j                  j                  |fk(  sJ |j                  j                  ||fk(  sJ t        |j
                  |j
                  d          t        |       dkD  r$t        |j                  |j                  d          y y )Nr   rn  r   rK   rM   r&  r   r   rc   rg   rf   r6   rJ  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   r^  s          rP   "test_LogisticRegressionCV_no_refitrb  x  s   
 JDAq 
RA	B"	D 	HHQN!^I77==YL(((>>I<///::	:6666DGGTWWQZ(
9~q(9: rR   c           
      `   d}t        d| | |d      \  }}t        j                  ddd      }t        j                  ddd	      }d	}t	        ||d
|dddd      }|j                  ||       t        j                  t        |j                  j                                     }| d	k(  rdn| } |j                  | ||j                  |j                  |dz   fk(  sJ t        j                  t        |j                  j                                     }	|	j                  | ||j                  |j                  fk(  sJ |j                  j                  d||j                  |j                  fk(  sJ t        |j                  |j                  d          t        |j                   |j                   d          y )Nr   rn  r   ra  rc   rg   rf   r8   r9   r6   rJ  r   T)r   r   ra   r   r   rk   r   r   )r   r>   r   rH  r   rA   r   r   r   r   r@   r  r   r  r   r   r   )
rM   r   rI   rJ   r   r   r^  r^  r  r  s
             rP   5test_LogisticRegressionCV_elasticnet_attribute_shapesrd    s   
 JDAq 
RA	BAq!$IG"	D 	HHQN**T$"3"3":":"<=>K!^I
Q!    ZZT\\00234F<<IwHHHH<<!Wbggy~~!FFFF DGGTWWQZ(DNNDNN1$56rR   c            	      V   t         j                  t         j                  }} t        dddd      j	                  | |      }t        d      }t        |j                  | |            }ddgddgd	d
gfD ]  \  }}||   d   }t        |j                  |   dd      j	                  | |   ||         }t        j                  |      D ]`  }	t        |j                  |	   ||ddf   |j                  |	   d       t        |j                  |	   ||df   |j                  |	   d       b  y)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   rO  r   r   r>   r?   r   r   ru   rt   )
rI   rJ   r^  r   foldsidx_foldidx_Ctrain_fold_0r   cls
             rP   "test_LogisticRegressionCV_on_foldsrk    s9   99dkkqA "	
 
c!Qi 	 
	B!Q E FQFQF3%Xq)hhuo$
 #aoq
/	 	 ))A,B!!"%hss&:; !!"%hr&9:b!  4rR   c                      d} t        j                  t        |       5  t        ddd      j	                  t
        t               d d d        y # 1 sw Y   y xY w)NzQl1_ratio parameter is only used when penalty is 'elasticnet'\. Got \(penalty=l1\)r|   rB  r6   r   )r   ra   r~   )r   r   UserWarningr   rA   rI   rZ   )r   s    rP   test_l1_ratio_non_elasticnetrn    sA    	.  
k	-4EII!RP 
.	-	-s   'AAc           
      *   d}t        |ddddd|       \  }}t        |      }t        d|| dd dd	|z  |z  d
      }t        || ddd|d      }|j	                  ||       |j	                  ||       t        |j                  |j                  d       y )NrH  r9   r   r   rU  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_sgdrr     s     I'DAq 	aA
'Ag	!	C '
C GGAqMGGAqMCIIsyyt4rR   c            	         t        ddddddd      \  } }g d}t        | |t        j                  |      d|d	d
      \  }}}t	        j
                  t              5  t        |d   |d   d       d d d        t	        j
                  t              5  t        |d   |d   d       d d d        t	        j
                  t              5  t        |d   |d   d       d d d        y # 1 sw Y   vxY w# 1 sw Y   LxY w# 1 sw Y   y xY w)Nrn  rf   r9   r   r8   rK   rM   r&  r  n_clusters_per_classr   r   )rm   r8   r  rB  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_multinomialrv  *  s     DAq 
B+				!KE1a 
~	&!%(E!Ha@ 
'	~	&!%(E!Ha@ 
'	~	&!%(E!Ha@ 
'	&	 
'	&	&	&	&	&s$   C&C2C>&C/2C;>Dc            	      >   t        ddddddd      \  } }t        j                  |      }t        j                  d      }t	        | |||d       d	t        j                  t        |j                               d
}t        j                  t        |      5  t	        | |||dd       d d d        t        ddddddd      \  } }t        j                  |      }t        j                  d      }t	        | |||d       t        j                  d      }t	        | |||d       d	t        j                  t        |j                               d}t        j                  t        |      5  t	        | |||dd       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrn  rf   r9   r   r8   rt  )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   DAq iilG 776?D		 ,BIIc$**o,F+G	   
z	-!q'1E	
 
.
 DAq iilG
 771:D		 776?D		 ,BIIc$**o,F+G)	*  
z	-!q'1E	
 
.	-S 
.	-R 
.	-s   F,FFFc                    t        dd|       \  }}d}t        d |d      }t        j                  t        |      5  |j                  ||       d d d        t        d |d| 	      }t        d
t        j                  |d|       }|j                  ||      j                  |      }|j                  ||      j                  |      }	t        ||	       y # 1 sw Y   xY w)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   rm  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DAq 3C	D1	=B	k	-
q! 
. !Vc@RG %
&&'K Aq!))!,IOOAq)11!4My-0 
.	-s   CCc                 2   t        ddd      \  }}t        t        j                  |       }t	        j
                         5  t	        j                  d       t	        j                  dt               |j                  ||       d	d	d	       y	# 1 sw Y   y	xY w)
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    sj     !"MDAq	bffV	4B		 	 	"g&3EF
q! 
#	"	"s   ABBr2  r   r   )r~   r   rk   rl   r  c                    t        j                  ddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddggt        j                  d            }t        j                  g dt        j                  d            }t        j                  ||g      }t        j                  |d|z
  g      }t        j
                  t        |      dz  	      }d
|t        |      d  t        ||||       \  }}}t        d|       } |j                  di | t        |      j                  ||      }t        |      j                  |||      }	dD ]2  }
 t        ||
      |      } t        |	|
      |      }t        ||       4 y )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   r2  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 
Aq6	B	Aq1u:	BGG#a&1*-MM#a&(#
B,>BM "CUVHH!&!(O''1-MHo))"b)NOC8'-8;<GOV<Q?):; DrR   c                     t        dd      \  } }t        d      }ddg}g d}t        |||d	dd
ddd	      }|j                  | |       |j                  d   j                  d      }t        |      D ]h  \  }}t        |      D ]U  \  }	}
t        ||
d	dd
d      }t        || ||d      j                         }|||	f   t        j                  |d      k(  rUJ  j y )Nr   r   r   r   rK  r  rS  )r  r8   r^   r6      r   r   T)	r   r   r   ra   r   rl   rk   r   r   r8   r;   )rW   r~   ra   r   rl   rk   r\  )rel)r   r   r   rA   r   r   r   r   r   r   approx)rI   rJ   r   r   r   r^  avg_scores_lrcvr   rW   jr~   r   avg_score_lrs                rP   'test_scores_attribute_layout_elasticnetr    s    A>DAq	!	$Bc
I	B"
D 	HHQNll1o***2O"1$Y/KAx#!B +AqRdf  #1a4(FMM,D,QQQQ 0 rR   )r1   r3   r4   c                    t         j                  t         j                     }t        t	        t         j
                        | |      }t        t         j
                        }|j                  ||       t        |j                  j                  d      dd       |r7|j                  j                  d      t        j                  dd      k(  sJ yy)	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GGHf CIIMMqM)159~~!!q!)V]]1%-HHHH rR   rh   r  c                     t        d      \  }}t        |      }t        j                  |      }d|d |dz   |j	                         }t        | d      }|j                  |||       t        ||       y )NT
return_X_yr9   rn  )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	  sq    %DAqQJ

AA
avvxH
!C GGAqG"Ha rR   c           	          |t        j                  ddd            }dD ](  }t        ||t        ||      j	                  d             * t
        j                  j                  d      }|j                  d|j                  d   	      }| d
v rCd}t        j                  t        |      5  t        |       j                  ||       d d d        y t        |       j                  ||       y # 1 sw Y   y xY w)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%4D)009: &
))


#CAAGGAJ'A--@]]:S1f-11!Q7 21 	&)--a3 21s   ,C//C8c                     t        j                  ddg      j                  dd      } t        j                  ddg      }d}t        j                  t
        |      5  t        d      j                  | |       d d d        y # 1 sw Y   y xY w)	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   rR  r   r   r   r   rA   )rI   rJ   r   s      rP    test_liblinear_with_large_valuesr  {	  sp    
 	!U$$R+A
!QA	) 
 
z	-+.221a8 
.	-	-s   BBc                      t        j                  g dg      j                  } t        j                  g d      }| j                  d   dk(  sJ t	        dd      j                  | |       y )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  	  sV     	>?@BBA
)*A771:??k>BB1aHrR   c           	         t         j                  j                         }t         j                  j                         }||dk7     }||dk7     }t	               j                  |      }t        ||d      dz  }t        d|dddd	| 
      }t        j                         5  t        j                  dt               |j                  ||       d d d        y # 1 sw Y   y xY w)Nr9   rq  )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AE"_4A

!'C 
	 	 	"g'9: 
#	"	"s   -CCre  c                 n   t         j                  j                  |       }t        d|      \  }}t        d|      \  }}t        j                  t        |            }d|dt        |      dz   d|i}t        d      j                  d      }t        |d	d
      }	 |	j                  ||fi | t        d      j                  d
      }
t        |
d	d
      } |j                  ||fi | t        j                  |	j                  d   |j                  d         rJ d}t        j                  t        t        j                   |            5   |	j"                  ||fi | ddd       |	j#                  ||      } |j"                  ||fi |}t        j                  ||      rJ y# 1 sw Y   HxY w)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   	TypeErrorrx  ry  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  	  s    ))

 2
3CC@DAq"TDHCGGCFOM#$M-CFaK }-F$66U6KG!'tSWXFFJJq!v$66T6JG!'tSWXFFJJq!v{{6>>!,fnnQ.?@@@	/  
y		'(:	;S#(( 
<ll3$Gfll3.v.G{{7G,,,, 
<	;s   F++F4c                     t         j                  j                  d      } t        d|       \  }}t        d|       \  }}t        j                  t        |            }d|dt        |      dz   d|i}t        d      5  t        d      }t        |d	      } |j                  ||fi |  |j                  ||fi |}	ddd       t        d
      5  t        d      }
|
j                  d
       t        |
d	      } |j                  ||fi |  |j                  ||fi |}ddd       t        j                  d   j                  d          t        	       y# 1 sw Y   xY w# 1 sw Y   HxY w)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  Fre  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  	  s^   
 ))


#C#>DAq"RcBHCGGCFOM#$M-CFaK }-F		6Z(%"'
 	

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

1a"6"&,,sC262 
6 FNN1%v~~a'89GW%) 
7	6 
6	5s   ?AE"AE."E+.E7c                    t        d      \  }}|dk(  }t        t              5  t        | d      j	                  ||      }d d d        | dvrj
                  dk(  sJ | dk7  rt        j                  t        j                  |j                               t        |j                  |      t        j                  |j                  d   |j                  	             t        |j                  |      t        j                  |j                  d   dfd
	             j                  ||      dk  sJ y # 1 sw Y   xY w)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    %DAq	QA	"4	5 ;??1E 
6_${{a		2==#;<!!!$GG!''!*@	
 	a GG1771:q/c:	
 99Q?S   # 
6	5s   D66D?c                     t        dd      \  } }t        dd      }d}t        d      5  d	d
i}t        j                  t
        |      5   |j                  | |fi | ddd       t        j                  t
        |      5   |j                  | |fi | ddd       ddd       y# 1 sw Y   JxY w# 1 sw Y   xY w# 1 sw Y   yxY w)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=Truere  extra_paramrh   r|   N)r   r   r	   r   r   r   rA   r  )rI   rJ   r   r   r2  s        rP   5test_passing_params_without_enabling_metadata_routingr  
  s     !<DAq #E >C		6%]]:S1EIIa%f% 2 ]]:S1EKK1'' 2 
7	6 21 21 
7	6s;    CB*!#CB6C*B3	/C6B?	;CCc                     t        ddd      \  } }d}t        d|      }t        j                         5  t        j                  d       |j                  | |       |j                  d	   }d d d        d
k\  sJ t        d|      }t        t              5  |j                  | |       |j                  d	   }d d d        |k(  sJ t        d||d
z
        }t        t              5  t        j                  t        d      5  |j                  | |       |j                  d	   }d d d        d d d        |j                  d
z
  k(  sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   BxY w)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  %
  s[    LDAqA "A6H		 	 	"g&Q''* 
#
 1 &71=E	-	0		!QMM!$	 
1 $$$ ' Aq0@M 
-	0\\,4NOa# - 5 5a 8 P 
1
  6 6 ::::9 
#	" 
1	0 PO 
1	0s;   7E"E*E1"E%(E1EE"%E.	*E11E:	Estimatorc                     d}t        j                  t        |      5   | d      j                  t        j
                  t        j                         ddd       y# 1 sw Y   yxY w)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   6AA&z7ignore:.*default.*use_legacy_attributes.*:FutureWarningestc                     t        ddd      \  }} | d      }d}t        j                  t        |      5  |j	                  ||       d	d	d	       y	# 1 sw Y   y	xY w)
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
  sL    
 bJDAq	T	B
$C	m3	/
q! 
0	/	/s   AAc                      t        ddd      \  } }t        d      }d}t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)	Nrf   r   r%  r  r   rG  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
  sP    bJDAq	
B MC	m3	/
q! 
0	/	/   AA z3ignore:l1_ratios parameter is only us.*:UserWarningc                     t        ddd      \  } }t        d      }d}t        j                  t        |      5  |j                  | |       ddd       t        d	
      }d}t        j                  t        |      5  |j                  | |       ddd       t        dd	      }d}t        j                  t        |      5  |j                  | |       ddd       y# 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   yxY w)z=Check that l1_ratio=None in LogisticRegression is deprecated.r9   r   r%  r  N)r~   z'l1_ratio=None' was deprecatedr|   r   rG  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JDAq	T	*B
*C	m3	/
q! 
0 

B 8C	m3	/
q! 
0 

B ,C	m3	/
q! 
0	/ 
0	/ 
0	/ 
0	/s#   C ?C,C8 C),C58Dc                      t        ddd      \  } }t        d      }d}t        j                  t        |      5  |j                  | |       d d d        y # 1 sw Y   y xY w)	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  
  sJ    bJDAq	1	%B
"C	m3	/
q! 
0	/	/r  binary	use_str_yuse_sample_weight)Nr  rs  z(array_namespace, device_name, dtype_namec           	      

   t        |||      \  }}t        j                  j                  |d      }	|	j                  \  }
}|j                  |	|      }|r| rUt        j                  dkD  j                  t        j                        }t        j                  ddg      |   }|dk(  r2dd	d
}n,t        j                  t        j                     }|dk(  rddd	d}|j                         }t        j
                  |d      }n|| r;t        j                  dkD  j                  t        j                        }|dk(  r!dd	d}nt        j                  }|dk(  rddd	d}|j                  |      }|j                  ||      }|rQt        j                  j                  d      j                  dd|
      j                  dd       j                  |      }nd }t!        dddd|      }t#        j$                         5  t'        d#i |j)                  |	||      }|j*                  |j,                  k  sJ 	 d d d        t        j.                  j0                        j3                         dkD  sJ |j5                  |	      }|j7                  |	      }|j9                  |	      }t;        |      dz  }|dk(  rdnd}t=        d      5  t#        j$                         5  t#        j>                  dt@               t'        d#i |j)                  |||      }d d d        j*                  j                  |j*                  j                  k(  sJ tC        |j*                  d         |j,                  k  sJ dD ]m  }tE        ||      }tE        ||      }tG        tI        |t        d !      |||"       |jJ                  |jJ                  k(  sJ tM        |      tM        |      k(  rmJ  |j5                  |      }tG        tI        |t        d !      |||"       |jJ                  |jJ                  k(  sJ tM        |      tM        |      k(  sJ |j7                  |      }tG        tI        |t        d !      |||"       |jJ                  |jJ                  k(  sJ tM        |      tM        |      k(  sJ |j9                  |      }|stI        |t        d !      }tO        ||       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)$NTr  r*   r   setosa
not-setosars  rh   g      @)r  r  r  )	virginicar  
versicolorr   rD  r7   r   r  rJ  r1   r  rH  )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  cliprs  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
  
  s   $ &o{JOJB99JT2D::LIq::d6:*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VZ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j 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   69S S98S,CS9C<S9S),S6	1S99Tzignore:'penalty' was deprecated)rB  r   )r(  rh   c                     t        d      \  }}t        d| |      }d|  d| }t        j                  t        |      5  |j                  ||       ddd       y# 1 sw Y   yxY w)	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   rm  rA   )r   r~   rI   rJ   r   r   s         rP   $test_lr_penalty_l1ratio_incompatibler    sY     ,DAq	67X	NB)'/(
LC	k	-
q! 
.	-	-s   AA&c                      t        d      \  } }t        dg      }d}t        j                  t        |      5  |j                  | |       ddd       y# 1 sw Y   yxY w)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  (  sJ     ,DAq		,B
DC	m3	/
q! 
0	/	/s   AAc                  j    t               } | j                         j                  j                  dk(  sJ y)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                    t        |||      \  }}t        j                  j                  |d      }| r#t        j                  dkD  j                  |      }nt        j                  j                  |      }|j                  ||      }|j                  ||      }	t        d      5  t        dddd	      }
|
j                  ||	       |
j                  |       |
j                  ||	       d
d
d
       y
# 1 sw Y   y
xY w)zTest that warm_start=True works with array API inputs across
    multiple fit calls for both binary and multiclass classification.Tr  r   r*   r  rJ  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{{!!*-::d7:+D::d7:+D	4	0$wQUV
tT


4
tT	 
1	0	0s   (AC66C?)r   r9   r   c                    t        dd      \  }}t               }t        d|       j                  |      }|j	                  ||       |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d	      dt        |j                  d      z   dz   k(  sJ |j                  d
      dt        |j                  d      z   dz   k(  sJ y)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     !!<DAq		B	7X	>	L	LR	PBFF1aL>>'"a'''>>*%***>>-.!c"**a6H2H12LLLL>>+,C

A4F0F0JJJJrR   c                    t        ddd| d      \  }}t               }d|d}t        di |j                  |      j	                  ||      }|j
                  d   }|j                  D cg c]  }|d   dk(  rd|d	   j                  v r| }	}|j                  D cg c]  }|d   d
k(  rd|d	   j                  v r| }
}t        t        |	|
            D ]l  \  }\  }}|d	   j                  |k(  sJ |d	   j                  |k(  sJ |dkD  r|d   d   }t        di |d|ij	                  ||      }t        |j                  |j                         t        |j                  |j                         t        |j                  |      |j                  |             ||k  r|d   d   }t        di |d|dz   ij	                  ||      }t        |j                  |j                         t        |j                  |j                         t        |j                  |      |j                  |             c|d   d   mJ  yc c}w c c}w )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_estimatorr/  l  sb    DAq 
	B"]CI		(i	(	6	6r	:	>	>q!	DBZZ]F 99Cv;--&C	N<T<T2T 	   99Cv;++#i.:R:R0R 	   &/s;	/J%K!!J)$,,111	"**a///q5X&'9:C,EyE1EII!QOKCII{'8'89CNNK,B,BCCKKNK,?,?,BCv:8$%78C,IyI1q5IMMaQRSKCII{'8'89CNNK,B,BCCKKNK,?,?,BC H%&89AAA' &L
s   *"I"Ic                      t               } t        j                  t        d      5  t	        d      j                  |        ddd       y# 1 sw Y   yxY w)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   rm  r   r  )r   s    rP   1test_logistic_regression_callback_support_warningr1    sC     
	B	U
 	+.<<R@	
 
 
s   AA)ru  r$  rx  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  
pytestmarkrt  rI   rZ   r_   r   rQ   parametrizer\   r`   rw   r   r   r   r   r   r   r   r   thread_unsafer   r  r  r  r6  rB  rb  rl  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r-  r  r  r=  r>  r  r   r  r   r2  r8  r@  rF  rR  r   rZ  r_  rH  rb  rd  rk  rn  rr  rv  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/  r1  r   rR   rP   <module>rK     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 YRYYq!_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 kbkk"a34_5%; 6 5%;R f-&+ .&+R t[R[[Aq-A&BCf- ; . D ;F f--7 .-7`$P OPQ QQ kbkk"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   