
    {Kg;.                       d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	m
Z
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 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# d dl$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z: ejv                  jy                  d      Z= eed       Z eed       ZdZ>dd gd dgddggZ?g dZ@g dZA e       ZBd ZCejv                  j                  de:      d        ZEd ZFe6d         ZGejv                  j                  de:      d!        ZHejv                  jy                  d"      ejv                  j                  d# e eIeBj                        d$d%&       e eIeBj                        d'(       e eIeBj                        d)(       e eIeBj                        d*d+d%d,-       e eIeBj                        d.d+d%d,-       e eIeBj                        d/d%&      g      d0               ZKejv                  jy                  d"      ejv                  j                  d1eeg      d2               ZLejv                  j                  d1eeg      d3        ZMejv                  jy                  d"      ejv                  j                  d4g d5      d6               ZNejv                  jy                  d"      d7        ZOejv                  j                  d8e9      d9        ZPd: ZQd; ZRd< ZSd= ZTd> ZUd? ZVd@ ZWejv                  j                  dAdBdCgfdDdEdFgfdGdEdFgfdHdCgfdIdEdFgfg      dJ        ZXdK ZYejv                  j                  de:      dL        ZZejv                  jy                  d"      dM        Z[dN Z\dO Z]ejv                  j                  dPdQdRdSdQdRdTdUg      ejv                  j                  dVdPdWg      dX               Z^dY Z_dZ Z`ejv                  j                  dd[ ge:z         d\        Zad] Zbd^ Zcejv                  j                  de:      d_        Zdejv                  j                  de:      d`        Zeda Zfdb Zgejv                  j                  de:      dc        Zhejv                  j                  ddd,g      ejv                  j                  dedfdgg      dh               Zidi Zjejv                  jy                  d"      ejv                  j                  dj ej                  ddk            ejv                  j                  dld%dmg      ejv                  j                  dng do      dp                             Zlejv                  jy                  d"      ejv                  j                  d4e>      dq               Zmejv                  j                  d4 en eoe>       eod$d/g      z
              ejv                  j                  drds      ejv                  j                  dtds      du                      Zpejv                  j                  de:      dv        Zqejv                  jy                  d"      ejv                  j                  dld%dmg      ejv                  j                  d4g dw      ejv                  j                  dtdxdyg      ejv                  j                  de:      dz                                    Zrd{ Zsd| Ztejv                  j                  d}g d~      ejv                  j                  dddg      d               Zuejv                  j                  d}g d      d        Zvejv                  j                  d} ej                  ddd            ejv                  j                  dg d      d               Zxejv                  j                  dd      d        Zyejv                  jy                  d"      d        Zzejv                  jy                  d"      ejv                  j                  ded      ejv                  j                  dld      d                      Z{ejv                  jy                  d"      d        Z|d Z}ejv                  j                  d} ej                  ddd            ejv                  j                  dg d      d               Z~d Zejv                  jy                  d"      ejv                  j                  d ed d       ed dddd      gd       ejv                  j                  d4e>      d                      Zejv                  j                  d4 en eoe>       eod$g      z
              d        Zejv                  j                  ddfdxddddgdyddddgdxdddg      d        Zd Zejv                  j                  dtdxdyg      d        Zejv                  jy                  d"      ejv                  j                  dlg d      ejv                  j                  dVddddUdWg      d                      Zejv                  j                  d4e>      ejv                  j                  de:      d               Zd Zd Zejv                  j                  d      d        Zd Zejv                  j                  d4e>      d        Zd Zd Zy)    N)partial)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)sparse)config_context)clone)	load_irismake_classification)ConvergenceWarning)SGDClassifier)LogisticRegression)LogisticRegressionCV)_log_reg_scoring_path_logistic_regression_path)
