
    h$,f'                    z   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*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7m8Z8 ejr                  ju                  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Z? e       Z@d ZAejr                  j                  de8      d        ZCd ZDe5d        ZEejr                  j                  de8      d         ZFejr                  j                  d! e eGe@j                        d"d#$       e eGe@j                        d%d&$       e eGe@j                        d'd&$       e eGe@j                        d(d)d#d*+       e eGe@j                        d,d)d#d*+       e eGe@j                        d-d#$      g      d.        ZIejr                  j                  d/eeg      d0        ZJejr                  j                  d/eeg      d1        ZKejr                  j                  d2g d3      d4        ZLd5 ZMejr                  j                  d6e7      d7        ZNd8 ZOd9 ZPd: ZQd; ZRd< ZSd= ZTd> ZUejr                  j                  d?d@dAgfdBdCdDgfdEdCdDgfdFdAgfdGdCdDgfg      dH        ZVdI ZWejr                  j                  de8      dJ        ZXdK ZYdL ZZdM Z[ejr                  j                  dNdOdPdQdOdPdRdSg      ejr                  j                  dTdNdUg      dV               Z\dW Z]dX Z^dY Z_dZ Z`d[ Zaejr                  j                  de8      d\        Zbejr                  j                  de8      d]        Zcd^ Zdd_ Zeejr                  j                  de8      d`        Zfejr                  j                  dad*g      ejr                  j                  dbdcddg      de               Zgdf Zhejr                  j                  dg ej                  ddh            ejr                  j                  did#d&g      ejr                  j                  djg dk      dl                      Zjejr                  j                  d2e<      dm        Zkejr                  j                  d2 el eme<       emd"g      z
              ejr                  j                  dndo      ejr                  j                  dpdo      ejr                  j                  did#d&g      dq                             Znejr                  j                  de8      dr        Zoejr                  j                  did#d&g      ejr                  j                  d2g ds      ejr                  j                  dpdtdug      ejr                  j                  de8      dv                             Zpdw Zqdx Zrejr                  j                  dyg dz      ejr                  j                  d{d|d}g      d~               Zsejr                  j                  dyg d      d        Ztejr                  j                  dy ej                  ddd            ejr                  j                  dg d      d               Zvejr                  j                  did      d        Zwd Zxejr                  j                  dbd      ejr                  j                  did      d               Zyd Zzd Z{ejr                  j                  dy ej                  ddd            ejr                  j                  dg d      d               Z|d Z}ejr                  j                  d ed d       ed dddd      gd       ejr                  j                  d2e<      d               Z~ejr                  j                  d2 el eme<       emd"g      z
              d        Zejr                  j                  ddcdtdddddduddddddtdddg      d        Zd Zejr                  j                  dpdtdug      d        Zejr                  j                  dig d      ejr                  j                  dTddddSdUg      d               Zejr                  j                  d2e<      ejr                  j                  de8      d               Zd Zd Zejr                  j                  d      d        Zd Zejr                  j                  d2e<      d        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)LabelEncoderStandardScalerscale)l1_min_c)	_IS_32BITcompute_class_weightshuffle)ignore_warningsskip_if_no_parallel)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           Hlib/python3.12/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictionsrF   ;   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%   )rF   r   r>   Y1rH   s    rE   test_predict_2_classesrO   M   s     (a8!R@(a8-:JBO(3Q?BG(3Q?qAQSUV(u1MqRTUQ?qAQSUrG   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    rE   __init__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init___   s    DJ.DKrG   Nc                     | j                   | j                  t        | j                         z     }| xj                  dz  c_        |S )Nr-   )rX   rW   r2   )rY   modelr>   r?   sample_weightscores         rE   __call__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__c   s4    KK

S-= =>EJJ!OJLrG   N)__name__
__module____qualname__rZ   r_    rG   rE   
MockScorerrR   ^   s    	/	rG   re   )r-   r.         r.   )Csscoringcvr   r$   r-   )	r   r   r6   C_rW   r2   r^   r7   rX   )re   mock_scorerrh   rj   lrr>   r?   custom_scores           rE   test_logistic_cv_mock_scorerro   ]   s      ,K	B	
B	[R	@BA.DAqFF1aL 558r!u SW,,, K88Arzz!}-L;--a0000!!!rG   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datar5   target_namestargetr   pytestwarnsUserWarningr6   )r@   
n_featuresrx   rm   warning_messages        rE   test_lr_liblinear_warningr~   ~   su     IIOOIzt{{+F	;q	9B	 
 
k	9 "
tyy&!" " "s   )!BBc                     t        t        d      t        t               t        t        d       | t              t               y )N
   )rK   )rF   r   r>   Y2rN   s    rE   test_predict_3_classesr      s+    (2.26(2.a0@"ErG   r=   r'   ovr)rK   rq   multi_classr&   multinomialr(   r*   {Gz?*   )rK   rq   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-   r0   )ru   rv   r5   rw   rx   rq   warningscatch_warningssimplefilterr   r6   r   r3   r4   r8   r7   meanr9   r   r:   r;   r<   )r=   r@   r|   rx   predrD   s         rE   test_predict_irisr      sE   : !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.r   rq   r   rs   )r&   r(   r)   r*   z/Solver %s supports only 'l2' or None penalties,l1r   )rq   penaltyr   )r&   r(   r)   r*   r+   z1Solver %s supports only dual=False, got dual=TrueT)rq   dualr   )r'   z;Only 'saga' solver supports elasticnet penalty, got solver=.
elasticnet)rq   r   z6penalty=None is not supported for the liblinear solverr'   r   rq   )ru   rv   rx   ry   raises
ValueErrorr6   r   )r   r>   r?   rq   msgrm   s         rE   test_check_solver_optionr      s   99dkkqA 3 xGHv=9]]:S1 	FF1aL	 	 C ?&Hvt?]]:S1 	FF1aL	 	
 K AFJvDe<]]:S1 	FF1aL	 	   KF8STUv|4]]:S1 	FF1aL	 	 