get_scorerlog_loss)GridSearchCVStratifiedKFoldcross_val_scoretrain_test_split)OneVsRestClassifier)LabelEncoderStandardScalerscale)l1_min_c)compute_class_weightshuffle)ignore_warningsskip_if_no_parallel)	_IS_32BITCOO_CONTAINERSCSR_CONTAINERSz6error::sklearn.exceptions.ConvergenceWarning:sklearn.*random_state)lbfgs	liblinear	newton-cgnewton-choleskysagsaga   )r   r.   r.   )   r.   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   r.   axisN)lennpuniqueshapefitpredictr   classes_predict_probar   sumonesargmax)clfXy	n_samplesclasses	n_classes	predictedprobabilitiess           l/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictionsrG   <   s    AIiilGa I1%%a(Is||W-??yl***y!$%%a(M9i"8888m//Q/79KL}+++3Q7    csr_containerc                    t        t        d      t        t               t        t        d       | t              t               t        t        dd      t        t               t        t        dd       | t              t               t        t        dd      t        t               t        t        dd       | t              t               y )Nr   r%   d   )Cr&   Ffit_interceptr&   )rG   r   r?   Y1rI   s    rF   test_predict_2_classesrQ   N   s     (a8!R@(a8-:JBO(3Q?BG(3Q?qAQSUV(u1MqRTUQ?qAQSUrH   c                      G d d      }  |        }g d}d}t        |||      }t        d      \  }}|j                  ||       |j                  d   |d   k(  sJ |j                  |t        |      z  k(  sJ d|_        |j                  ||j                  |            }||j                  d   k(  sJ |j                  dk(  sJ y )	Nc                       e Zd Zd ZddZy)0test_logistic_cv_mock_scorer.<locals>.MockScorerc                 $    d| _         g d| _        y )Nr   )皙?g?皙?      ?)callsscores)selfs    rF   __init__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__`   s    DJ.DKrH   Nc                     | j                   | j                  t        | j                         z     }| xj                  dz  c_        |S )Nr.   )rZ   rY   r3   )r[   modelr?   r@   sample_weightscores         rF   __call__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__d   s4    KK

S-= =>EJJ!OJLrH   N)__name__
__module____qualname__r\   ra    rH   rF   
MockScorerrT   _   s    	/	rH   rg   )r.   r/         r/   )Csscoringcvr   r%   r.   )	r   r   r7   C_rY   r3   r`   r8   rZ   )rg   mock_scorerrj   rl   lrr?   r@   custom_scores           rF   test_logistic_cv_mock_scorerrq   ^   s      ,K	B	
B	[R	@BA.DAqFF1aL 558r!u SW,,, K88Arzz!}-L;--a0000!!!rH   c                  >   t         j                  j                  \  } }t         j                  t         j                     }t        dd      }d}t        j                  t        |      5  |j                  t         j                  |       d d d        y # 1 sw Y   y xY w)Nr(   r/   )solvern_jobsz\'n_jobs' > 1 does not have any effect when 'solver' is set to 'liblinear'. Got 'n_jobs' = 2.match)
irisdatar6   target_namestargetr   pytestwarnsUserWarningr7   )rA   
n_featuresrz   ro   warning_messages        rF   test_lr_liblinear_warningr      sl     IIOOIzt{{+F	;q	9B	 
 
k	9
tyy&! 
:	9	9s   )!BBc                     t        t        d      t        t               t        t        d       | t              t               y )N
   rL   )rG   r   r?   Y2rP   s    rF   test_predict_3_classesr      s+    (2.26(2.a0@"ErH   z5ignore:.*'multi_class' was deprecated.*:FutureWarningr>   r(   ovr)rL   rs   multi_classr'   )rL   rs   r)   r+   {Gz?*   )rL   rs   tolr   r&   r,   r*   c                    t         j                  j                  \  }}t         j                  t         j                     }| j
                  dk(  rXt        j                         5  t        j                  dt               | j                  t         j                  |       ddd       n | j                  t         j                  |       t        t        j                  |      | j                         | j                  t         j                        }t        j                   ||k(        dkD  sJ | j#                  t         j                        }t%        |j'                  d      t        j(                  |             t         j                  |j+                  d         }t        j                   ||k(        dkD  sJ y# 1 sw Y   xY w)zTest logistic regression with the iris dataset.

    Test that both multinomial and OvR solvers handle multiclass data correctly and
    give good accuracy score (>0.95) for the training data.
    r'   ignoreNffffff?r.   r1   )rw   rx   r6   ry   rz   rs   warningscatch_warningssimplefilterr   r7   r   r4   r5   r9   r8   meanr:   r   r;   r<   r=   )r>   rA   r~   rz   predrE   s         rF   test_predict_irisr      s<   8 !IIOOIzt{{+F
zzW$$&!!(,>?GGDIIv& '& 			6"ryy(#,,7;;tyy!D7746>"T)))%%dii0MM%%1%-rwwy/AB]11q19:D7746>"T))) '&s   ";F::GLRc                    t         j                  t         j                  }}dD ]H  }d| d} | |d      }t        j                  t
        |      5  |j                  ||       d d d        J dD ]H  }d|z  } | |d	d
      }t        j                  t
        |      5  |j                  ||       d d d        J dD ]H  }d|z  } | |dd
      }t        j                  t
        |      5  |j                  ||       d d d        J dD ]H  }d| d} | |d      }t        j                  t
        |      5  |j                  ||       d d d        J | t        u rCd} | d d      }t        j                  t
        |      5  |j                  ||       d d d        y y # 1 sw Y   xY w# 1 sw Y   Hx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r(   r*   zSolver z( does not support a multinomial backend.multinomial)rs   r   ru   )r'   r)   r*   r+   z/Solver %s supports only 'l2' or None penalties,l1r   )rs   penaltyr   )r'   r)   r*   r+   r,   z1Solver %s supports only dual=False, got dual=TrueT)rs   dualr   )r(   z;Only 'saga' solver supports elasticnet penalty, got solver=.
elasticnet)rs   r   z6penalty=None is not supported for the liblinear solverr(   r   rs   )rw   rx   rz   r{   raises
ValueErrorr7   r   )r   r?   r@   rs   msgro   s         rF   test_check_solver_optionr      s    99dkkqA 3xGHv=9]]:S1FF1aL 21 3 C?&Hvt?]]:S1FF1aL 21 C
 KAFJvDe<]]:S1FF1aL 21 K  KF8STUv|4]]:S1FF1aL 21   
F[1]]:S1FF1aL 21  5 21 21
 21 21 21s<   F!F.+F;8GG!F+	.F8	;G	G	Gc                      | dd      }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)Nr   r,   r   z.*l1_ratio.*ru   r.   r/   rh   ri   r   )r{   r   r   r7   r4   array)r   r^   s     rF   $test_elasticnet_l1_ratio_err_helpfulr      s[     |F3E	z	9		"((QFQF+,bhh1v.>? 
:	9	9s   AA00A9rs   r'   r)   r+   r,   c                    t         j                  dkD  j                  t        j                        }t        j
                  ddg      |   }t        | ddd      }|j                  t         j                  |       |j                  j                  dt         j                  j                  d   fk(  sJ |j                  j                  d	k(  sJ t        |j                  t         j                        |       t        | ddd
      }|j                  t         j                  |       |j                  t        j                  |j!                  t         j                        d         }t        j"                  ||k(        dkD  sJ y )Nr   setosaz
not-setosar   r     )rs   r   r&   max_iterr.   r.   F)rs   r   r&   rN   r1   ?)rw   rz   astyper4   intpr   r   r7   rx   coef_r6   
intercept_r   r8   r9   r=   predict_log_probar   )rs   rz   r>   mlrr   s        rF   test_multinomial_binaryr      s!    kkAo%%bgg.FXXx./7F
=rDC GGDIIv99??q$))//!"45555>>4'''s{{499-v6
=rQVC GGDIIv<<		#"7"7		"BKLD7746>"S(((rH   c                 t   t        |       \  }}t        ddd|       }|j                  ||       |j                  |      }|j	                  |      }t        j                  |      t        j                  |      t        j                  |       z   z  }t
        j                  d|z
  |f   }t        ||       y )Nr%   r   r,   MbP?)r   rs   r   r&   r.   )	r   r   r7   decision_functionr:   r4   expc_r   )global_random_seedr?   r@   r>   decisionprobaexpected_proba_class_1expected_probas           rF   %test_multinomial_binary_probabilitiesr     s     ,>?DAq
!'	C GGAqM$$Q'Ha EVVH-1ABFFH9DU1UVUU1557MMNN~.rH   coo_containerc                 L   t         j                  j                  \  }}t         j                  t         j                     }t        t         j                        }t        d      j                  ||      }|j                  |      }|j                          t        j                  |j                        sJ |j                  |      } | |      }|j                  |      }	|j                          |j                  |      }
t        ||       t        ||	       t        ||
       y Nr   r%   )rw   rx   r6   ry   rz   r   r   r7   r   sparsifyr   issparser   densifyr   )r   rA   r~   rz   r?   r>   pred_d_dpred_s_dsp_datapred_s_spred_d_ss              rF   test_sparsifyr   -  s     !IIOOIzt{{+FdiiA
!
,
0
0F
;C$$Q'HLLN??399%%%$$Q'HAG$$W-HKKM$$W-Hh1h1h1rH   c                     t         j                  j                  d      } | j                  d      }t        j                  |j
                  d         }d|d<   t        d      }|d d }t        j                  t              5  |j                  t        |       d d d        t        j                  t              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   r%   r-   )rh      )r4   randomRandomStaterandom_sampler<   r6   r   r{   r   r   r7   r?   r8   )rngX_y_r>   y_wrongs        rF   test_inconsistent_inputr   F  s    
))


"C			7	#B	!	BBqE
!
,C "gG	z	"7 
# 
z	"B 1 1' :; 
#	"	 
#	" 
#	"s   C4:1D 4C= D	c                      t        d      } | j                  t        t               d| j                  d d  d| j
                  d d  t        | j                  t              d       y r   )r   r7   r?   rO   r   r   r   r   r>   s    rF   test_write_parametersr   Z  sI    
!
,CGGArNCIIaLCNN1c33A6:rH   c                     t        j                  t        t         j                        } t         j                  | d<   t        d      }t        j                  t              5  |j                  | t               d d d        y # 1 sw Y   y xY w)Ndtyper   r.   r   r%   )r4   r   r?   float64nanr   r{   r   r   r7   rO   )Xnanlogistics     rF   test_nanr   c  sU     88ARZZ(DDJ!q1H	z	"T2 
#	"	"s   "BBc                  V   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   }t        j
                  ddd      }t        }dD ]  }  |t              |||d	d
|dd      \  }}}t        |      D ]W  \  }}	t        |	d	d
|dd      }
|
j                  ||       |
j                  j                         }t        |||   dd|z         Y  dD ]  }dg}  |t              |||d|dd      \  }}}t        |d   ddd|      }
|
j                  ||       t        j                  |
j                  j                         |
j                  g      }t        ||d   dd|z          y )Nr   rK   r/   r.   r-   ri   r   r+   r,   Fh㈵>  )rj   rN   r   rs   r   r&   )rL   rN   r   rs   r&   r   zwith solver = %s)decimalerr_msg)r'   r)   r*   r(   r+   r,        @@ư>     @)rj   r   rs   intercept_scalingr&   )rL   r   r   r&   rs   )r4   r   r   concatenaterandnlogspacer    r   	enumerater   r7   r   ravelr   r   )r   r?   r@   rj   frs   coefs_irL   ro   lr_coefs               rF   test_consistency_pathr   n  s   
))


"C
		#q)QF2CIIc14EFGA	
c	RD3JA	Q2	BA "3q23	
r1 bMDAq##B FF1aLhhnn&G%q16H66Q " "6 XU3q23%
r1  e%
 	q!.."((.."2BMM!BC!U1Xq2Dv2M	
) XrH   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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   rK   r/   r.   r-   r           )rj   r   r   r&   verboselbfgs failed to convergez!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r4   r   r   r   r   r{   r|   r   r   r3   messageargs)r   r?   r@   rj   recordwarn_msgs         rF   .test_logistic_regression_path_convergence_failr     s   
))


"C
		#q)QF2CIIc14EFGA	
c	RD3JA
B
 
(	)V!qRS11a	
 
*
 v;!ay  %%a(H%111.(:::x'''2h>>> 
*	)s   C%%C.c                     t        dd      \  } }t        dddd      }|j                  | |       t        dddd      }|j                  | |       t        d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   r   rA   r&   Tr   r(   )r&   r   r   rs      z)Arrays are not almost equal to 6 decimalsru   )r   r   r7   r   r   r{   r   AssertionError)r?   r@   lr1lr2lr3r   s         rF    test_liblinear_dual_random_stater    s    !<DAq
	C GGAqM
	C GGAqM
	C GGAqM cii3
5C	~S	1!#))SYY7 
2	1	1s   1!CC$c                     d\  } }t         j                  j                  d      }|j                  | |      }t        j                  |j                  d|j                  |      z              }||j                         z  }||j                         z  }t        dgddd      }|j                  ||       t        ddd	      }|j                  ||       t        |j                  |j                         t        |j                  j                  d
|f       t        |j                  dd
g       t!        |j                        dk(  sJ t        j"                  t%        |j&                  j)                                     }t        |j                  d
dd
|f       t        |j*                  j                  d       t        j"                  t%        |j,                  j)                                     }t        |j                  d       y )N)2   r   r   r         ?Fr(   rh   )rj   rN   rs   rl   )rL   rN   rs   r.   r-   r/   r   )r.   rh   r.   )r4   r   r   r   signdotr   stdr   r7   r   r   r   r   r6   r9   r3   asarraylistcoefs_paths_valuesCs_scores_)	rA   r~   r   X_refr@   lr_cvro   coefs_pathsrZ   s	            rF   test_logistic_cvr    s   !Iz
))


"CIIi,E
		!cii
3345A	UZZ\E	UYY[E 5kaE 
IIeQ	c{	KBFF5!bhh4u{{((1j/:u~~Aw/u~~!###**T%"4"4";";"=>?K{((1aJ*?@uyy-ZZU]]11345Fv||Y/rH   zscoring, multiclass_agg_listaccuracy 	precision_macro	_weightedf1neg_log_lossrecallc                    t        dddd      \  }}t        j                  d      t        j                  dd      }}t        d      }|j	                         }d	D ]  }||=  |j                  ||   ||          |D ]J  }	t        | |	z         }
t        t        ||||fdg|
d d d d d
|ddiz  d   d    |
|||   ||                L y )NrK   r   rh      )rA   r&   rC   n_informativeP   r
  r   )rL   rt   
warm_start)rj   rk   	pos_classmax_squared_sumr_   score_paramsr   r   r/   )	r   r4   aranger   
get_paramsr7   r   r   r   )rk   multiclass_agg_listr?   r@   traintestro   paramskey	averagingscorers              rF   "test_logistic_cv_multinomial_scorer1    s   & A!DAq ))B-2s!34E	c	"B]]_F,3K -FF1U8QuX(	Gi/0!!	
 5 $"! ]M::   2qw$(	
 )rH   c                  B   d\  } }}t        | ||dd      \  }}t               j                  g d      j                  |      }t	        j
                  |      dz
  }t               }t        d      }t               }t        d      }	|j                  ||       |j                  ||       |j                  ||       |	j                  ||       t        |j                  |j                         t        |j                        g dk(  s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                  |                  g dk(  sJ t        dddd	      j                  ||      }	t        t	        j                  |	j                  |                  d
dgk(  sJ y )N)r	  r   rh   rh   r   )rA   r~   rC   r"  r&   )barbazfoor.   )rj   r/   )class_weightr3  r4  )r   r   r7   inverse_transformr4   r   r   r   r   r   sortedr9   r5   r8   )
rA   r~   rC   r  r@   y_strro   r  lr_str	lr_cv_strs
             rF   2test_multinomial_logistic_regression_string_inputsr<  0  s   '/$Iz9"HE1 N45GGJE
aA		B A&E!F$*IFF5!	IIeQ
JJueMM%bhh5&//"&;;;;ekk9??;&//"&;;;;)$$%)>>>> "))FNN51237LLLL"))I--e456:OOOO #!A0NOSSuI "))I--e4565%.HHHrH   c                 l   t        ddd      \  }}d||dk  <    | |      }t               }|j                  ||       t               }|j                  ||       t        |j                  |j                         t        |j
                  |j
                         |j                  |j                  k(  sJ y )Nr	  r   r   rA   r~   r&   r   r
  )r   r   r7   r   r   r   rm   )rI   r?   r@   csrr>   clfss         rF   test_logistic_cv_sparserA  Y  s    JDAqAa#gJ

C

 CGGAqM!DHHS!djj#))4doos~~>77cffrH   c                     t         j                  t         j                  }} | j                  \  }}d}t	        |      }t        |j                  | |            }t        |d      }|j                  | |       t        |d      }|j                         }	d|	|	dk(  <   |j                  | |	       t        |j                  d   |j                  d          t        |j                  dd  |j                         t        |j                  d   t        j                  d d f   |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 d
D ]h  }|dv rdnd}t        ||d|dv rdndd      }|dk(  rt-        |       } |j                  | |       |j/                  | |      }|j/                  | |      }||kD  sJ |j                  j                  |j                  j                  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(  riJ  y )Nr/   r   )rl   r   r.   r   rh   r   r.   r/   r   )r   r   r        r   r   r   )rs   r   r&   r   rl   r'   )rw   rx   rz   r6   r   r  splitr   r7   copyr   r  r   r   r4   newaxisr   r9   r  r  r  r  r   r`   )r+  rz   rA   r~   n_cvrl   precomputed_foldsr>   clf1target_copyr  rZ   rs   r   	clf_multimulti_score	ovr_scores                    rF   test_ovr_multinomial_irisrP  j  s    IIt{{6E!KKIz
 D		BRXXeV45 "3
GCGGE6  #4%HD++-K$%Kq !HHUK  CKKNDLLO4CNN12&8CIIaLQ/< 99??q*o---s||Y/**T#"2"2"9"9";<=KD"j1n ====77==E!!!ZZS[[//123F<<AtR=((( 8 O33(/1t
	 W%LEeV$ooeV4IIeV,	Y&&& yy)//"7"77779--y9jji&<&<&C&C&E!FG  Qb*q.$AAAA}}""e+++D!2!2!9!9!;<=||4},,,3 8rH   c            	      6   t        ddd      \  } }t        dd      }t        D ci c]   }|t        dd|i|j	                  | |      " }}t        j                  |d	
      D ]-  \  }}t        ||   j                  ||   j                  d       / yc c}w )z)Test solvers converge to the same result.r   r   r   )r~   r"  r&   Fr   rM   rs   r/   rrh   r   Nrf   )	r   dictSOLVERSr   r7   	itertoolscombinationsr   r   )r?   r@   r-  rs   