F[1]]:S1 	FF1aL	 	  5	 		 	
	 		 		 	s<   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.*rs   r-   r.   rf   rg   r   )ry   r   r   r6   r3   array)r   r\   s     rE   $test_elasticnet_l1_ratio_err_helpfulr      sh     |F3E	z	9 @		"((QFQF+,bhh1v.>?@ @ @s   AA00A9rq   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     )rq   r   r%   max_iterr-   r-   F)rq   r   r%   rL   r0   ?)ru   rx   astyper3   intpr   r   r6   rv   coef_r5   
intercept_r   r7   r8   r<   predict_log_probar   )rq   rx   r=   mlrr   s        rE   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(((rG   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   rq   r   r%   r-   )	r   r   r6   decision_functionr9   r3   expc_r   )global_random_seedr>   r?   r=   decisionprobaexpected_proba_class_1expected_probas           rE   %test_multinomial_binary_probabilitiesr     s     ,>?DAq
!'	C GGAqM$$Q'Ha EVVH-1ABFFH9DU1UVUU1557MMNN~.rG   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$   )ru   rv   r5   rw   rx   r   r   r6   r   sparsifyr   issparser   densifyr   )r   r@   r|   rx   r>   r=   pred_d_dpred_s_dsp_datapred_s_spred_d_ss              rE   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1rG   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,   )rf      )r3   randomRandomStaterandom_sampler;   r5   r   ry   r   r   r6   r>   r7   )rngX_y_r=   y_wrongs        rE   test_inconsistent_inputr   =  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   r6   r>   rM   r   r   r   r   r=   s    rE   test_write_parametersr   Q  sI    
!
,CGGArNCIIaLCNN1c33A6:rG   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$   )r3   r   r>   float64nanr   ry   r   r   r6   rM   )Xnanlogistics     rE   test_nanr   Z  s^     88ARZZ(DDJ!q1H	z	" T2  s   "BB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   }t        j
                  ddd      }t        }dD ]  }  |t              |||d	d
|ddd	      \  }}}t        |      D ]X  \  }}	t        |	d	d
|ddd      }
|
j                  ||       |
j                  j                         }t        |||   dd|z         Z  dD ]  }dg}  |t              |||d|ddd      \  }}}t        |d   dddd|      }
|
j                  ||       t        j                  |
j                  j                         |
j                  g      }t        ||d   dd|z          y )Nr   rJ   r.   r-   r,   rg   r   r*   r+   Fh㈵>  r   )rh   rL   r   rq   r   r   r%   )rK   rL   r   rq   r   r%   r   zwith solver = %s)decimalerr_msg)r&   r(   r)   r'   r*   r+        @@ư>     @)rh   r   rq   intercept_scalingr%   r   )rK   r   r   r%   r   rq   )r3   r   r   concatenaterandnlogspacer    r   	enumerater   r6   r   ravelr   r   )r   r>   r?   rh   frq   coefs_irK   rm   lr_coefs               rE   test_consistency_pathr   e  s   
))


"C
		#q)QF2CIIc14EFGA	
c	RD3JA	Q2	BA " 3q23

r1 bM 	DAq##!B FF1aLhhnn&G%q16H66Q	: X 
U3q23%	
r1  e%
 	q!.."((.."2BMM!BC!U1Xq2Dv2M	