regressorssolver_1solver_2s          rF    test_logistic_regression_solversr\    s    "AANDAqB7F F 	";&;F;??1EE  
 (44Z1E(!x &&
8(<(B(BA	
 Fs   %Bc                     t        ddddd      \  } }d}t        d|d	      }d
d
d}t        t              t        ddg      z
  D ci c]1  }|t	        d||j                  |d      d|j                  | |      3 }}t        j                  |d      D ]:  \  }}t        ||   j                  ||   j                  |dk(  rdnd| d|        < yc c}w )zATest solvers converge to the same result for multiclass problems.r   r   rh   r   rA   r~   r"  rC   r&   :0yE>Fr   )rN   r   r&   '  r   r(   r*   rK   rs   r   r/   rR  r,   g{Gzt?r   z vs rtolr   Nrf   )r   rU  setrV  r   getr7   rW  rX  r   r   )	r?   r@   r   r-  solver_max_iterrs   rY  rZ  r[  s	            rF   +test_logistic_regression_solvers_multiclassrg    s   2QRDAq C3R@F %f5O 'lS+7H)I%JJ	 KF 	" 
O$7$7$D
HN

#a)	 K	   (44Z1E(x &&x &&!V+jXJ/		
 Fs   6CweightrV   g?r   rX   rC  r6  balancedc           	         t        |       }|dk(  r| }t        ddddd||      \  }}t        dd|d	      }t        dd