-
rG   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   rJ   r.   r-   r,   r           )rh   r   r   r%   verboselbfgs failed to convergez!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r3   r   r   r   r   ry   rz   r   r   r2   messageargs)r   r>   r?   rh   recordwarn_msgs         rE   .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d      }|j                  | |       t        ddddd      }|j                  | |       t        d	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   r@   r%   Tr   r'   r   )r%   r   r   rq   r      z)Arrays are not almost equal to 6 decimalsrs   )r   r   r6   r   r   ry   r   AssertionError)r>   r?   lr1lr2lr3r   s         rE    test_liblinear_dual_random_stater    s    !<DAq
C GGAqM
C GGAqM
C GGAqM cii3
5C	~S	1 8!#))SYY78 8 8s   4!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d	      }|j                  ||       t        d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'   r   rf   )rh   rL   rq   r   rj   )rK   rL   rq   r   r-   r,   r.   r   )r-   rf   r-   )r3   r   r   r   signdotr   stdr   r6   r   r   r   r   r5   r8   r2   asarraylistcoefs_paths_valuesCs_scores_)	r@   r|   r   X_refr?   lr_cvrm   coefs_pathsrX   s	            rE   test_logistic_cvr    s   !Iz
))


"CIIi,E
		!cii
3345A	UZZ\E	UYY[E 5kuQRE 
IIeQ	
U;E
B FF5!bhh4u{{((1j/:u~~Aw/u~~!###**T%"4"4";";"=>?K{((1aJ*?@uyy-ZZU]]11345Fv||Y/rG   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d	      }|j	                         }d
D ]  }||=  |j                  ||   ||          |D ]E  }	t        | |	z         }
t        t        ||||fdg|
d d d d d|d   d    |
|||   ||                G y )NrJ   r   rf      )r@   r%   rB   n_informativeP   r  r   )rK   r   )rK   rr   
warm_start)rh   ri   	pos_classmax_squared_sumr]   score_paramsr.   )	r   r3   aranger   
get_paramsr6   r   r   r   )ri   multiclass_agg_listr>   r?   traintestrm   paramskey	averagingscorers              rE   "test_logistic_cv_multinomial_scorer/    s   & A!DAq ))B-2s!34E	c}	=B]]_F, 3KFF1U8QuX( 
	Gi/0!!	
 5 $"!    2qw$(	

rG   c                  P   d\  } }}t        | ||dd      \  }}t               j                  g d      j                  |      }t	        j
                  |      dz
  }t        d      }t        dd	      }t        d      }t        d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d      j                  ||      }	t        t	        j                  |	j                  |                  ddgk(  sJ y )N)r  r   rf   rf   r   )r@   r|   rB   r   r%   )barbazfoor-   r   r   )r   rh   r.   )class_weightr   r1  r2  )r   r   r6   inverse_transformr3   r   r   r   r   r   sortedr8   r4   r7   )
r@   r|   rB   r  r?   y_strrm   r  lr_str	lr_cv_strs
             rE   2test_multinomial_logistic_regression_string_inputsr;  0  s   '/$Iz9"HE1 N45GGJE
aA		6B ]qAEM:F$1EIFF5!	IIeQ
JJueMM%bhh5&//"&;;;;ekk9??;&//"&;;;;)$$%)>>>> "))FNN51237LLLL"))I--e456:OOOO #q3	c%  "))I--e4565%.HHHrG   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   r@   r|   r%   r   r  )r   r   r6   r   r   r   rk   )rH   r>   r?   csrr=   clfss         rE   test_logistic_cv_sparser@  Y  s    JDAqAa#gJ

C

 CGGAqM!DHHS!djj#))4doos~~>77cffrG   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 ]i  }|dv rdnd}t        |d|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jJ  y )Nr.   r   )rj   r   r-   r   rf   r   r-   r.   r   )r   r   r        r   r   r   r   )rq   r   r   r%   r   rj   r&   )ru   rv   rx   r5   r   r  splitr   r6   copyr   r  r   r   r3   newaxisr   r8   r  r  r  r  r   r^   )r)  rx   r@   r|   n_cvrj   precomputed_foldsr=   clf1target_copyr  rX   rq   r   	clf_multimulti_score	ovr_scores                    rE   test_ovr_multinomial_irisrO  h  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},,,5-rG   c            	      8   t        ddd      \  } }t        d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   r   )rL   r%   r   rq   r.   rrf   r   Nrd   )	r   dictSOLVERSr   r6   	itertoolscombinationsr   r   )r>   r?   r+  rq   
regressorssolver_1solver_2s          rE    test_logistic_regression_solversr[    s    "AANDAqBEJF  	";&;F;??1EEJ 
 (44Z1E 
(!x &&
8(<(B(BA	

s   %Bc                     t        ddddd      \  } }d}t        d|dd	
      }ddd}t        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   rf   r   r@   r|   r   rB   r%   Hz>Fr   r   )rL   r   r%   r   r   '  r   rJ   rq   r   r.   rQ  r+   g{Gzt?r   z vs rtolr   Nrd   )
r   rT  rU  r   getr6   rV  rW  r   r   )	r>   r?   r   r+  solver_max_iterrq   rX  rY  rZ  s	            rE   +test_logistic_regression_solvers_multiclassre    s    2QRDAq C3RUSF #E2O 	  	" 
O$7$7$D
HN

#a)	J  (44Z1E 
(x &&x &&!V+jXJ/		

s   6B?weightrT   g?r   rV   rB  r5  balancedc           	         t        |       }|dk(  r| }t        ddddd||      \  }}t        ddd|d	
      }t        dddi|}t	        t
              5  |j                  ||       ddd       t        t              t        dg      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.rf  rD  rf   r   )r@   r|   
n_repeatedr   n_redundantrB   r%   r-   Fr   g:0yE>)rh   rL   r   r5  r   rq   r&   categoryNr   gC]r2<r_  )r   r   r%   r   z	 vs lbfgsra  rd   )r2   r   rT  r   r    r   r6   setrU  
set_paramsr   r   )
rf  r5  r   rB   r>   r?   r+  	clf_lbfgsrq   r=   s
             rE   (test_logistic_regressioncv_class_weightsrp    s!    FIx'DAq !F %>G>v>I 
"4	5 a g,gY/ 

";&;F;_$NNE8JQ8N   	1IIyTfXY;O	


 s   C22C;c            
      v   t        ddddd      \  } }|dz   }t        t        fD ]  }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      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d
      }|j	                  | |       t        d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 # 1 sw Y   sxY w)%Nr   r   rf   r.   r   r]  r-   r   Fr   )r%   rL   r   )rh   rj   )r&   r'   rq   r]   -C6?rb  r   r   )r&   r+   r*   绽|=rq   r   r   )rq   r5  r'   r   )rq   rL   r5  r   r   r%   r   )rq   rL   r   r   r%   r   rg   rS  l2T)rq   rL   r5  r   r   r%   r   )rq   rL   r   r   r%   r   rd   )r   r   r   updater6   r3   r;   r5   r   r   rm  rU  r    r   )r>   r?   r]   r   kwrq   clf_sw_noneclf_sw_onesclf_sw_lbfgsclf_sw	clf_cw_12	clf_sw_12clf_cws                rE   'test_logistic_regression_sample_weightsr  	  s   !qqDAq EM!#78 !I 5O%%IIQa() - 	MF1F1b1K1F1b1KOOAq!OOAq
0CODK--{/@/@tL	M )B)D)A];'lS):%;; 	IFTvFeO5TQSTF " >

1a}
=>L..4H	I - 	IFJ&1|JrJIMM!Q/&/B/IMM!QmM<IOOY__4H	I9!IJ  q\F JJq!F JJq!]#fllFLL!Dq\F JJq!F JJq!]#fllFLL!Dq> >s   (J..J8c                 v    t        j                  |       }t        d||       }t        t	        ||            }|S )Nrg  )rA   r?   )r3   r4   r   rT  zip)r?   rA   r5  class_weight_dicts       rE    _compute_class_weight_dictionaryr  _  s5    iilG'
GqILS,78rG   c                     t        t        j                        } | dd d d f   }t        j                  dd  }d}t	        |      }|D ]d  }t        |dd      }t        |d|      }|j                  ||       |j                  ||       t        |j                  |j                  d       f | ddd d f   }t        j                  dd }t	        |      }t        t              t        d	      z
  D ]d  }t        |d
d      }t        |d
|      }|j                  ||       |j                  ||       t        |j                  |j                  d       f y )N-   )r&   r(   r   rg  )rq   r   r5  rg   rS  rJ   r   r   r  )r   ru   rv   rx   r  r   r6   r   r   rm  rU  )X_irisr>   r?   solversr  rq   rJ  clf2s           rE   &test_logistic_regression_class_weightsr  g  sH   499FrsAvABCA$G8; 	E!}:
 "}CT
 	AA!$**djj!D	E 	r#vqyABsA8;g,_!55 	E!u:
 "u;L
 	AA!$**djj!D	ErG   c            	         d\  } }}t        | |d|d      \  }}t        d      j                  |      }d}t        |dd	
      }t        |ddd	      }|j	                  ||       |j	                  ||       |j
                  j                  ||fk(  sJ |j
                  j                  ||fk(  sJ dD ]  }t        |dddd      }t        |d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 ]i  }t        |dd	ddg      }
|
j	                  ||       t        |
j
                  |j
                  d       t        |