di|}t	        t
              5  |j                  ||       ddd       t        t              t        g d      z
  D ]b  }t        dd
|i|}	|dv r|	j                  dd|dz          |	j                  ||       t        |	j                  |j                  d| d       d y# 1 sw Y   xY w)z+Test class_weight for LogisticRegressionCV.rh  rE  rh   r   )rA   r~   
n_repeatedr"  n_redundantrC   r&   r.   Fr_  )rj   rN   r6  r   rs   r'   categoryN)r'   r(   r*   r   gC]r2<r`  )r   r   r&   r   z	 vs lbfgsrb  rf   )r3   r   rU  r   r    r   r7   rd  rV  
set_paramsr   r   )
rh  r6  r   rC   r?   r@   r-  	clf_lbfgsrs   r>   s
             rF   (test_logistic_regressioncv_class_weightsrq    s    FIx'DAq !	F %>G>v>I 
"4	5a 
6 g,%N!OO";&;F;_$NNE8JQ8N   	1IIyTfXY;O	
 P 
6	5s   C22C;c            
      n   t        ddddd      \  } }|dz   }t        t        fD ]  }dd	d
}|t        u r|j                  ddd       dD ]~  } |d#d|i|} |d#d|i|}|j	                  | |       |j	                  | |t        j                  |j                  d                t        |j                  |j                  d         |d#i |ddi}|j	                  | ||       t        t              t        dg      z
  D ]]  } |d#||dk(  rdndd|}	t               5  |	j	                  | ||       d d d        t        |j                  |	j                  d       _ dD ]b  } |d#|dddd|}
|
j	                  | |        |d#d|i|}|j	                  | ||       t        |
j                  |j                  d       d  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!      }|j	                  | |       t        dd	dd d"      }	|	j	                  | ||       t        |j                  |	j                  d       y # 1 sw Y   oxY w)$Nr   r   rh   r/   r   r^  r.   r   F)r&   rN   )rj   rl   )r'   r(   rs   r_   -C6?rc  r   r   r'   r+   绽|=rs   r   r   )rs   r6  r(   r   )rs   rN   r6  r   r   r&   )rs   rN   r   r   r&   ri   rT  l2T)rs   rN   r6  r   r   r&   )rs   rN   r   r   r&   rf   )r   r   r   updater7   r4   r<   r6   r   r   rd  rV  r    r   )r?   r@   r_   r   kwrs   clf_sw_noneclf_sw_onesclf_sw_lbfgsclf_sw	clf_cw_12	clf_sw_12clf_cws                rF   'test_logistic_regression_sample_weightsr  
  s   !qqDAq EM!#78 59%%IIQa() -F1F1b1K1F1b1KOOAq!OOAq
0CODK--{/@/@tL - )B)D)A];'lS'^3FTvFeO5TQSTF "

1a}
= #L..4H 4 -FJ&1|JrJIMM!Q/&/B/IMM!QmM<IOOY__4H -9 9J  q\F JJq!F JJq!]#fllFLL!Dq\F JJq!F JJq!]#fllFLL!Di #"s   (J**J4c                 v    t        j                  |       }t        d||       }t        t	        ||            }|S )Nri  )rB   r@   )r4   r5   r   rU  zip)r@   rB   r6  class_weight_dicts       rF    _compute_class_weight_dictionaryr  \  s5    iilG'
GqILS,78rH   c                     | S rb   rf   xs    rF   <lambda>r  d  s    QrH   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 ]o  }t        |d      }t        dddi|}t        dd|i|}|j                  ||       |j                  ||       t#        |j                  |j                  d       q y )N-   r(   r*   r   ra  r6  ri  rh   rt  ru  r   rs  rK   r!  rT  rf   )r   rw   rx   rz   r  rd  rV  rU  r   r7   r3   r9   r   r   r4   r<   r6   r   )rI   X_irisr?   r@   r  rs   r-  rK  clf2swcclf3s               rF   &test_logistic_regression_class_weightsr  d  s    499FrsAvAaABCA8;g,k3D%E!FFVd3!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;Vd3!DzDVD!K/@KFKAA!$**djj!D rH   c                     d\  } }}t        | |d|d      \  }}t        d      j                  |      }d}t        |d	      }t        |dd
      }|j	                  ||       |j	                  ||       |j
                  j                  ||fk(  sJ |j
                  j                  ||fk(  sJ dD ]  }t        |ddd      }t        |dddd      }	|j	                  ||       |	j	                  ||       |j
                  j                  ||fk(  sJ |	j
                  j                  ||fk(  sJ t        |j
                  |j
                  d       t        |j
                  |	j
                  d       t        |j                  |j                  d        dD ]h  }t        |dddg      }
|
j	                  ||       t        |
j
                  |j
                  d       t        |
j                  |j                  d       j y )N)r	  r   rh   r   r   r^  F)	with_meanr'   r   rw  )rs   rN   r   )r+   r,   r)   r   r   gHz>)rs   r&   r   r   )rs   r&   r   r   rN   r   ru  r   r   r
  )rs   r   r   rj   )
r   r   fit_transformr   r7   r   r6   r   r   r   )rA   r~   rC   r?   r@   rs   ref_iref_wclf_iclf_wclf_paths              rF   $test_logistic_regression_multinomialr    s    (1$Iz9DAq 	'55a8A Ff$7EfEtLE	IIaO	IIaO;;J 7777;;J 7777."	
 #
 			!Q		!Q{{  Y
$;;;;{{  Y
$;;;; 	U[[t<U[[t<((%*:*:F- /6 8'Ddu
 	Q$?++U-=-=DI 8rH   c                      t        ddd      \  } }t        dd      }|j                  | |       t        j                  d      } t        |j                  |       t        j                  d             y )Nr   r   r>  Fr(   )rN   rs   )r   r   )r   r   r7   r4   zerosr   r8   )r?   r@   r>   s      rF   %test_liblinear_decision_function_zeror    sY     qqIDAq
5
ECGGAqM 	As{{1~rxx{3rH   c                 n    t        ddd      \  }}t        d      }|j                   | |      |       y )Nr   r   r   r>  r(   rs   r   r   r7   rI   r?   r@   r>   s       rF   test_liblinear_logregcv_sparser    s3     JDAq
k
2CGGM!a rH   c                 p    t        ddd      \  }}t        dd      }|j                   | |      |       y )Nr   r   r   r>  r,   r   rw  r  r  s       rF   test_saga_sparser    s5     JDAq
f$
7CGGM!a rH   c                  r    t        d      } | j                  t        t               | j                  dk(  sJ y )NF)rN   r   )r   r7   r?   rO   r   r   s    rF   "test_logreg_intercept_scaling_zeror    s-     5
1CGGArN>>S   rH   c                  ~   t         j                  j                  d      } d}t        |dd      \  }}| j	                  |df      }t        j
                  |df	      }t        j                  |||fd
      }t        ddddd      }|j                  ||       t        dddddd      }|j                  ||       t        |j                  |j                         t        |j                  ddd f   t        j                  d             t        |j                  ddd f   t        j                  d             y )Nr   r	  r   r   r>  rh   sizer/   r6   r.   r1   r   r
  r(   Frv  r   rL   rs   rN   r   r,   r   r   rL   rs   rN   r   r   r   )r4   r   r   r   normalr<   r   r   r7   r   r   r  )r   rA   r?   r@   X_noise
X_constantlr_liblinearlr_sagas           rF   test_logreg_l1r    s    ))


#CIrPQRDAqjjy!nj-G	1~.J
7J/a8A%
L Q 
G KK1gmm\-?-?@ l00BC8"((1+FgmmArsF3RXXa[ArH   c                 B   t         j                  j                  d      }d}t        |dd      \  }}|j	                  d|df      }t        j
                  |d	f
      }t        j                  |||fd      }d||dk  <    | |      }t        ddddd      }|j                  ||       t        dddddd      }|j                  ||       t        |j                  |j                         t        |j                  ddd f   t        j
                  d             t        |j                  ddd f   t        j
                  d             t        dddddd      }	|	j                  |j                         |       t        |j                  |	j                         y )Nr   r	  r   r   r>  rV   rh   )r   r  r/   r  r.   r1   r   r
  r(   Frv  r  r,   r   r  r  r   )r4   r   r   r   r  r  r   r   r7   r   r   toarray)
rI   r   rA   r?   r@   r  r  r  r  lr_saga_denses
             rF   test_logreg_l1_sparse_datar    s   
 ))


#CIrPQRDAqjjs)Qj8GA/J
7J/a8AAa!eHaA%
L Q 
G KK1gmm\-?-?@ l00BC8"((1+FgmmArsF3RXXa[A '
M aiik1%gmm]-@-@ArH   random_seedr   r   rx  c                    t        dd|       \  }}t        d|| dd      }t        ddgd	d
|}|j                  ||       t	        dddi|}|j                  ||       t        |j                  |j                         y )NrK   r   r>  r,   r   -q=)rs   r   r&   r   r   r
  T)rj   refitrL   rf   )r   rU  r   r7   r   r   r   )r  r   r?   r@   common_paramsr  ro   s          rF   !test_logistic_regression_cv_refitr  F  s     +VDAq M !GSEGGE	IIaO		3c	3]	3BFF1aLekk2884rH   c                     t        ddddd      \  } }t        d      }|j                  | |       t        ||j	                  |             }t        t        d            }|j                  | |       t        ||j	                  |             }||kD  sJ t        ||j	                  |             }t        ||j                  |             }||kD  sJ y )Nr   r   r   rh   )rA   r~   r&   rC   r"  r'   r  )r   r   r7   r   r:   r   _predict_proba_lr)r?   r@   rM  clf_multi_lossclf_ovrclf_ovr_lossclf_wrong_losss          rF   %test_logreg_predict_proba_multinomialr  `  s    !qPRDAq #'2IMM!Qa!8!8!;<N!"4G"DEGKK1Aw44Q78L.((( a!8!8!;<Na!<!<Q!?@NN***rH   r   r   r   r   zsolver, message))r)   zAnewton-cg failed to converge.* Increase the number of iterations.)r(   z@Liblinear failed to converge, increase the number of iterations.)r+   ?The max_iter was reached which means the coef_ did not converge)r,   r  )r'   r   )r*   z6Newton solver did not converge after [0-9]* iterationsc                    t         j                  t         j                  j                         }}d||dk(  <   |dv r|dk(  rt	        j
                  d       |dk(  r| dkD  rt	        j
                  d       t        | d	|d|
      }t	        j                  t        |      5  |j                  ||       d d d        |j                  d   | k(  sJ y # 1 sw Y   xY w)Nr   r/   r   r   z?'multinomial' is not supported by liblinear and newton-choleskyr*   r.   z/solver newton-cholesky might converge very fastV瞯<)r   r   r   r&   rs   ru   )rw   rx   rz   rG  r{   skipr   r|   r   r7   n_iter_)r   r   rs   r   r?   y_binro   s          rF   test_max_iterr  w  s    , yy$++**,uAE%1*11k]6RUV""x!|EF	
B 
(	8
q% 
9 ::a=H$$$ 
9	8s   CCc                    t         j                  t         j                  }}| dk(  rt        |      }t	        j
                  |      j                  d   }|dk(  sJ |j                         }d||dk(  <   d}d}t        dd| d	      }|j                  ||       |j                  j                  d
k(  sJ t        d| ||d      }|j                  ||       |j                  j                  d||fk(  sJ |j                  d      j                  ||       |j                  j                  |fk(  sJ |j                  d      j                  ||       |j                  j                  |||fk(  sJ | dv ry |j                  d      j                  ||       |j                  j                  d
k(  sJ |j                  d      j                  ||       |j                  j                  d||fk(  sJ y )Nr'   r   rh   r/   ri   r   r
  r   )r   rL   rs   r&   r   )r   rs   rj   rl   r&   r.   r   r   r   r   )rw   rx   rz   r   r4   r5   r6   rG  r   r7   r  r   ro  )	rs   r?   r@   rC   r  n_Cs	n_cv_foldr>   clf_cvs	            rF   test_n_iterr    s    99dkkqA!H		!""1%I>> FFHEE%1*DI V"
MCGGAu;;$$$!DYRF JJq%>>Ay$#7777 NNuN%))!Q/;;,,,
%(,,Q2>>Iy$#???? 11 NN}N-11!Q7;;$$$
-044Q:>>Ay$#7777rH   r$  )TFrN   c                    t         j                  t         j                  }}t        d|| 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)
Nrt  r   )r   r$  rs   r&   rN   rm  r.   z Warm starting issue with solver zwith fit_intercept=z and warm_start=       @)rw   rx   rz   r   r    r   r7   r   r   r4   r;   abs)	rs   r$  rN   r?   r@   r>   coef_1cum_diffr   s	            rF   test_warm_startr    s     99dkkqA
#C 
"4	511 
6 vvbffVcii/01H
*6(
0ZM	3  X~"s"~#~"s"~ 
6	5s   8CC&c                 x   t               }|j                  |j                  }}t        j                  |gdz        }t        j                  |gdz        }||dk     }||dk     dz  dz
  }t        ddd      \  }} | |      }||f||ffD ]  \  }}dD ]  }|j                  d   }	t        j                  d	dd      D ]w  }