j                  |j                  d       k y )N)r  r   rf   r   r   r]  F)	with_meanr&   r   r   )rq   r   r   )rq   r   rL   r   )r*   r+   r(   r   r   r^  )rq   r   r%   r   r   )rq   r   r%   r   r   rL   r   rt  r   r   r  )rq   r   r   r   rh   )
r   r   fit_transformr   r6   r   r5   r   r   r   )r@   r|   rB   r>   r?   rq   ref_iref_wclf_iclf_wclf_paths              rE   $test_logistic_regression_multinomialr    s
    (1$Iz9DAq 	'55a8A Ff-TRE=4E 
IIaO	IIaO;;J 7777;;J 7777. G"%
 #%
 			!Q		!Q{{  Y
$;;;;{{  Y
$;;;; 	U[[t<U[[t<((%*:*:F1G: 8 J'DdSVRW
 	Q$?++U-=-=DIJrG   c                      t        ddd      \  } }t        ddd      }|j                  | |       t        j                  d      } t        |j                  |       t        j                  d             y )	Nr   r   r=  Fr'   r   )rL   rq   r   )r   r   )r   r   r6   r3   zerosr   r7   )r>   r?   r=   s      rE   %test_liblinear_decision_function_zeror    s\     qqIDAq
5RW
XCGGAqM 	As{{1~rxx{3rG   c                 p    t        ddd      \  }}t        dd      }|j                   | |      |       y )Nr   r   r   r=  r'   r   r   r   r   r6   rH   r>   r?   r=   s       rE   test_liblinear_logregcv_sparser    s5     JDAq
ku
ECGGM!a rG   c                 p    t        ddd      \  }}t        dd      }|j                   | |      |       y )Nr   r   r   r=  r+   r   rv  r  r  s       rE   test_saga_sparser    s5     JDAq
f$
7CGGM!a rG   c                  r    t        d      } | j                  t        t               | j                  dk(  sJ y )NF)rL   r   )r   r6   r>   rM   r   r   s    rE   "test_logreg_intercept_scaling_zeror    s-     5
1CGGArN>>S   rG   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d      }|j                  ||       t        d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=  rf   sizer.   r5   r-   r0   r   r  r'   Fr   ru  r   rK   rq   rL   r   r   r+   r   r   rK   rq   rL   r   r   r   r   )r3   r   r   r   normalr;   r   r   r6   r   r   r  )r   r@   r>   r?   X_noise
X_constantlr_liblinearlr_sagas           rE   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[ArG   c           	      H   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d      }|j                  ||       t        d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d      }	|	j                  |j                         |       t        |j                  |	j                         y )Nr   r  r   r   r=  rT   rf   )r   r  r.   r  r-   r0   r   r  r'   Fr   ru  r  r+   r   r  r  r   )r3   r   r   r   r  r  r   r   r6   r   r   toarray)
rH   r   r@   r>   r?   r  r  r  r  lr_saga_denses
             rE   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]-@-@ArG   random_seedr   r   rw  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 )NrJ   r   r=  r+   r   -q=)rq   r   r%   r   r   r  T)rh   refitrK   rd   )r   rT  r   r6   r   r   r   )r  r   r>   r?   common_paramsr  rm   s          rE   !test_logistic_regression_cv_refitr  P  s     +VDAq M !GSEGGE	IIaO		3c	3]	3BFF1aLekk2884rG   c                     t        ddddd      \  } }t        dd      }|j                  | |       t        ||j	                  |             }t        d	d      }|j                  | |       t        ||j	                  |             }||kD  sJ t        ||j	                  |             }t        ||j                  |             }||kD  sJ y )
Nr   r   r   rf   )r@   r|   r%   rB   r   r   r&   r   rq   r   )r   r   r6   r   r9   _predict_proba_lr)r>   r?   rL  clf_multi_lossclf_ovrclf_ovr_lossclf_wrong_losss          rE   %test_logreg_predict_proba_multinomialr  j  s    !qPRDAq #}WMIMM!Qa!8!8!;<N U7CGKK1Aw44Q78L.((( a!8!8!;<Na!<!<Q!?@NN***rG   r   r   r   zsolver, message))r(   z@newton-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%   rq   rs   )ru   rv   rx   rF  ry   skipr   rz   r   r6   n_iter_)r   r   rq   r   r>   y_binrm   s          rE   test_max_iterr    s    * yy$++**,uAE%1*11k]6RUV""x!|EF	
B 
(	8 
q% ::a=H$$$ s   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   rf   r.   rg   r   r  r   )r   rK   rq   r%   r   )r   rq   rh   rj   r%   r-   r   r4  r   r   )ru   rv   rx   r   r3   r4   r5   rF  r   r6   r  r   rn  )	rq   r>   r?   rB   r  n_Cs	n_cv_foldr=   clf_cvs	            rE   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7rG   r"  )TFrL   c           
         t         j                  t         j                  }}| dk(  r|dk(  ry t        d||| d|      }t	        t
              5  |j                  ||       |j                  }d|_        |j                  ||       d d d        t        j                  t        j                  |j                  z
              }d| d	|d
t        |      dt        |      }	|rd|kD  sJ |	       y |dkD  sJ |	       y # 1 sw Y   zxY w)Nr)   r   rs  r   )r   r   r"  rq   r%   rL   rk  r-   zWarm starting issue with z solver in z mode with fit_intercept=z and warm_start=       @)ru   rv   rx   r   r    r   r6   r   r   r3   r:   absstr)
rq   r"  rL   r   r>   r?   r=   coef_1cum_diffr   s
             rE   test_warm_startr    s     99dkkqA""{m'C
#C 
"4	5 11 vvbffVcii/01H ;M 2C
O	E 
 X~"s"~#~"s"~ s   8C>>Dc                 |   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 ]y  }
t        d
|	|
z  z  dddd|dd      }t        d
|	|
z  z  dddd|dd      }|j                  ||       |j                  ||       t        |j                  |j                  d       {   y )Nrf   r-   r.   r  r   r   r=  )r   rw  r,   r  r+   r      Fr   )rK   rq   r   r   rL   r   r%   r   r'   )r   rv   rx   r3   r   r   r5   r   r   r6   r   r   )rH   ru   r>   r?   X_binr  X_sparsey_sparser   r@   alphar+   r'   s                rE   test_saga_vs_liblinearr    sq   ;D99dkkqA
sQwA
sQwAa1fIEa1fIMAE,!Hh X&H(H!56 J1# 	JG
IRA. J)Y./! % "'#!"	 /Y./& % "'#!"		 Aa#)$**iooqI5J	JJrG   )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   )rq   r   r%   r   rL   gQ@ntr   atolr+   rT   )ry   r  r3   r   float32r   r>   r   rM   r   r
   r6   r   r   osnamer   r   )rq   r   rL   rH   
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                     rE   test_dtype_matchr  4  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$?rG   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d	      }t        ddd
d	      }t        ||j                  ||      j                  |            }t        d      D ]  }|j                  ||        t        ||j                  |            }t        ||d       y )Nr   rJ   r.   r-   r,   r   r*   F)r   rq   r"  r%   Tr   r   rt  )r3   r   r   r   r   r   r   r   r6   r9   ranger   )r   r>   r?   lr_no_wslr_wslr_no_ws_lossr   
lr_ws_losss           rE   test_warm_start_converge_LRr    s     ))


"C
		#q)QF2CIIc14EFGA
!sbTCZ'(A!!%EPQH !%DqE QQ 2 @ @ CDM1X 		!Q!U0034JM:D9rG   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  rV   r   )r   N)rw  Nr+   r   r  )r   rK   rq   r%   l1_ratior   r   rT   )rb  r  )r   r  r   r6   appendr   r3   allclose)r>   r?   rK   r  coeffsr   ratiorm   elastic_net_coeffs	l1_coeffs	l2_coeffss              rE   test_elastic_net_coeffsr    s     A.DAqAHVF((3\<P  
 	q!bhh  06,	9{{-yqsKKK{{-yqsKKK{{9iacBBBBrG   rK   )r   rT   r-   r   rJ   r       .Azpenalty, l1_ratio)r   r-   )rw  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   rK   r  rq   r%   r   r   rK   rq   r%   r   )r   r   r6   r   r   )rK   r   r  r>   r?   lr_enetlr_expecteds          rE   "test_elastic_net_l1_l2_equivalencer    sw    
 A.DAq 
G %1V!K KK1OOAqgmm[->->?rG   )r   r-   rJ   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 )NrC  r   r$   r  r-   r   r   r+   r   r  T)r  r   rw  )r   r   r3   linspacer   r   r6   r^   )rK   r>   r?   X_trainX_testy_trainy_test
param_gridenet_clfgsl1_clfl2_clfr=   s                rE   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CrG   r.   rg   r  )rT   rV   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   r@   rB   r|   r   rj  ri  r%   r   r+   F)r   rq   r%   rK   r  rL   rw  )r   rq   r%   rK   rL   c                    | j                   j                         }t        | j                              z  }|t	        j
                  t	        j                  |            z  z  }|dz
  dz  t	        j                  ||      z  z  }|S )Nr  rV   )r   r   r   r9   r3   r:   r  r
  )rm   coefobjrK   r>   r  r?   s      rE   enet_objectivezEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective	  sw    xx~~(1b..q122x"&&...h#%tT(:::
rG   )r   r   r   r6   )rK   r  r  lr_l2r  r>   r?   s   ``   @@rE   -test_LogisticRegression_elastic_net_objectiver    s     DAq 	aA 
G V!qE KK1	IIaO '"^E%::::rG   )r   r   c           
         | dk(  rt        d      \  }}nt        d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 )Nr   r   r$   rJ   rf   r@   rB   r   r%   r   r-   rg   r   r+   r   r   rh   rq   rj   	l1_ratiosr%   r   r   rK   r  r   rq   r%   r   r   rj   r  rK   )r   r   r3   r  r   r   r6   r   r   best_params_	l1_ratio_rk   )
r   r>   r?   rj   r  rh   lrcvr  rm   r  s
             rE   2test_LogisticRegressionCV_GridSearchCV_elastic_netr%    s   
 e #21"Qaa
1 
	BAq!$I	RA	B	D 	HHQNy1J	
B 
b*	,BFF1aL??:&$..*;;;;??34771:---rG   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 )NrJ   rf   r   r  r$   r   r-   r  rg   r   r+   r   r   r  r  r   r!  rU   )r   r   r   r3   r  r   r   r6   r   r   r7   r   )r>   r?   r  r  r	  r
  rj   r  rh   r$  r  rm   r  s                rE   6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovrr'  A  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ErG   )rw  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 )Nrf   r   r  r   r@   rB   r   r|   r%   r  rg   r   r-   r.   r+   r   F)r   rh   rq   r  r%   r   r   r  )