t        d
|	|
z  z  ddd|dd      }t        d
|	|
z  z  ddd|dd      }|j                  ||       |j                  ||       t        |j                  |j                  d       y   y )Nrh   r.   r/   r	  r   r   r>  )r   rx  r-   r
  r,      Fr   )rL   rs   r   rN   r   r&   r   r(   )r   rx   rz   r4   r   r   r6   r   r   r7   r   r   )rI   rw   r?   r@   X_binr  X_sparsey_sparser   rA   alphar,   r(   s                rF   test_saga_vs_liblinearr    sV   ;D99dkkqA
sQwA
sQwAa1fIEa1fIMAE,!Hh X&H(H!561#G
IRA.)Y./! "'#!" /Y./& "'#!"	 Aa#)$**iooqI1 / $ 7rH   )r(   r)   r*   r,   FTc                 &   | dv r|dk(  rt        j                  d|  d       | 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k(  r|rd}t#        |j                  |j                  |       t#        |j                  |j                  |       y )Nr   r   zSolver=z' does not support multinomial logistic.r(   r   gMb@?r   )rs   r   r&   r   rN   gQ@ntr   atolr,   rV   )r{   r  r4   r   float32r   r?   r   rO   r   r
   r7   r   r   osnamer"   r   )rs   r   rN   rI   
out32_typeX_32y_32X_64y_64X_sparse_32X_sparse_64
solver_tollr_templlr_32lr_32_sparselr_64lr_64_sparser  s                     rF   test_dtype_matchr  (  sB    11k]6RgfX%LMN%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M EKK!3!3$?EKK!3!3$?rH   c                     t         j                  j                  d      } 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 )Nr   rK   r/   r.   r-   r+   F)rs   r$  r&   Tr   r   ru  )r4   r   r   r   r   r   r   r   r7   r:   ranger   )r   r?   r@   lr_no_wslr_wslr_no_ws_lossr   
lr_ws_losss           rF   test_warm_start_converge_LRr  w  s     ))


"C
		#q)QF2CIIc14EFGA
!sbTCZ'(A!5qQHe1MEQQ 2 @ @ CDM1X		!Q !U0034JM:D9rH   c            
         t        d      \  } }d}d}t               }d|fddfD ]D  \  }}t        ||dd|d	d
      }|j                  | |       |j	                  |j
                         F |\  }}	}
t        j                  ||	dd      rJ t        j                  ||
dd      rJ t        j                  |
|	dd      rJ y )Nr   r%   r  rX   r   )r   N)rx  Nr,   r   r  )r   rL   rs   r&   l1_ratior   r   rV   )rc  r  )r   r  r   r7   appendr   r4   allclose)r?   r@   rL   r  coeffsr   ratioro   elastic_net_coeffs	l1_coeffs	l2_coeffss              rF   test_elastic_net_coeffsr    s     A.DAqAHVF((3\<P
 	q!bhh Q 06,	9{{-yqsKKK{{-yqsKKK{{9iacBBBBrH   rL   )r   rV   r.   r   rK   r       .Azpenalty, l1_ratio)r   r.   )rx  r   c                     t        d      \  }}t        d| |ddd      }t        || ddd      }|j                  ||       |j                  ||       t        |j                  |j                         y )Nr   r%   r   r,   r   )r   rL   r  rs   r&   r   r   rL   rs   r&   r   )r   r   r7   r   r   )rL   r   r  r?   r@   lr_enetlr_expecteds          rF   "test_elastic_net_l1_l2_equivalencer    sw    
 A.DAq 
G %1V!K KK1OOAqgmm[->->?rH   )r   r.   rK   r  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 )NrD  r   r%   r  r.   r   r   r,   r   r  T)r  r   rx  )r   r   r4   linspacer   r   r7   r`   )rL   r?   r@   X_trainX_testy_trainy_test
param_gridenet_clfgsl1_clfl2_clfr>   s                rF   test_elastic_net_vs_l1_l2r    s    
 s3DAq'711'M$GVWfbkk!Q23J!&qdH 
h
$	7B&qdF  &qdF FF#! $ 88FF#v||FF'CCCC88FF#v||FF'CCCCrH   r/   ri   r  )rV   rX   r   c           	          t        ddddddd      \  t              t        ddd d	
      }t        ddd d	      }|j                         |j                          fd} ||       ||      k  sJ y )Nr   r/   r   r   r   rA   rC   r~   r"  rl  rk  r&   r   r,   F)r   rs   r&   rL   r  rN   rx  )r   rs   r&   rL   rN   c                    | j                   j                         }t        | j                              z  }|t	        j
                  t	        j                  |            z  z  }|dz
  dz  t	        j                  ||      z  z  }|S )Nr
  rX   )r   r   r   r:   r4   r;   r  r  )ro   coefobjrL   r?   r  r@   s      rF   enet_objectivezEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective  sw    xx~~(1b..q122x"&&...h#%tT(:::
rH   )r   r   r   r7   )rL   r  r	  lr_l2r  r?   r@   s   ``   @@rF   -test_LogisticRegression_elastic_net_objectiver     s     DAq 	aA 
G V!qE KK1	IIaO '"^E%::::rH   rC   )r/   rh   c           	         t        d| dd      \  }}t        d      }t        j                  ddd      }t        j                  ddd      }t        d	|d
||dd      }|j                  ||       ||d}t        d	d
dd      }t        |||      }	|	j                  ||       |	j                  d   |j                  d   k(  sJ |	j                  d   |j                  d   k(  sJ y )NrK   rh   r   rA   rC   r"  r&   r   r.   ri   r   r,   r   )r   rj   rs   rl   	l1_ratiosr&   r   rL   r  )r   rs   r&   r   rl   r  rL   )r   r   r4   r  r   r   r7   r   r   best_params_	l1_ratio_rm   )
rC   r?   r@   rl   r$  rj   lrcvr  ro   r  s
             rF   2test_LogisticRegressionCV_GridSearchCV_elastic_netr*    s    
 !!DAq 
	BAq!$I	RA	BD 	HHQNy1J		
B 
b*	,BFF1aL??:&$..*;;;;??34771:---rH   c            
      L   t        dddd      \  } }t        | |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dd      }t        ||
|      }|j                  ||       |	j                  |      |j                  |      k(  j                         dk\  sJ |	j                  |      |j                  |      k(  j                         dk\  sJ y )NrK   rh   r   r"  r%   r   r.   r#  ri   r   r,   r   r   )r   rj   rs   rl   r$  r&   r   r   r%  )r   rs   r&   r   r   r&  rW   )r   r   r   r4   r  r   r   r7   r   r   r8   r   )r?   r@   r  r  r  r  rl   r$  rj   r)  r  ro   r  s                rF   6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovrr,  -  s3    !!DAq (811'M$GVWf		BAq!$I	RA	B	D 	HHWgy1J	
B 
b*	,BFF7G LL!RZZ%88>>@CGGGLL BJJv$66<<>#EEErH   )rx  r   )r   r   autoc           
         d}d}t        d|||d      \  }}t        j                  ddd      }| dk(  rt        j                  dd	d
      }nd }t	        | |d|d|dd      }|j                  ||       |j                  j                  |fk(  sJ |j                  j                  |fk(  sJ |j                  j                  ||fk(  sJ y )Nrh   r   r  r   rA   rC   r"  r~   r&   r#  ri   r   r.   r/   r,   r   F)r   rj   rs   r$  r&   r   r   r  )
r   r4   r   r  r   r7   rm   r6   r(  r   )	r   r   rC   r~   r?   r@   rj   r$  r)  s	            rF   "test_LogisticRegressionCV_no_refitr0  \  s     IJDAq 
RA	B,KK1a(			D 	HHQN77==YL(((>>I<///::	:6666rH   c            
         d} 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                                     }|j                  | ||j                  |j                  |dz   fk(  sJ t        j                  t        |j                  j                                     }	|	j                  | ||j                  |j                  fk(  sJ |j                  j                  | ||j                  |j                  fk(  sJ y )Nrh   r   r  r   r/  r#  ri   r.   r/   r   r,   r   r   )r   rj   rs   rl   r$  r   r&   r   )r   r4   r   r  r   r7   r  r  r  r  r6   r  r  r  )
rC   r~   r?   r@   rj   r$  n_foldsr)  r  rZ   s
             rF   5test_LogisticRegressionCV_elasticnet_attribute_shapesr3    sO   
 IJDAq 
RA	BAq!$IG	D 	HHQN**T$"3"3":":"<=>K
Q!    ZZT\\00234F<<IwHHHH<<)Wbggy~~!NNNNrH   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\)ru   r   r,   rX   )r   rs   r  )r{   r|   r}   r   r7   r?   rO   )r   s    rF   test_l1_ratio_non_elasticnetr5    sA    	.  
k	-4EII!RP 
.	-	-s   'AAc           
      ,   d}t        |dddddd      \  }}t        |      }t        dddd d	|d
| z  |z  d      }t        ddddd|| d      }|j	                  ||       |j	                  ||       t        |j                  |j                  d       y )NrD  r/   r   r   r.   r  r   Fr   r
  r   )r   r&   rN   r   r   r  r  lossr   r   r,   )r   r&   rN   r   r   r  rL   rs   rT  )r   r   r   r   r7   r   r   )rL   r  rA   r?   r@   sgdlogs          rF   test_elastic_net_versus_sgdr:    s     IDAq 	aA
Ag	!	C 
	C GGAqMGGAqMciiA>rH   c            	         t        ddddddd      \  } }g d}t        | |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        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)Nr  rh   r/   r   r.   )rA   rC   r"  rl  n_clusters_per_classr&   r~   )r   r.   r`  r   r,   r   )r   rj   rs   r&   r   rT  )r   r   r{   r   r  r   )r?   r@   rj   r   r   s        rF   /test_logistic_regression_path_coefs_multinomialr=    s     DAq 