r   r3   r   r  r   r6   rk   r5   r#  r   )	r   r   rB   r|   r>   r?   rh   r  r$  s	            rE   "test_LogisticRegressionCV_no_refitr+  n  s    
 IJDAq 
RA	B,KK1a(			D 	HHQN77==YL(((>>I<///::	:6666rG   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 )Nrf   r   r  r   r*  r  rg   r-   r.   r   r+   r   r   )r   rh   rq   rj   r  r   r%   r   )r   r3   r   r  r   r6   r  r  r  r  r5   r  r  r  )
rB   r|   r>   r?   rh   r  n_foldsr$  r  rX   s
             rE   5test_LogisticRegressionCV_elasticnet_attribute_shapesr.    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NrG   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\)rs   r   r+   rV   )r   rq   r  )ry   rz   r{   r   r6   r>   rM   )r   s    rE   test_l1_ratio_non_elasticnetr0    sN    	.  
k	- Q4EII!RPQ Q Q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 )NrC  r.   r   r   r-   r  r   Fr   r  r   )r   r%   rL   r   r   r  r  lossr   r   r+   )r   r%   rL   r   r   r  rK   rq   rS  )r   r   r   r   r6   r   r   )rK   r  r@   r>   r?   sgdlogs          rE   test_elastic_net_versus_sgdr5    s     IDAq 	aA
Ag	!	C 
	C GGAqMGGAqMciiA>rG   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  rf   r.   r   r-   )r@   rB   r   rj  n_clusters_per_classr%   r|   )r   r-   r_  r   r+   r   )r   rh   rq   r%   r   rS  )r   r   ry   r   r  r   )r>   r?   rh   r   r   s        rE   /test_logistic_regression_path_coefs_multinomialr8    s    DAq 
B+		!KE1a 
~	& A!%(E!Ha@A	~	& A!%(E!Ha@A	~	& A!%(E!Ha@A A	A AA AA As$   	C?C5C+CC(+C4estrC  )r%   r   rf   r   )r%   rj   rh   r   r   c                 .    | j                   j                  S r`   )	__class__ra   )xs    rE   <lambda>r=    s    !++&& rG   )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 )Nrd   )r
   rn  r6   )r>   r?   ry  r9  s      rE   r6   z6test_logistic_regression_multi_class_auto.<locals>.fit  s*    $uSz$$*r*..q!44rG   r   r-   r   r(  r  r   r   r   )	r   ru   rv   rx   r   r   r9   r3   r  )r9  rq   r6   scaled_datar>   X2y_multir  est_auto_binest_ovr_binest_auto_multiest_ovr_multiest_multi_multis   `            rE   )test_logistic_regression_multi_class_autorI    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
 	
 
 
rG   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   )r@   rj  r%   z&Setting penalty=None will ignore the Crg   )r   rq   rK   rs   )r   rq   r%   rw  )r   rK   rq   r%   )
r   r   ry   rz   r{   r6   r3   infr7   r   )	rq   r>   r?   r   rm   lr_nonelr_l2_C_inf	pred_nonepred_l2_C_infs	            rE   test_penalty_nonerP  D  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-   rf   r.   rg   floatr   )r-   r-   r-   r-   r.   r.   r.   r.   r-   r-   r-   r-   r.   r.   r.   r.   intr  r   r$   r'   r   )rq   r%   rr  )r7   r9   r   rd   )r3   r   r   vstackhstackr;   r2   r   r   rn  r
   r6   getattrr   )r+  r>   r?   rB  y2r]   base_clfclf_no_weightclf_with_weightmethodX_clf_no_weightX_clf_with_weights               rE   /test_logisticregression_liblinear_sample_weightr^  Z  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?):;<rG   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_splitsrT   r   )rT   r-   r   r   r+      r   )r   rq   r  rh   rj   r%   r   r   r-   r0   )r   rq   rK   r  r%   r   r   r!  )r   r   r   r6   r  r   r   r   r   ry   approx)r>   r?   rj   r  rh   r$  avg_scores_lrcvr   rK   jr  rm   avg_score_lrs                rE   'test_scores_attribute_layout_elasticnetrf    s    A>DAq	!	$Bc
I	B	D 	HHQNll1o***2O" H1$Y/ 	HKAx#$!B +2q!;@@BL"1a4(FMM,,GGGG	HHrG   c                    t         j                  j                  \  }}t         j                  t         j                     }t        t        t         j                        d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&   r   )rK   rq   r   rL   r   r0   ru  r  r  )r  N)ru   rv   r5   rw   rx   r   r2   r   r6   r   r   r:   r   ry   rb  )rL   r@   r|   rx   r=   X_scaleds         rE   (test_multinomial_identifiability_on_irisri    s    0 !IIOOIzt{{+F

dii.!#	C TYYHGGHf CIIMMqM)159"fmmA5&AA rG   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%   r5  r   r   rr  )r   r2   r3   r;   rF  r   r6   r   )r   r5  r>   r?   r|   Wexpectedr=   s           rE   test_sample_weight_not_modifiedro    sv     %DAqQJ

AA
avvxH
\C[C GGAqG"Ha rG   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 indicesrs   )rq   )r   randsetattrrV  r   r3   r   r   randintr5   ry   r   r   r   r6   )rq   r   rH   r>   attrr   r?   r   s           rE   test_large_sparse_matrixrx    s     	fkk"b7IJKA% ;4D)009:;
))

 2
3CAAGGAJ'A--@]]:S1 	8f-11!Q7	8 	8 	&)--a3	8 	8s   ,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)rV   g?g?g      ?rU   gHzG?r   ffffff?)r-   r-   r   r   r-   r-   r   r-   r-   r(   T)rq   rL   )r3   r   Tr5   r   r6   )r>   r?   s     rE   test_single_feature_newton_cgr|    sV     	>?@BBA
)*A771:??k>BB1aHrG   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.   r4  )r2  gnt@r   r'   r   rJ   r   r   )r   rq   r   r   r   r%   rK   error)ru   rv   rF  rx   r   r  r   r   r   r   r   r   r6   )r>   r?   X_preprK   r=   s        rE   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  ri   Trr  r-   )r3   r   r   r   r;   r2   r   r   r6   set_score_requestr  r  r^   )r   r>   r?   X_ty_tr]   kwargsscorer1lr_cv1scorer2lr_cv2score_1score_2s                rE   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,,,,rG   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  Trr  r-   )r3   r   r   r   r;   r2   r	   r   r   r6   r^   r  r   r  )r   r>   r?   r  r  r]   r  r  r  r  r  r  r  s                rE   3test_lr_cv_scores_without_enabling_metadata_routingr  M  s\   
 ))


#C#>DAq"RcBHCGGCFOM#$M-CFaK }-F		6 3Z(%g6

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

1a"6"&,,sC2623 FNN1%v~~a'89GW%3 33 3s   ?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)NTrk  r.   rk  r   r`  )r+   r*   r&   )r5   
fill_valuerV   rz  )r   r    r   r   r6   r  r   r   r3   
zeros_liker   fullr5   r   r9   r^   )rq   r>   r?   r=   s       rE   test_zero_max_iterr  j  s    %DAq	QA	"4	5 F ;??1EF_${{a		2==#;<!!!$GG!''!*@	
 	a GG1771:q/c:	
 99Q?S   #F Fs   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  rs   N)r   r   r	   ry   r   r   r6   r^   )r>   r?   r  r   r+  s        rE   5test_passing_params_without_enabling_metadata_routingr    s     !<DAq "E
=C		6 (%]]:S1 	&EIIa%f%	& ]]:S1 	(EKK1''	(( (	& 	&	( 	(( (s;    B?	B'#B?B3B?'B0	,B?3B<	8B??C)rV  r  r   	functoolsr   numpyr3   ry   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.preprocessingr   r   r   sklearn.svmr   sklearn.utilsr   r   r   sklearn.utils._testingr    r!   sklearn.utils.fixesr"   r#   markfilterwarnings
pytestmarkrU  r>   rM   r   ru   rF   parametrizerO   ro   r~   r   r2   rv   r   r   r   r   r   r   r   r   r   r   r   r  r  r/  r;  r@  rO  r[  re  rp  r  r  r  r  r  r  r  r  r  r  r  r  r&  r  r  r7  rm  r  r  r  r  r  r  r  r   r  r%  r'  r+  r.  r0  r5  r8  rI  rP  r^  rf  ri  ro  rx  r|  r  usefixturesr  r  r  r  rd   rG   rE   <module>r     s4
    	       "  ; 1 . 1  F E   B B G >[[''<
 6QG :K  P!Wq!fq!f{8$ .9 :"B " " .9F :F
 	S^KUSS^GW$))n[m	
 	$))nU%VX	
 	$))n	
 	$))n%6E	
!.*/.*8  24HIJ% K%P  24HIJ@ K@ #HI) J),/* .92 :20<(;?
D?,!8H0: "	bT	x-. 
+&'	"	Hk*+ 
 
F&IR .9 :@-F
"
8 $4###6N#OP(J)?@,
 A Q,
^SEl"EJ<J~4 .9! :! .9! :!!#BL .92B :2Bj -T4L15 2 .50+, YRYYq!_5(>?"%# @ 6&%. 7+.8 ,.8b 6#g,k]9K*K#LM}5-8(>?!# @ 9 6 N!#H .9,J :,J^ (>?C 5$-8.9E@ : 9 @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 (>?*. @*.Z*FZ $89(FG 7 H : 7F(OVQ kbkk"a34_5%? 6 5%?PA@ 	C8!aTCP 	'   7+'
 ,'
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 (FGcds*CZ)PQ! R H! 7+.94 : ,4&I2 )*- +-<&: 7+! ,!2(rG   