B+		!KE1a 
~	&!%(E!Ha@ 
'	~	&!%(E!Ha@ 
'	~	&!%(E!Ha@ 
'	&	 
'	&	&	&	&	&s$   	C?C5C+CC(+C4estrD  )r&   r   rh   r   )r&   rl   rj   r   r   c                 .    | j                   j                  S rb   )	__class__rc   r  s    rF   r  r    s    !++&&rH   )idsc           	           fd}t        t        j                        }|d d d   }|dd d   }t        j                  d d d   }|dk(  } |||d|      } |||d|      }	t	        |j
                  |	j
                         t	        |j                  |      |	j                  |              |||d|      }
|dv rW |||d|      }t	        |
j
                  |j
                         t	        |
j                  |      |j                  |             y  |||d	|      }t	        |
j
                  |j
                         t	        |
j                  |      |j                  |             t        j                  |j
                   |||d	|      j
                        rJ t        j                  |j
                   |||d	|      j
                        rJ y )
Nc                 Z     t              j                  di |j                  | |      S )Nrf   )r
   ro  r7   )r?   r@   rz  r>  s      rF   r7   z6test_logistic_regression_multi_class_auto.<locals>.fit  s*    $uSz$$*r*..q!44rH   r   r.   r   r-  )r   rs   r   r   r   )	r   rw   rx   rz   r   r   r:   r4   r  )r>  rs   r7   scaled_datar?   X2y_multir  est_auto_binest_ovr_binest_auto_multiest_ovr_multiest_multi_multis   `            rF   )test_logistic_regression_multi_class_autorL    s   5 		"KDbDA	QUU	Bkk$B$GqLEq%VFCLaE&AKL&&(9(9:L..r2K4M4Mb4QRGGN11AwE&I,,m.A.AB((,m.I.I".M	
 amFS,,o.C.CD((,o.K.KB.O	

 ;;5mFCII
 	
 
 ;;7fEKK
 	
 
 
rH   c                    t        d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   )rA   rl  r&   z&Setting penalty=None will ignore the Cri   )r   rs   rL   ru   )r   rs   r&   rx  )r   rL   rs   r&   )
r   r   r{   r|   r}   r7   r4   infr8   r   )	rs   r?   r@   r   ro   lr_nonelr_l2_C_inf	pred_nonepred_l2_C_infs	            rF   test_penalty_nonerS  9  s     11MDAq
2C	D1	=B	k	-
q! 
. !f1MG$vAK Aq!))!,IOOAq)11!4My-0 
.	-s   CCr-  r   r   )r   r   r   r   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        |||d
      \  }}}t        dd      } |j                  di |  t        |      j                  ||      }t        |      j                  |||      }dD ]2  }	 t        ||	      |      }
 t        ||	      |      }t        |
|       4 y )Nr.   rh   r/   ri   floatr   )r.   r.   r.   r.   r/   r/   r/   r/   r.   r.   r.   r.   r/   r/   r/   r/   intr  r   r%   r(   r   )rs   r&   rs  )r8   r:   r   rf   )r4   r   r   vstackhstackr<   r3   r   r   ro  r
   r7   getattrr   )r-  r?   r@   rE  y2r_   base_clfclf_no_weightclf_with_weightmethodX_clf_no_weightX_clf_with_weights               rF   /test_logisticregression_liblinear_sample_weightra  O  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MJBM!2FHH!&!(O''1-MHo))"b)NOC8'-8;<GOV<Q?):; DrH   c                     t        dd      \  } }t        d      }ddg}g d}t        d	d
|||ddd      }|j                  | |       |j                  d   j                  d      }t        |      D ]f  \  }}t        |      D ]S  \  }	}
t        d	d
||
ddd      }t        || ||      j                         }|||	f   t        j                  |      k(  rSJ  h y )Nr   r   r  r   )n_splitsrV   r   )rV   r.   r   r   r,      r   )r   rs   r$  rj   rl   r&   r   r   r.   r1   )r   rs   rL   r  r&   r   r   r&  )r   r   r   r7   r  r   r   r   r   r{   approx)r?   r@   rl   r$  rj   r)  avg_scores_lrcvr   rL   jr  ro   avg_score_lrs                rF   'test_scores_attribute_layout_elasticnetri    s     A>DAq	!	$Bc
I	B	D 	HHQNll1o***2O"1$Y/KAx#$!B +2q!;@@BL"1a4(FMM,,GGGG 0 rH   c                    t         j                  j                  \  }}t         j                  t         j                     }t        t        t         j                        d|       }t        t         j                        }|j                  ||       t        |j                  j                  d      dd       | r5|j                  j                  d      t        j                  dd      k(   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>`
    r'   )rL   rs   rN   r   r1   rv  r  r  )r  N)rw   rx   r6   ry   rz   r   r3   r   r7   r   r   r;   r   r{   re  )rN   rA   r~   rz   r>   X_scaleds         rF   (test_multinomial_identifiability_on_irisrl    s    0 !IIOOIzt{{+F

dii.#C TYYHGGHf CIIMMqM)159"fmmA5&AA rH   r
  g      $@c                     t        d      \  }}t        |      }t        j                  |      }d|d |dz   |j	                         }t        d|d|       }|j                  |||       t        ||       y )NT
return_X_yr/   r   r  )r&   r6  r   r   rs  )r   r3   r4   r<   rG  r   r7   r   )r   r6  r?   r@   r~   Wexpectedr>   s           rF   test_sample_weight_not_modifiedrr    sv     %DAqQJ

AA
avvxH
\C[C GGAqG"Ha rH   c           	          |t        j                  dd|            }dD ](  }t        ||t        ||      j	                  d             * t
        j                  j                  |      }|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%   )indicesindptrint64r/   r   r  )r(   r+   r,   z0Only sparse matrices with 32-bit integer indicesru   r  )r   randsetattrrY  r   r4   r   r   randintr6   r{   r   r   r   r7   )rs   r   rI   r?   attrr   r@   r   s           rF   test_large_sparse_matrixr{    s     	fkk"b7IJKA%4D)009: &
))

 2
3CAAGGAJ'A--@]]:S1f-11!Q7 21 	&)--a3 21s   ,C//C8c                      t        j                  g dg      j                  } t        j                  g d      }| j                  d   dk(  sJ t	        dd      j                  | |       y )N)rX   g?g?g      ?rW   gHzG?r   ffffff?)r.   r.   r   r   r.   r.   r   r.   r.   r)   T)rs   rN   )r4   r   Tr6   r   r7   )r?   r@   s     rF   test_single_feature_newton_cgr    sV     	>?@BBA
)*A771:??k>BB1aHrH   c            	         t         j                  j                         } t         j                  j                         }| |dk7     } ||dk7     }t	               j                  |       }t        | |d      dz  }t        d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)Nr/   r9  )r7  gnt@r   r(   r   rK   r   r   )r   rs   r   r   r   r&   rL   error)rw   rx   rG  rz   r   r  r   r   r   r   r   r   r7   )r?   r@   X_preprL   r>   s        rF   test_liblinear_not_stuckr    s    		AA	!q&	A	!q&	A++A.FAE"_4A
!
C 
	 	 	"g'9: 
#	"	"s   -CCenable_slep006c                     t         j                  j                  d      } t        d|       \  }}t        d|       \  }}t        j                  t        |            }d|dt        |      dz   d|i}t        d      }t        |      } |j                  ||fi | t        d      }	|	j                  d	       t        |	      }
 |
j                  ||fi | t        j                  |j                  d
   |
j                  d
         rJ  |j                  ||fi |} |
j                  ||fi |}t        j                  ||      rJ y)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  r/   Nr_   r  rk   Trs  r.   )r4   r   r   r   r<   r3   r   r   r7   set_score_requestr  r  r`   )r   r?   r@   X_ty_tr_   kwargsscorer1lr_cv1scorer2lr_cv2score_1score_2s                rF   8test_lr_cv_scores_differ_when_sample_weight_is_requestedr  $  s5    ))


#C#>DAq"RcBHCGGCFOM#$M-CFaK }-F$G!'2FFJJq!v$GD1!'2FFJJq!v{{6>>!,fnnQ.?@@@fll3.v.Gfll3.v.G{{7G,,,,rH   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        |	      } |j                  ||fi |  |j                  ||fi |}	ddd       t        d
      5  t        d      }
|
j                  d
       t        |
	      } |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  r/   Nr_   Fenable_metadata_routingr  r  Trs  r.   )r4   r   r   r   r<   r3   r	   r   r   r7   r`   r  r   r  )r   r?   r@   r  r  r_   r  r  r  r  r  r  r  s                rF   3test_lr_cv_scores_without_enabling_metadata_routingr  C  sN   
 ))


#C#>DAq"RcBHCGGCFOM#$M-CFaK }-F		6Z(%g6

1a"6"&,,sC262	 
7 
	5Z(!!!5%g6

1a"6"&,,sC262 
6 FNN1%v~~a'89GW% 
7	6 
6	5s   ?A E AE, E),E5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)NTrn  r/   rm  r   ra  )r,   r+   r'   )r6   
fill_valuerX   r}  )r   r    r   r   r7   r  r   r   r4   
zeros_liker   fullr6   r   r:   r`   )rs   r?   r@   r>   s       rF   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}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  z1is only supported if enable_metadata_routing=TrueFr  extra_paramr
  ru   N)r   r   r	   r{   r   r   r7   r`   )r?   r@   r  r   r-  s        rF   5test_passing_params_without_enabling_metadata_routingr  z  s     !<DAq "E
=C		6%]]:S1EIIa%f% 2 ]]:S1EKK1'' 2 
7	6 21 21 
7	6s;    B?	B'#B?B3B?'B0	,B?3B<	8B??Cc                     t        ddd      \  } }t        d      }d}t        j                  t        |      5  |j                  | |       d	d	d	       t        d      }t        j                  t        |      5  |j                  | |       d	d	d	       t        d
dd      \  } }t        d      }d}t        j                  t        |      5  |j                  | |       d	d	d	       t        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   dxY w# 1 sw Y   y	xY w)z)Check `multi_class` parameter deprecated.rh   r	  r!  )rC   rA   r"  r   r  z'multi_class' was deprecatedru   Nr/   r   z-'multi_class' was deprecated.*binary problems)r   r   r{   r|   FutureWarningr7   r   )r?   r@   ro   r   lrCVs        rF   test_multi_class_deprecatedr    s   bJDAq		.B
(C	m3	/
q! 
0  E2D	m3	/A 
0 bJDAq		6B
9C	m3	/
q! 
0  M:D	m3	/A 
0	/ 
0	/ 
0	/ 
0	/ 
0	/s/   D0=D<EE0D9<EEE)rW  r  r   	functoolsr   numpyr4   r{   numpy.testingr   r   r   r   scipyr   sklearnr	   sklearn.baser
   sklearn.datasetsr   r   sklearn.exceptionsr   sklearn.linear_modelr   sklearn.linear_model._logisticr   LogisticRegressionDefaultr   LogisticRegressionCVDefaultr   r   sklearn.metricsr   r   sklearn.model_selectionr   r   r   r   sklearn.multiclassr   sklearn.preprocessingr   r   r   sklearn.svmr   sklearn.utilsr   r   sklearn.utils._testingr    r!   sklearn.utils.fixesr"   r#   r$   markfilterwarnings
pytestmarkrV  r?   rO   r   rw   rG   parametrizerQ   rq   r   r   r3   rx   r   r   r   r   r   r   r   r   r   r   r   r  r  r1  r<  rA  rP  r\  rg  rq  r  r  r  r  r  r  r  r  r  r  r  r  r(  r  r  r8  rd  r  r  r  r  r  r  r  r   r   r*  r,  r0  r3  r5  r:  r=  rL  rS  ra  ri  rl  rr  r{  r  r  usefixturesr  r  r  r  r  rf   rH   rF   <module>r     s    	       "  ; 1 . 1  3 E E   7 G I I[[''<
 6QG :K  P!Wq!fq!f{8$ .9 :"B " " .9F :F ST	S^KUSS^G<S^K@$))nU%VX	
 	$))n	
 	$))n%6E	
**+ U,*: ST 24HIJ% K U%P  24HIJ@ K@ ST#HI) J U)2 ST/ U/* .92 :20<(;;
|?,8B06 "	bT	x-. 
+&'	"	Hk*+ 
 
F&IR .9 :  ST?- U?-D
"
8 $4###6N#OP(J)?@+
 A Q+
\OEd ;-.*HI#E J#EL8Jv4 .9! :! .9! :!!!BH .9/B :/Bd -T4L15 2 .50+. STYRYYq!_5(>?"%# @ 6 U(%0 ST7+.8 , U.8b fS\C6G(H$IIJ }5-8# 9 6
#< .9*J :*J\ ST(>?C 5$-8.9E@ : 9 @ UE@P:"C8 AB,y).DE@ F C@, 23D 4D8 kbkk"a34_5&; 6 5&;R f-#. .#.P ST*F U*F\ ST$89(FG 7 H : U 7L ST(O U(OVQ kbkk"a34_5%? 6 5%?PAB ST	C8!aTCP 	'   7+'
 , U'
T 6#g,k]9K*K#LM1 N1* %$G$u$G%4H*<*<Z(HV 5$-8&B 9&BT ST(FGcds*CZ)PQ! R H U! 7+.94 : ,4&I2 )*- +-<&: 7+! ,!2($rH   