
    _nd                    6   d dl Z d dlZd dlZd dlmZ d dlZd dlmZm	Z	 d dlm
Z
mZ d dlmZ d dlZd dlmZ d dlmZmZ d dlmZ d d	lmZ 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# 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* d dl+m,Z,m-Z-m.Z/m0Z1 ej2        3                    d          Z4 ee/d           Z. ee1d           Z0dZ5dd gd dgddggZ6 ej7        e6          Z8g dZ9g dZ: e            Z;d Z<d Z=d  Z>e(d!             Z?d" Z@ej2        A                    d# e. eBe;jC                  d$d%&           e. eBe;jC                  d'd(&           e. eBe;jC                  d)d(&           e. eBe;jC                  d*d+d%d,-           e. eBe;jC                  d.d+d%d,-           e. eBe;jC                  d/d%&          g          d0             ZDej2        A                    d1e.e0g          d2             ZEej2        A                    d3g d4          d5             ZFd6 ZGd7 ZHd8 ZId9 ZJd: ZKd; ZLd< ZMd= ZNd> ZOej2        A                    d?d@dAgfdBdCdDgfdEdCdDgfdFdAgfdGdCdDgfg          dH             ZPdI ZQdJ ZRdK ZSdL ZTdM ZUej2        A                    dNdOdPdQdOdPdRdSg          ej2        A                    dTdNdUg          dV                         ZVdW ZWdX ZXdY ZYdZ ZZd[ Z[d\ Z\d] Z]d^ Z^d_ Z_d` Z`ej2        A                    dad,g          ej2        A                    dbdcddg          de                         Zadf Zbej2        A                    dg ejc        ddh                    ej2        A                    did%d(g          ej2        A                    djg dk          dl                                     Zdej2        A                    d3e5          dm             Zeej2        A                    d3 ef ege5           egd$g          z
                      ej2        A                    dndo          ej2        A                    dpdo          ej2        A                    did%d(g          dq                                                 Zhdr Ziej2        A                    did%d(g          ej2        A                    d3g ds          ej2        A                    dpdtdug          dv                                     Zjdw Zkdx Zlej2        A                    dyg dz          ej2        A                    d{d|d}g          d~                         Zmej2        A                    dyg d          d             Znej2        A                    dy ejo        ddd                    ej2        A                    dg d          d                         Zpej2        A                    did          d             Zqd Zrej2        A                    dbd          ej2        A                    did          d                         Zsd Ztd Zuej2        A                    dy ejo        ddd                    ej2        A                    dg d          d                         Zvd Zwej2        A                    d e.d d           e0d dddd          gd           ej2        A                    d3e5          d                         Zxej2        A                    d3 ef ege5           egd$g          z
                      d             Zyej2        A                    ddcdtdddddduddddddtdddg          d             Zzd Z{ej2        A                    dpdtdug          d             Z|ej2        A                    dig d          ej2        A                    dTddddSdUg          d                         Z}ej2        A                    d3e5          d             Z~d Zd ZdS )    N)partial)assert_allcloseassert_almost_equal)assert_array_almost_equalassert_array_equal)sparse)clone)	load_irismake_classification)log_loss)
get_scorer)StratifiedKFold)GridSearchCV)train_test_split)cross_val_score)LabelEncoderStandardScaler)compute_class_weight	_IS_32BIT)ignore_warnings)shuffle)SGDClassifier)scale)skip_if_no_parallel)ConvergenceWarning)_log_reg_scoring_path_logistic_regression_pathLogisticRegressionLogisticRegressionCVz6error::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         }|                     ||                              |          }t          | j        |           |j        |fk    sJ t          ||           |                     |          }|j        ||fk    sJ t          |
                    d          t          j        |                     t          |                    d          |           dS )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.11/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictionsrB   4   s    AIillGa I1%%a((Is|W---?yl****y!$$$%%a((M9i"88888m//Q/779K9KLLL}+++33Q77777    c                     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                     d S )Nr   r    d   )Cr!   F)fit_interceptr!   )rB   r   r:   Y1X_sp rC   rA   test_predict_2_classesrK   F   s     (a888!R@@@(a888$CCC(3Q???BGGG(3Q???rJJJ(u1MMMqRTUUU(u1MMMtUWXXXXXrC   c                      G d d          }  |             }g d}d}t          |||          }t          d          \  }}|                    ||           |j        d         |d         k    sJ |j        |t          |          z  k    sJ d|_        |                    ||                    |                    }||j        d         k    sJ |j        dk    sJ d S )	Nc                       e Zd Zd ZddZdS )0test_logistic_cv_mock_scorer.<locals>.MockScorerc                 &    d| _         g d| _        d S )Nr   )皙?g?皙?      ?)callsscores)selfs    rA   __init__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__U   s    DJ...DKKKrC   Nc                 t    | j         | j        t          | j                   z           }| xj        dz  c_        |S )Nr)   )rT   rS   r.   )rU   modelr:   r;   sample_weightscores         rA   __call__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__Y   s3    K
S-=-= =>EJJ!OJJLrC   N)__name__
__module____qualname__rV   r[   rJ   rC   rA   
MockScorerrN   T   s7        	/ 	/ 	/	 	 	 	 	 	rC   r`   )r)   r*         r*   )Csscoringcvr   r    r)   )	r   r   r2   C_rS   r.   rZ   r3   rT   )r`   mock_scorerrc   re   lrr:   r;   custom_scores           rA   test_logistic_cv_mock_scorerrj   S   s           *,,K	B	
B	[R	@	@	@BA...DAqFF1aLLL 58r!u SWW,,,, K88Arzz!}}--L;-a00000!!!!!!rC   c                  4   t           j        j        \  } }t           j        t           j                 }t          dd          }d}t          j        t          |          5  |	                    t           j        |           d d d            d S # 1 swxY w Y   d S )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datar1   target_namestargetr   pytestwarnsUserWarningr2   )r<   
n_featuresrs   rh   warning_messages        rA   test_lr_liblinear_warningry   t   s     IOIzt{+F	;q	9	9	9B	 
 
k	9	9	9 " "
ty&!!!" " " " " " " " " " " " " " " " " "s   !BBBc                      t          t          d          t          t                     t          t          d          t          t                     d S )N
   )rF   )rB   r   r:   Y2rI   rJ   rC   rA   test_predict_3_classesr}      sD    (2...2666(2...b99999rC   r9   r#   ovr)rF   rl   multi_classr"   multinomialr$   r&   {Gz?*   )rF   rl   tolr   r!   r'   r%   c                    t           j        j        \  }}t           j        t           j                 }| j        dk    rft          j                    5  t          j        dt                     | 
                    t           j        |           ddd           n# 1 swxY w Y   n | 
                    t           j        |           t          t          j        |          | j                   |                     t           j                  }t          j        ||k              dk    sJ |                     t           j                  }t%          |                    d          t          j        |                     t           j        |                    d                   }t          j        ||k              dk    sJ dS )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)   r,   )rp   rq   r1   rr   rs   rl   warningscatch_warningssimplefilterr   r2   r   r/   r0   r4   r3   meanr5   r   r6   r7   r8   )r9   r<   rw   rs   predr@   s         rA   test_predict_irisr      s   : !IOIzt{+F
zW$&& 	' 	'!(,>???GGDIv&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 		6"""ry((#,777;;ty!!D746>""T))))%%di00MM%%1%--rwy/A/ABBB]11q199:D746>""T))))))s   ;BBBLRc                 $   t           j        t           j        }}dD ]^}d| d} | |d          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   _dD ]^}d|z  } | |d	d
          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   _dD ]^}d|z  } | |dd
          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   _dD ]m}d                    |          } | |d          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   n| t          u r[d} | dd          }t          j        t
          |          5  |                    ||           d d d            d S # 1 swxY w Y   d S d S )Nr#   r%   zSolver z( does not support a multinomial backend.r   rl   r   rn   )r"   r$   r%   r&   z1Solver %s supports only 'l2' or 'none' penalties,l1r~   )rl   penaltyr   )r"   r$   r%   r&   r'   z1Solver %s supports only dual=False, got dual=TrueT)rl   dualr   )r#   z>Only 'saga' solver supports elasticnet penalty, got solver={}.
elasticnet)rl   r   z8penalty='none' is not supported for the liblinear solvernoner#   )r   rl   )	rp   rq   rs   rt   raises
ValueErrorr2   formatr   )r   r:   r;   rl   msgrh   s         rA   test_check_solver_optionr      s   9dkqA 3  HHHHRv=999]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 C  AFJRvt???]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	J  AFJRvDe<<<]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	    NUU
 
 Rv|444]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 
HR{333]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  sZ   A..A2	5A2	,CC	C	D00D4	7D4	=F  F$	'F$	HH
Hrl   r"   r$   r&   r'   c                    t           j        dk                        t          j                  }t          j        ddg          |         }t          | ddd          }|                    t           j        |           |j	        j
        dt           j        j
        d         fk    sJ |j        j
        d	k    sJ t          |                    t           j                  |           t          | ddd
          }|                    t           j        |           |j        t          j        |                    t           j                  d                   }t          j        ||k              dk    sJ d S )Nr   setosaz
not-setosar   r     )rl   r   r!   max_iterr)   r)   F)rl   r   r!   rG   r,   ?)rp   rs   astyper/   intparrayr   r2   rq   coef_r1   
intercept_r   r3   r4   r8   predict_log_probar   )rl   rs   r9   mlrr   s        rA   test_multinomial_binaryr      sJ    kAo%%bg..FXx.//7F
=rD  C GGDIv9?q$)/!"455555>4''''s{{49--v666
=rQV  C GGDIv<	#"7"7	"B"BKKKLD746>""S((((((rC   c                    t          |           \  }}t          ddd|           }|                    ||           |                    |          }|                    |          }t          j        |          t          j        |          t          j        |           z   z  }t
          j        d|z
  |f         }t          ||           d S )Nr    r   r'   MbP?)r   rl   r   r!   r)   )	r   r   r2   decision_functionr5   r/   expc_r   )global_random_seedr:   r;   r9   decisionprobaexpected_proba_class_1expected_probas           rA   %test_multinomial_binary_probabilitiesr      s     ,>???DAq
!'	  C GGAqMMM$$Q''Ha  EVH--1A1ABFH9DUDU1UVU1557MMNN~.....rC   c                     t           j        j        \  } }t           j        t           j                 }t          t           j                  }t          d                              ||          }|                    |          }|	                                 t          j        |j                  sJ |                    |          }t          j        |          }|                    |          }|                                 |                    |          }	t          ||           t          ||           t          ||	           d S Nr   r    )rp   rq   r1   rr   rs   r   r   r2   r   sparsifyr   issparser   
coo_matrixdensifyr   )
r<   rw   rs   r:   r9   pred_d_dpred_s_dsp_datapred_s_spred_d_ss
             rA   test_sparsifyr     s    IOIzt{+FdiA
!
,
,
,
0
0F
;
;C$$Q''HLLNNN?39%%%%%$$Q''H""G$$W--HKKMMM$$W--Hh111h111h11111rC   c                  ^   t           j                            d          } |                     d          }t          j        |j        d                   }d|d<   t          d          }|d d         }t          j        t                    5  |
                    t          |           d d d            n# 1 swxY w Y   t          j        t                    5  |
                    ||                              |                     d                     d d d            d S # 1 swxY w Y   d S )Nr   )   r{   r    r(   )ra      )r/   randomRandomStaterandom_sampler7   r1   r   rt   r   r   r2   r:   r3   )rngX_y_r9   y_wrongs        rA   test_inconsistent_inputr   *  s   
)


"
"C			7	#	#B	!		BBqE
!
,
,
,C "gG	z	"	"  7               
z	"	" < <B 1 1' : :;;;< < < < < < < < < < < < < < < < < <s$   B44B8;B8=D""D&)D&c                      t          d          } |                     t          t                     d| j        d d <   d| j        d d <   t          |                     t                    d           d S r   )r   r2   r:   rH   r   r   r   r   r9   s    rA   test_write_parametersr   >  sf    
!
,
,
,CGGArNNNCIaaaLCN111c33A66:::::rC   c                  (   t          j        t          t           j                  } t           j        | d<   t          d          }t          j        t                    5  |	                    | t                     d d d            d S # 1 swxY w Y   d S )Ndtyper   r)   r   r    )r/   r   r:   float64nanr   rt   r   r   r2   rH   )Xnanlogistics     rA   test_nanr   G  s     8ARZ(((DDJ!q111H	z	"	"  T2                 s   BBBc                     t           j                            d          } t          j        |                     dd          ddgz   |                     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 ]f\  }}	t          |	d	d
|ddd          }
|

                    ||           |
j                                        }t          |||         dd|z             gdD ]}dg}  |t                    |||d|ddd          \  }}}t          |d         dddd|          }
|

                    ||           t          j        |
j                                        |
j        g          }t          ||d         dd|z             d S )Nr   rE   r*   r)   r(   rb   r{   r&   r'   Fh㈵>  r~   )rc   rG   r   rl   r   r   r!   )rF   rG   r   rl   r   r!   r   zwith solver = %s)decimalerr_msg)r"   r$   r%   r#   r&   r'        @@ư>g     @)rc   r   rl   intercept_scalingr!   r   )rF   r   r   r!   r   rl   )r/   r   r   concatenaterandnlogspacer   r   	enumerater   r2   r   ravelr   r   )r   r:   r;   rc   frl   coefs_irF   rh   lr_coefs               rA   test_consistency_pathr   R  s_   
)


"
"C
		#q))QF2CIIc14E4EFGGA	
c	RD3JA	Q2		BA "  3qq233

 

 

r1 bMM 	 	DAq##!  B FF1aLLLhnn&&G%q16H66Q    	" X 
 
U3qq233%	
 	
 	
r1  e%
 
 
 	q!."(.."2"2BM!BCC!U1Xq2Dv2M	
 	
 	
 	
 	
-
 
rC   c            
         t           j                            d          } t          j        |                     dd          ddgz   |                     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            n# 1 swxY w Y   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 d S )Nr   rE   r*   r)   r(   r           )rc   r   r   r!   verboselbfgs failed to convergez!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r/   r   r   r   r   rt   ru   r   r   r.   messageargs)r   r:   r;   rc   recordwarn_msgs         rA   .test_logistic_regression_path_convergence_failr     so   
)


"
"C
		#q))QF2CIIc14E4EFGGA	
c	RD3JA
B
 
(	)	) 
V!qRS11a	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 v;;!ay %a(H%1111.(::::x''''2h>>>>>>s   B//B36B3c                     t          dd          \  } }t          ddddd          }|                    | |           t          ddddd          }|                    | |           t          d	dddd          }|                    | |           t          |j        |j                   d
}t          j        t          |          5  t          |j        |j                   d d d            d S # 1 swxY w Y   d S )N   r   r<   r!   Tr   r#   r~   )r!   r   r   rl   r      z)Arrays are not almost equal to 6 decimalsrn   )r   r   r2   r   r   rt   r   AssertionError)r:   r;   lr1lr2lr3r   s         rA    test_liblinear_dual_random_stater     sb   !<<<DAq
  C GGAqMMM
  C GGAqMMM
  C GGAqMMM ci333
5C	~S	1	1	1 8 8!#)SY7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   
C22C69C6c                  6   d\  } }t           j                            d          }|                    | |          }t          j        |                    d|                    |          z                      }||                                z  }||                                z  }t          dgdddd	          }|	                    ||           t          dddd
          }|	                    ||           t          |j        |j                   t          |j        j        d|f           t          |j        ddg           t!          |j                  dk    sJ t          j        t%          |j                                                            }t          |j        ddd|f           t          |j        j        d           t          j        t%          |j                                                            }t          |j        d           d S )N)2   r   r   r         ?Fr#   r~   ra   )rc   rG   rl   r   re   )rF   rG   rl   r   r)   r(   r*   r   )r)   ra   r)   )r/   r   r   r   signdotr   stdr   r2   r   r   r   r   r1   r4   r.   asarraylistcoefs_paths_valuesCs_scores_)	r<   rw   r   X_refr;   lr_cvrh   coefs_pathsrT   s	            rA   test_logistic_cvr    s   !Iz
)


"
"CIIi,,E
		!cii
3334455A	UZZ\\E	UYY[[E 5kuQR  E 
IIeQ	
U;E
 
 
B FF5!bh444u{(1j/:::u~Aw///u~!####*T%"4";";"="=>>??K{(1aJ*?@@@uy---ZU]11334455Fv|Y/////rC   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	          }|                                }d
D ]}||= |                    ||         ||                    |D ]Y}	t          | |	z             }
t          t          ||||fdg|
d|d         d          |
|||         ||                              Zd S )NrE   r   ra      )r<   r!   r>   n_informativeP   r   r   )rF   r   )rF   rm   
warm_start)rc   rd   r*   )	r   r/   aranger   
get_paramsr2   r   r   r   )rd   multiclass_agg_listr:   r;   traintestrh   paramskey	averagingscorers              rA   "test_logistic_cv_multinomial_scorer$    s3   & A!  DAq )B--2s!3!34E	c}	=	=	=B]]__F,  3KKFF1U8QuX( 
 
	Gi/00!!1eT'*eV ?E  F2qw$((		
 	
 	
 	

 
rC   c                     d\  } }}t          | ||dd          \  }}t                                          g d                              |          }t	          j        |          dz
  }t          d          }t          dd	          }t          d          }t          dd	          }	|                    ||           |                    ||           |                    ||           |	                    ||           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        |                    |                              g dk    sJ t          t	          j        |	                    |                              g dk    sJ t          dd
ddd                              ||          }	t          t	          j        |	                    |                              ddgk    sJ d S )N)r   r   ra   ra   r   )r<   rw   r>   r  r!   )barbazfoor)   r   r   )r   rc   r*   )class_weightr   r&  r'  )r   r   r2   inverse_transformr/   r   r   r   r   r   sortedr4   r0   r3   )
r<   rw   r>   r
  r;   y_strrh   r  lr_str	lr_cv_strs
             rA   2test_multinomial_logistic_regression_string_inputsr0    s{   '/$Iz9"  HE1 NN44455GGJJE
aA		6	6	6B ]qAAAEM:::F$1EEEIFF5!	IIeQ
JJueMM%bh555&/""&;&;&;;;;;ek9?;;;&/""&;&;&;;;;;)$%%)>)>)>>>>> ")FNN51122337L7L7LLLLL")I--e445566:O:O:OOOOO #q33  	c%  ")I--e4455665%.HHHHHHrC   c                     t          ddd          \  } }d| | dk     <   t          j        |           }t                      }|                    | |           t                      }|                    ||           t          |j        |j                   t          |j        |j                   |j        |j        k    sJ d S )Nr   r   r   r<   rw   r!   r   r   )	r   r   
csr_matrixr   r2   r   r   r   rf   )r:   r;   csrr9   clfss        rA   test_logistic_cv_sparser6  <  s    JJJDAqAa#gJ

A

C

 
 CGGAqMMM!!DHHS!dj#)444dos~>>>7cfrC   c            	         t           j        t           j        }} | j        \  }}d}t	          |          }t          |                    | |                    }t          |d          }|                    | |           t          |d          }|	                                }	d|	|	dk    <   |                    | |	           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        d|d|dz   fk    sJ |j        j        d	k    sJ t          j        t          |j                                                            }|j        d|dfk    sJ d
D ]^}|dv rdnd}t          |d|d|dv rdndd          }|dk    rt-          |           } |                    | |           |                    | |          }|                    | |          }||k    sJ |j        j        |j        j        k    sJ t!          |j        g d           t          j        t          |j                                                            }
|
j        d|d|dz   fk    sJ |j        j        d	k    sJ t          j        t          |j                                                            }|j        d|dfk    sJ `d S )Nr*   r~   )re   r   r)   r   ra   r   r)   r*   r{   )r{   r   r        r   r   r   r   )rl   r   r   r!   r   re   r"   )rp   rq   rs   r1   r   r  splitr   r2   copyr   r	  r   r   r/   newaxisr   r4   r  r  r  r  r   rZ   )r  rs   r<   rw   n_cvre   precomputed_foldsr9   clf1target_copyr  rT   rl   r   	clf_multimulti_score	ovr_scores                    rA   test_ovr_multinomial_irisrE  J  s}   It{6E!KIz
 D			BRXXeV4455 "3
G
G
GCGGE6  #4%HHHD++--K$%Kq !HHUK    CKNDLO444CN122&888CIaLQQQ/<<< 9?q*o----s|YYY///*T#"2"9"9";";<<==KD"j1n =====7=E!!!!ZS[//112233F<AtR=(((( 8 - - O3333(%/11t
 
 
	 W%LLEeV$$$ooeV44IIeV,,	Y&&&& y)/"777779-yyy999ji&<&C&C&E&E!F!FGG Qb*q.$AAAAA}"e++++D!2!9!9!;!;<<==|4},,,,,5- -rC   c                     t          ddd          \  t          ddd          fd	t          D             } t          j        | d
          D ]-\  }}t          | |         j        | |         j        d           .dS )z)Test solvers converge to the same result.r{   r   r   )rw   r  r!   Fr   r~   )rG   r!   r   c                 V    i | ]%}|t          dd |i                              &S )rl   rJ   )r   r2   ).0rl   r:   r   r;   s     rA   
<dictcomp>z4test_logistic_regression_solvers.<locals>.<dictcomp>  sO        	";;&;F;;??1EE  rC   r*   rra   r   Nr   dictSOLVERS	itertoolscombinationsr   r   )
regressorssolver_1solver_2r:   r   r;   s      @@@rA    test_logistic_regression_solversrU    s    "AANNNDAqBEJJJF       J
 (4Z1EEE 
 
(!x &
8(<(BA	
 	
 	
 	
 	

 
rC   c                  $   t          ddddd          \  d} t          d| dd	
          dddfdt          D             }t          j        |d          D ]-\  }}t          ||         j        ||         j        d           .dS )zATest solvers converge to the same result for multiclass problems.r   r{   ra   r   r<   rw   r  r>   r!   Hz>Fr   r~   )rG   r   r!   r   r   '  r   c                     i | ]:}|t          d|                    |d           d                              ;S )rE   )rl   r   rJ   )r   getr2   )rH  rl   r:   r   solver_max_iterr;   s     rA   rI  z?test_logistic_regression_solvers_multiclass.<locals>.<dictcomp>  sl         	" 
O$7$7$D$D
 
HN
 

#a))  rC   r*   rJ  rb   rL  NrM  )r   rR  rS  rT  r:   r   r\  r;   s       @@@@rA   +test_logistic_regression_solvers_multiclassr]    s    2QR  DAq C3RUSSSF #E22O       	  J (4Z1EEE 
 
(!x &
8(<(BA	
 	
 	
 	
 	

 
rC   weightrP   g?r   rR   r8  r*  balancedc           	         t          |           }|dk    r| }t          ddddd|d          \  }}t          ddd|	          }t          dd
di|}|                    ||           t          t                    t          dg          z
  D ]^}t          dd
|i|}|dv r|                    ddd           |                    ||           t          |j	        |j	        d           _dS )z+Test class_weight for LogisticRegressionCV.r^  r:  ra   r   )r<   rw   
n_repeatedr  n_redundantr>   r!   r)   Fr~   )rc   rG   r   r*  rl   r"   r   r   rY  )r   r   r!   r   rtolNrJ   )
r.   r   rN  r   r2   setrO  
set_paramsr   r   )	r^  r*  r>   r:   r;   r   	clf_lbfgsrl   r9   s	            rA   (test_logistic_regressioncv_class_weightsrh    s0    FIx  DAq !	  F %>>G>v>>IMM!Qg,,gY/ ? ?";;&;F;;_$$NNte!NDDD1	9?>>>>>? ?rC   c            
         t          ddddd          \  } }|dz   }t          t          fD ]}dd	d
d}|t          u r|                    ddd           dD ]}} |d#d|i|} |d#d|i|}|                    | |           |                    | |t          j        |j        d                              t          |j	        |j	        d           ~ |d#i |}|                    | ||           t          t                    t          d          z
  D ]o} |d#||dk    rdndd|}	t                      5  |	                    | ||           d d d            n# 1 swxY w Y   t          |j	        |	j	        d           pdD ]d} |d#|dddd|}
|
                    | |            |d#d|i|}|                    | ||           t          |
j	        |j	        d           et          dd	ddddddd
          }|                    | |           t          dd	dddd
          }	|	                    | ||           t          |j	        |	j	        d           t          dd	ddddd dd
!          }|                    | |           t          dd	dd dd
"          }	|	                    | ||           t          |j	        |	j	        d           d S )$Nr   r   ra   r*   r   rW  r)   r   Fr~   )r!   rG   r   )rc   re   )r"   r#   rl   rY   -C6?rc  )r"   r'   r&   绽|=r   rl   r   r   )rl   r*  r#   r   )rl   rG   r*  r   r   r!   r   )rl   rG   r   r   r!   r   rb   rL  l2T)rl   rG   r*  r   r   r!   r   )rl   rG   r   r   r!   r   rJ   )r   r   r   updater2   r/   r7   r1   r   r   re  rO  r   r   )r:   r;   rY   r   kwrl   clf_sw_noneclf_sw_onesclf_sw_lbfgsclf_sw	clf_cw_12	clf_sw_12clf_cws                rA   'test_logistic_regression_sample_weightsrx    s   !qq  DAq EM!#78 "I "I 5OO%%%IIQa(())) - 	M 	MF"11F1b11K"11F1b11KOOAq!!!OOAq
0C0CODDDK-{/@tLLLLL rxxBxxA];;;'llS):%;%;; 	I 	IFRTvFeOO55TTQSTTF "" > >

1a}
===> > > > > > > > > > > > > > >L.4HHHHH
 - 	I 	IFJ&1||JJrJJIMM!Q//&/B//IMM!QmM<<<IOY_4HHHHH	I  q\\  F JJq!  F JJq!]###flFL!DDDDq\\  F JJq!  F JJq!]###flFL!DDDDDDs   <E!!E%(E%c                     t          j        |           }t          d||           }t          t	          ||                    }|S )Nr_  )r=   r;   )r/   r0   r   rN  zip)r;   r=   r*  class_weight_dicts       rA    _compute_class_weight_dictionaryr|  0  sA    illG'
GqIIILS,7788rC   c                     t          t          j                  } | dd d d f         }t          j        dd          }d}t	          |          }|D ]n}t          |dd          }t          |d|          }|                    ||           |                    ||           t          |j        |j        d           o| ddd d f         }t          j        dd         }t	          |          }t          t                    t          d	          z
  D ]n}t          |d
d          }t          |d
|          }|                    ||           |                    ||           t          |j        |j        d           od S )N-   )r"   r$   r   r_  )rl   r   r*  rb   rL  rE   r   r~   r  )r   rp   rq   rs   r|  r   r2   r   r   re  rO  )X_irisr:   r;   solversr{  rl   r@  clf2s           rA   &test_logistic_regression_class_weightsr  8  s   49FrssAAAvABCCA$G8;; 	E 	E!}:
 
 
 "}CT
 
 
 	AA!$*dj!DDDDD 	r#vqqqyABsFA8;;g,,_!5!55 	E 	E!u:
 
 
 "u;L
 
 
 	AA!$*dj!DDDDD	E 	ErC   c            	         d\  } }}t          | |d|d          \  }}t          d                              |          }d}t          |d	          }t          |dd
          }|                    ||           |                    ||           |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        ||fk    sJ |	j        j        ||fk    sJ t          |j        |j        d           t          |j        |	j        d           t          |j        |j        d           dD ]e}t          |ddddg          }
|
                    ||           t          |
j        |j        d           t          |
j        |j        d           fd S )N)r   r   ra   r{   r   rW  F)	with_meanr"   r   r   )rl   r   rG   )r&   r'   r$   r   r   rX  )rl   r   r!   r   r   )rl   r   r!   r   r   rG   r   rc  r   r   r   )rl   r   r   r   rc   g{Gz?)
r   r   fit_transformr   r2   r   r1   r   r   r   )r<   rw   r>   r:   r;   rl   ref_iref_wclf_iclf_wclf_paths              rA   $test_logistic_regression_multinomialr  ]  s|    (1$Iz9  DAq 	'''55a88A Ff-HHHE=  E 
IIaOOO	IIaOOO;J 77777;J 77777. G G"%
 
 
 #%
 
 
 			!Q		!Q{ Y
$;;;;;{ Y
$;;;;; 	U[t<<<<U[t<<<<(%*:FFFFF
 8 J J'DdSVRW
 
 
 	Q$????+U-=DIIIIIJ JrC   c                     t          ddd          \  } }t          ddd          }|                    | |           t          j        d          } t          |                    |           t          j        d                     d S )	Nr   r   r2  Fr#   r~   )rG   rl   r   )r   r   )r   r   r2   r/   zerosr   r3   r:   r;   r9   s      rA   %test_liblinear_decision_function_zeror    s{     qqIIIDAq
5RW
X
X
XCGGAqMMM 	As{{1~~rx{{33333rC   c                      t          ddd          \  } }t          dd          }|                    t          j        |           |           d S )Nr{   r   r   r2  r#   r~   r   r   r   r2   r   r3  r  s      rA   test_liblinear_logregcv_sparser    sS     JJJDAq
ku
E
E
ECGGFa  !$$$$$rC   c                      t          ddd          \  } }t          dd          }|                    t          j        |           |           d S )Nr{   r   r   r2  r'   r   rm  r  r  s      rA   test_saga_sparser    sS     JJJDAq
f$
7
7
7CGGFa  !$$$$$rC   c                      t          d          } |                     t          t                     | j        dk    sJ d S )NF)rG   r   )r   r2   r:   rH   r   r   s    rA   "test_logreg_intercept_scaling_zeror    s>     5
1
1
1CGGArNNN>S      rC   c            	         t           j                            d          } d}t          |dd          \  }}|                     |df          }t          j        |df	          }t          j        |||fd
          }t          dddddd          }|                    ||           t          ddddddd          }|                    ||           t          |j
        |j
                   t          |j
        ddd f         t          j        d                     t          |j
        ddd f         t          j        d                     d S )Nr   r   r   r   r2  ra   sizer*   r1   r)   r,   r   r   r#   Fr~   rl  r   rF   rl   rG   r   r   r'   r   r   rF   rl   rG   r   r   r   r   )r/   r   r   r   normalr7   r   r   r2   r   r   r  )r   r<   r:   r;   X_noise
X_constantlr_liblinearlr_sagas           rA   test_logreg_l1r    sh    )


#
#CIrPQRRRDAqjjy!nj--G	1~...J
7J/a888A%
  L Q 
  G KK1gm\-?@@@ l0BCC8"(1++FFFgmArssF3RXa[[AAAAArC   c            	         t           j                            d          } d}t          |dd          \  }}|                     d|df          }t          j        |d	f
          }t          j        |||fd          }d||dk     <   t          j        |          }t          dddddd          }|
                    ||           t          ddddddd          }|
                    ||           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          }|
                    |                                |           t          |j        |j                   d S )Nr   r   r   r   r2  rP   ra   )r   r  r*   r  r)   r,   r   r   r#   Fr~   rl  r  r'   r   r  r  r   )r/   r   r   r   r  r  r   r   r3  r   r2   r   r   toarray)	r   r<   r:   r;   r  r  r  r  lr_saga_denses	            rA   test_logreg_l1_sparse_datar    s    )


#
#CIrPQRRRDAqjjs)Qj88GA///J
7J/a888AAa!eH!A%
  L Q 
  G KK1gm\-?@@@ l0BCC8"(1++FFFgmArssF3RXa[[AAA '
  M aiikk1%%%gm]-@AAAAArC   random_seedr   r   rn  c                     t          dd|           \  }}t          d|| dd          }t          ddgd	d
|}|                    ||           t	          dddi|}|                    ||           t          |j        |j                   d S )NrE   r   r2  r'   r   -q=)rl   r   r!   r   r   r   T)rc   refitrF   rJ   )r   rN  r   r2   r   r   r   )r  r   r:   r;   common_paramsr  rh   s          rA   !test_logistic_regression_cv_refitr    s     +VVVDAq   M !GSEGGGGE	IIaOOO		3	3c	3]	3	3BFF1aLLLek2844444rC   c                     t          ddddd          \  } }t          dd          }|                    | |           t          ||                    |                     }t          d	d          }|                    | |           t          ||                    |                     }||k    sJ t          ||                    |                     }t          ||                    |                     }||k    sJ d S )
Nr{   r   r   ra   )r<   rw   r!   r>   r  r   r"   r   rl   r~   )r   r   r2   r   r5   _predict_proba_lr)r:   r;   rB  clf_multi_lossclf_ovrclf_ovr_lossclf_wrong_losss          rA   %test_logreg_predict_proba_multinomialr  8  s   !qPR  DAq #}WMMMIMM!Qa!8!8!;!;<<N U7CCCGKK1Aw44Q7788L.(((( a!8!8!;!;<<Na!<!<Q!?!?@@NN******rC   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                                        }}d||dk    <   |dv r|dk    rt	          j        d           |dk    r| dk    rt	          j        d           t          | d	|d|
          }t	          j        t          |          5  |	                    ||           d d d            n# 1 swxY w Y   |j
        d         | k    sJ d S )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!   rl   rn   )rp   rq   rs   r<  rt   skipr   ru   r   r2   n_iter_)r   r   rl   r   r:   y_binrh   s          rA   test_max_iterr  N  s:   * y$+**,,uAE%1*111k]6R6RUVVV"""x!||EFFF	
 
 
B 
(	8	8	8  
q%               :a=H$$$$$$s   !CCCc                    t           j        t           j        }}| dk    rt          |          }t	          j        |          j        d         }|dk    sJ |                                }d||dk    <   d}d}t          dd| d	          }|	                    ||           |j
        j        d
k    sJ t          d| ||d          }|	                    ||           |j
        j        d||fk    sJ |                    d          	                    ||           |j
        j        |fk    sJ |                    d          	                    ||           |j
        j        |||fk    sJ | dv rd S |                    d          	                    ||           |j
        j        d
k    sJ |                    d          	                    ||           |j
        j        d||fk    sJ d S )Nr"   r   ra   r*   rb   r   r   r   )r   rF   rl   r!   r   )r   rl   rc   re   r!   r)   r~   r)  r   r   )rp   rq   rs   r   r/   r0   r1   r<  r   r2   r  r   rf  )	rl   r:   r;   r>   r  n_Cs	n_cv_foldr9   clf_cvs	            rA   test_n_iterr  x  s    9dkqA!HH	!"1%I>>>> FFHHEE%1*DI V"
M
M
MCGGAu;$$$$!DYR  F JJq%>Ay$#77777 NNuN%%))!Q///;,,,,
%((,,Q222>Iy$#????? 111 NN}N--11!Q777;$$$$
-0044Q:::>Ay$#7777777rC   r  )TFrG   c           
      >   t           j        t           j        }}| dk    r|dk    rd S t          d||| d|          }t	          t
                    5  |                    ||           |j        }d|_        |                    ||           d d d            n# 1 swxY w Y   t          j
        t          j        ||j        z
                      }d| d	|d
t          |          dt          |          }	|rd|k    s
J |	            d S |dk    s
J |	            d S )Nr%   r   rk  r   )r   r   r  rl   r!   rG   )categoryr)   zWarm starting issue with z solver in z mode with fit_intercept=z and warm_start=       @)rp   rq   rs   r   r   r   r2   r   r   r/   r6   absstr)
rl   r  rG   r   r:   r;   r9   coef_1cum_diffr   s
             rA   test_warm_startr    s{    9dkqA"""{m'C'C
#  C 
"4	5	5	5  11               vbfVci/0011HH 66;;;M 2 2 2 2C
OOO	E 
  #X~~~s~~~~~#~~~s~~~~~s   ;BBB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          \  }}t          j        |          }||f||ffD ]\  }}dD ]}|j        d         }t          j	        d	dd          D ]}	t          d
||	z  z  dddd|dd          }
t          d
||	z  z  dddd|dd          }|
                    ||           |                    ||           t          |
j        |j        d           d S )Nra   r)   r*   r   r   r   r2  )r   rn  r(   r   r'   r~      Fr   )rF   rl   r   r   rG   r   r!   r   r#   )r
   rq   rs   r/   r   r   r   r3  r1   r   r   r2   r   r   )rp   r:   r;   X_binr  X_sparsey_sparser   r<   alphar'   r#   s               rA   test_saga_vs_liblinearr    s   ;;D9dkqA
sQwA
sQwAa1fIEa1fIMAE,!  Hh  **H(H!56 J J1# 	J 	JG
IRA.. J J)Y./! % "'#!"	 	 	 /Y./& % "'#!"	 	 		 Aa###)$*ioqIIII5J	JJ JrC   )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                                        t          j                  }t          j        t                                        t          j                  }t          j        t                                        t          j                  }t          j        t                                        t          j                  }t          j
        t          t          j                  }t          j
        t          t          j                  }	d}
t          | |d|
|	          }t          |          }|                    ||           |j        j        |k    sJ t          |          }|                    ||           |j        j        |k    sJ t          |          }|                    ||           |j        j        t          j        k    sJ t          |          }|                    |	|           |j        j        t          j        k    sJ d
|
z  }t           j        dk    r	t$          rd}t'          |j        |j                            t          j                  |           | dk    r|rd}t'          |j        |j        |           t'          |j        |j        |           d S )Nr   r   zSolver=z' does not support multinomial logistic.r#   r   gMb@?r   )rl   r   r!   r   rG   gQ@ntr   atolr'   rP   )rt   r  r/   r   float32r   r:   r   rH   r   r3  r   r	   r2   r   r   osnamer   r   )rl   r   rG   
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                    rA   test_dtype_matchr    s    111k]6R6RMfMMMNNN%44"*J8A;;bj))D8B<<rz**D8A;;bj))D8B<<rz**D#ARZ888K#ARZ888KJ!#  H (OOE	IIdD;
**** ??L[$'''#z1111 (OOE	IIdD;
**** ??L[$'''#rz1111 j D	w$9 EK!3!3BJ!?!?dKKKKM EK!3$????EK!3$??????rC   c                  |   t           j                            d          } t          j        |                     dd          ddgz   |                     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          ||                    ||          	                    |                    }t          d          D ]}|                    ||           t          ||	                    |                    }t          ||d           d S )Nr   rE   r*   r)   r(   r   r&   F)r   rl   r  r!   Tr   r   rc  )r/   r   r   r   r   r   r   r   r2   r5   ranger   )r   r:   r;   lr_no_wslr_wslr_no_ws_lossr   
lr_ws_losss           rA   test_warm_start_converge_LRr  N  s<    )


"
"C
		#q))QF2CIIc14E4EFGGA
!sbTCZ'((A!!%EPQ  H !%Dq  E QQ 2 2 @ @ C CDDM1XX  		!Q!U003344JM:D999999rC   c            
         t          d          \  } }d}d}t                      }dD ]H}t          ||dd|dd	          }|                    | |           |                    |j                   I|\  }}}	t          j        ||dd
          rJ t          j        ||	dd
          rJ t          j        |	|dd
          rJ d S )Nr   r    r  rR   )r   r   rn  r'   r   r  )r   rF   rl   r!   l1_ratior   r   rP   )rd  r  )r   r  r   r2   appendr   r/   allclose)
r:   r;   rF   r  coeffsr   rh   elastic_net_coeffs	l1_coeffs	l2_coeffss
             rA   test_elastic_net_coeffsr  c  s     A...DAqAHVVF-    
 
 
 	q!bh/5,	9{-yqsKKKKKK{-yqsKKKKKK{9iacBBBBBBBBrC   rF   )r   rP   r)   r{   rE   r       .Azpenalty, l1_ratio)r   r)   )rn  r   c                 
   t          d          \  }}t          d| |ddd          }t          || ddd          }|                    ||           |                    ||           t          |j        |j                   d S )Nr   r    r   r'   r   )r   rF   r  rl   r!   r   r   rF   rl   r!   r   )r   r   r2   r   r   )rF   r   r  r:   r;   lr_enetlr_expecteds          rA   "test_elastic_net_l1_l2_equivalencer    s    
 A...DAq 
  G %1V!  K KK1OOAqgm[->?????rC   )r   r)   rE   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 ]}|                    ||           |	                    ||          |
                    ||          k    sJ |	                    ||          |                    ||          k    sJ d S )Nr9  r   r    r  r)   r   r   r'   r   r  T)r  r   rn  )r   r   r/   linspacer   r   r2   rZ   )rF   r:   r;   X_trainX_testy_trainy_test
param_gridenet_clfgsl1_clfl2_clfr9   s                rA   test_elastic_net_vs_l1_l2r    sS   
 s333DAq'711'M'M'M$GVWfbk!Q223J!&qd  H 
h
$	7	7	7B&qd  F  &qd  F FF# " "!!!!88FF##v||FF'C'CCCCC88FF##v||FF'C'CCCCCCCrC   r*   rb   r  )rP   rR   r   c           	      L    t          ddddddd          \  t                    t          ddd d	
          }t          ddd d	          }|                               |                                fd} ||           ||          k     sJ d S )Nr   r*   r   r{   r   r<   r>   rw   r  rb  ra  r!   r   r'   F)r   rl   r!   rF   r  rG   rn  )r   rl   r!   rF   rG   c                     | j                                         }t          |                                         z  }|t	          j        t	          j        |                    z  z  }|dz
  dz  t	          j        ||          z  z  }|S )Nr   rR   )r   r   r   r5   r/   r6   r  r  )rh   coefobjrF   r:   r  r;   s      rA   enet_objectivezEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective  s    x~~(1b..q11222x"&....h#%tT(:(:::
rC   )r   r   r   r2   )rF   r  r  lr_l2r  r:   r;   s   ``   @@rA   -test_LogisticRegression_elastic_net_objectiver    s      DAq 	aA 
  G V!q  E KK1	IIaOOO        >'""^^E%:%:::::::rC   )r~   r   c           
      0   | 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          }|                    ||           ||d}t          ddd| d          }t          |||          }	|	                    ||           |	j	        d         |j
        d         k    sJ |	j	        d         |j        d         k    sJ d S )Nr~   r   r    rE   ra   r<   r>   r  r!   r   r)   rb   r   r'   r   r   rc   rl   re   	l1_ratiosr!   r   r   rF   r  r   rl   r!   r   r   re   r  rF   )r   r   r/   r  r   r   r2   r   r   best_params_	l1_ratio_rf   )
r   r:   r;   re   r  rc   lrcvr  rh   r  s
             rA   2test_LogisticRegressionCV_GridSearchCV_elastic_netr    sV   
 e #22211"Qaa
 
 
1 
		BAq!$$I	RA		B	 	 	D 	HHQNNNy11J	
 
 
B 
b*	,	,	,BFF1aLLL?:&$.*;;;;;?3471:------rC   c            
         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          }	|	                    ||           ||d}
t          d
dddd          }t          ||
|          }|                    ||           |	
                    |          |
                    |          k                                    dk    sJ |	
                    |          |
                    |          k                                    dk    sJ d S )NrE   ra   r   r  r    r   r)   r  rb   r   r'   r~   r   r  r  r  r  rQ   )r   r   r   r/   r  r   r   r2   r   r   r3   r   )r:   r;   r  r  r   r  re   r  rc   r  r  rh   r  s                rA   6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovrr    s    !!  DAq (811'M'M'M$GVWf			BAq!$$I	RA		B	 	 	D 	HHWgy11J	
 
 
B 
b*	,	,	,BFF7G LL!!RZZ%8%88>>@@CGGGGLL  BJJv$6$66<<>>#EEEEEErC   )rn  r   )r~   r   autoc           
      t   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        |fk    sJ |j        j        |fk    sJ |j	        j        ||fk    sJ d S )Nra   r   r  r   r<   r>   r  rw   r!   r  rb   r   r)   r*   r'   r   F)r   rc   rl   r  r!   r   r   r  )
r   r/   r   r  r   r2   rf   r1   r  r   )	r   r   r>   rw   r:   r;   rc   r  r  s	            rA   "test_LogisticRegressionCV_no_refitr"  :  s    
 IJ  DAq 
RA		B,K1a((				 	 	D 	HHQNNN7=YL((((>I<////:	:6666666rC   c            
         d} d}t          d| | |d          \  }}t          j        ddd          }t          j        ddd	          }d	}t	          d
|d||ddd          }|                    ||           t          j        t          |j        	                                                    }|j
        | ||j        |j        |dz   fk    sJ t          j        t          |j        	                                                    }	|	j
        | ||j        |j        fk    sJ |j        j
        | ||j        |j        fk    sJ d S )Nra   r   r  r   r!  r  rb   r)   r*   r   r'   r~   r   )r   rc   rl   re   r  r   r!   r   )r   r/   r   r  r   r2   r  r  r  r  r1   r  r	  r  )
r>   rw   r:   r;   rc   r  n_foldsr  r  rT   s
             rA   5test_LogisticRegressionCV_elasticnet_attribute_shapesr%  _  sm    IJ  DAq 
RA		BAq!$$IG	 	 	D 	HHQNNN*T$"3":":"<"<==>>K
Q!     ZT\00223344F<IwHHHHH<)Wbgy~!NNNNNNNrC   c                      d} t          j        t          |           5  t          ddd                              t
          t                     d d d            d S # 1 swxY w Y   d S )NzQl1_ratio parameter is only used when penalty is 'elasticnet'\. Got \(penalty=l1\)rn   r   r'   rR   )r   rl   r  )rt   ru   rv   r   r2   r:   rH   )r   s    rA   test_l1_ratio_non_elasticnetr'    s    	.  
k	-	-	- Q Q4EEEII!RPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Qs   1AA #A c           
      R   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          }|                    ||           |                    ||           t          |j        |j        d           d S )Nr9  r*   r   r   r)   r
  r   Fr   r   r   )r   r!   rG   r   r   r  r  lossr   r   r'   )r   r!   rG   r   r   r  rF   rl   rL  )r   r   r   r   r2   r   r   )rF   r  r<   r:   r;   sgdlogs          rA   test_elastic_net_versus_sgdr,    s     I  DAq 	aA
Ag	!	 	 	C 
	 	 	C GGAqMMMGGAqMMMciA>>>>>>rC   c            	      P   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            n# 1 swxY w Y   t          j        t                    5  t          |d         |d         d           d d d            n# 1 swxY w Y   t          j        t                    5  t          |d         |d         d           d d d            d S # 1 swxY w Y   d S )Nr  ra   r*   r   r)   )r<   r>   r  rb  n_clusters_per_classr!   rw   )r   r)   rY  r   r'   r   )r   rc   rl   r!   r   rL  )r   r   rt   r   r   r   )r:   r;   rc   r   r   s        rA   /test_logistic_regression_path_coefs_multinomialr/    s:      DAq 
		B+		!  KE1a 
~	&	& A A!%(E!Ha@@@@A A A A A A A A A A A A A A A	~	&	& A A!%(E!Ha@@@@A A A A A A A A A A A A A A A	~	&	& A A!%(E!Ha@@@@A A A A A A A A A A A A A A A A A As6   A<<B B  CCC/DD"Destr9  )r!   r   ra   r   )r!   re   rc   r   r   c                     | j         j        S r\   )	__class__r]   )xs    rA   <lambda>r4    s    !+& rC   )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	          |                    |          |	                    |                      |||d|          }
|dv ra |||d|          }t	          |
j        |j                   t	          |
                    |          |                    |                     d S  |||d	|          }t	          |
j        |j                   t	          |
                    |          |                    |                     t          j        |j         |||d	|          j                  rJ t          j        |j         |||d	|          j                  rJ d S )
Nc                 `     t                    j        di |                    | |          S )NrJ   )r	   rf  r2   )r:   r;   rp  r0  s      rA   r2   z6test_logistic_regression_multi_class_auto.<locals>.fit  s2    $uSzz$**r**..q!444rC   r{   r)   r   r  r  r~   r   r   )	r   rp   rq   rs   r   r   r5   r/   r  )r0  rl   r2   scaled_datar:   X2y_multir  est_auto_binest_ovr_binest_auto_multiest_ovr_multiest_multi_multis   `            rA   )test_logistic_regression_multi_class_autor@    sT   5 5 5 5 5 	""KDDbDA	QUU	Bk$$B$GqLE3q%VFCCCL#aE&AAAKL&(9:::L..r22K4M4Mb4Q4QRRRSGGGGN111AwE&III,m.ABBB((,,m.I.I".M.M	
 	
 	
 	
 	
 #amFSSS,o.CDDD((,,o.K.KB.O.O	
 	
 	

 ;C5mFCCCI
 
 	
 	
 	
 ;C7fEEEK
 
 	
 	
 	
 	
 	
rC   c                 
   t          dd          \  }}d}t          d | d          }t          j        t          |          5  |                    ||           d d d            n# 1 swxY w Y   t          d | d          }t          d	t          j        | d
          }|                    ||                              |          }|                    ||                              |          }t          ||           d S )Nr   r   r   z&Setting penalty=None will ignore the Crb   )r   rl   rF   rn   )r   rl   r!   rn  )r   rF   rl   r!   )
r   r   rt   ru   rv   r2   r/   infr3   r   )	rl   r:   r;   r   rh   lr_nonelr_l2_C_inf	pred_nonepred_l2_C_infs	            rA   test_penalty_nonerG    s=    A>>>DAq
2C	D1	=	=	=B	k	-	-	-  
q!               !f1MMMG$vA  K Aq!!))!,,IOOAq))11!44My-00000s   A''A+.A+r   r   r   )r   r   r   r   r  c                 b   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          |                              ||          }t          |                              |||          }dD ]D}	 t          ||	          |          }
 t          ||	          |          }t          |
|           Ed S )Nr)   ra   r*   rb   floatr   )r)   r)   r)   r)   r*   r*   r*   r*   r)   r)   r)   r)   r*   r*   r*   r*   intr  r   r    r#   r   )rl   r!   rj  )r3   r5   r   rJ   )r/   r   r   vstackhstackr7   r.   r   r   rf  r	   r2   getattrr   )r   r:   r;   r9  y2rY   base_clfclf_no_weightclf_with_weightmethodX_clf_no_weightX_clf_with_weights               rA   /test_logisticregression_liblinear_sample_weightrU  &  s    	FFFFFFFFFFFFFFFF!	
$ hw'	 	 	A* 	888	 	 	A 
Aq6		B	Aq1u:		BG#a&&1*---MM#a&&((#BMJJJBM!2FFFHH!!&!!!(OO''1--MHoo))"b)NNOC < <8'-88;;<GOV<<Q??):;;;;< <rC   c                     t          dd          \  } }t          d          }ddg}g d}t          d	d
|||ddd          }|                    | |           |j        d                             d          }t          |          D ]w\  }}t          |          D ]b\  }	}
t          d	d
||
ddd          }t          || ||                                          }|||	f         t          j
        |          k    sJ cxd S )Nr   r   r   r   )n_splitsrP   r   )rP   r)   r{   r   r'      r   )r   rl   r  rc   re   r!   r   r   r)   r,   )r   rl   rF   r  r!   r   r   r  )r   r   r   r2   r	  r   r   r   r   rt   approx)r:   r;   re   r  rc   r  avg_scores_lrcvr   rF   jr  rh   avg_score_lrs                rA   'test_scores_attribute_layout_elasticnetr]  [  sU    A>>>DAq	!	$	$	$Bc
I	B	 	 	D 	HHQNNNl1o***22O" H H1$Y// 	H 	HKAx#$!  B +2q!;;;@@BBL"1a4(FM,,G,GGGGGG	HH HrC   c                    t           j        j        \  }}t           j        t           j                 }t          t          t           j                  dd|           }t          t           j                  }|                    ||           t          |j
                            d          dd           | r5|j                            d          t          j        dd	          k     d
S d
S )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   )rF   rl   r   rG   r   r,   rl  r  r  )r  N)rp   rq   r1   rr   rs   r   r.   r   r2   r   r   r6   r   rt   rY  )rG   r<   rw   rs   r9   X_scaleds         rA   (test_multinomial_identifiability_on_irisr`    s    0 !IOIzt{+F

di..!#	  C TYHGGHf CIMMqM))159999 B""fmA5&A&A&AAAAAB BrC   r   g      $@c                 $   t          d          \  }}t          |          }t          j        |          }d|d |dz  <   |                                }t          d|d|           }|                    |||           t          ||           d S )NT)
return_X_yr*   r   r  )r!   r*  r   r   rj  )r
   r.   r/   r7   r<  r   r2   r   )r   r*  r:   r;   rw   Wexpectedr9   s           rA   test_sample_weight_not_modifiedre    s     %%%DAqQJ

AA
avvxxH
\C[  C GGAqG"""Ha     rC   c           	         t          j        ddd          }dD ]4}t          ||t          ||                              d                     5t
          j                            d|j        d         	          }| d
v r\d}t          j
        t          |          5  t          |                               ||           d d d            d S # 1 swxY w Y   d S t          |                               ||           d S )Nr   r{   r4  )r   )indicesindptrint64r*   r   r  )r#   r&   r'   z0Only sparse matrices with 32-bit integer indicesrn   )rl   )r   randsetattrrM  r   r/   r   randintr1   rt   r   r   r   r2   )rl   r:   attrr;   r   s        rA   test_large_sparse_matrixrn    sJ    	B5)))A% ; ;4D))0099::::
	!!'!*--A---@]:S111 	8 	8f---11!Q777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	&)))--a33333s   %CCCc                      t          j        g dg          j        } t          j        g d          }| j        d         dk    sJ t	          dd                              | |           d S )N)rR   g?g?g      ?rQ   gHzG?r   gffffff?)r)   r)   r   r   r)   r)   r   r)   r)   r$   T)rl   rG   )r/   r   Tr1   r   r2   )r:   r;   s     rA   test_single_feature_newton_cgrq    sr     	>>>?@@BA
)))**A71:????k>>>BB1aHHHHHrC   c                  
   t           j        t           j                 } t          d          }d}t	          j        t          |          5  |                    t           j        |            d d d            d S # 1 swxY w Y   d S )Nr   )r   zv`penalty='none'`has been deprecated in 1.2 and will be removed in 1.4. To keep the past behaviour, set `penalty=None`.rn   )	rp   rr   rs   r   rt   ru   FutureWarningr2   rq   )rs   rh   rx   s      rA   #test_warning_on_penalty_string_nonert    s    t{+F	F	+	+	+B	;  
m?	;	;	; " "
ty&!!!" " " " " " " " " " " " " " " " " "s   
!A88A<?A<)rP  r  r   	functoolsr   numpyr/   numpy.testingr   r   r   r   scipyr   rt   sklearn.baser	   sklearn.datasetsr
   r   sklearn.metricsr   r   sklearn.model_selectionr   r   r   r   sklearn.preprocessingr   r   sklearn.utilsr   r   sklearn.utils._testingr   r   sklearn.linear_modelr   r   r   sklearn.exceptionsr   sklearn.linear_model._logisticr   r   r   LogisticRegressionDefaultr   LogisticRegressionCVDefaultmarkfilterwarnings
pytestmarkrO  r:   r3  rI   rH   r|   rp   rB   rK   rj   ry   r}   parametrizer.   rq   r   r   r   r   r   r   r   r   r   r   r   r  r$  r0  r6  rE  rU  r]  rh  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  re  r  r  r  r  r  r  r  r   r  r  r  r"  r%  r'  r,  r/  r@  rG  rU  r]  r`  re  rn  rq  rt  rJ   rC   rA   <module>r     s       				            > > > > > > > > G G G G G G G G              ; ; ; ; ; ; ; ; $ $ $ $ $ $ & & & & & & 3 3 3 3 3 3 0 0 0 0 0 0 4 4 4 4 4 4 3 3 3 3 3 3 > > > > > > > > 9 9 9 9 9 9 9 9 2 2 2 2 2 2 ! ! ! ! ! ! . . . . . . ' ' ' ' ' ' 6 6 6 6 6 6 1 1 1 1 1 1            [''< 
 W6QGGG w:KKK  P!Wq!fq!fvYYYYy{{8 8 8$
Y 
Y 
Y" " "B " " ": : :
 	SS^^KUSSSSS^^GWWWc$)nn[m	
 	
 	
 	c$)nnU%VX	
 	
 	
 	c$)nn	
 	
 	
 	c$)nn%6E	
 	
 	
! .* */ .*8  24HIJJ' ' KJ'T #H#H#HII) ) JI),/ / /*2 2 20< < <(; ; ;  ?
 ?
 ?
D? ? ?,!8 !8 !8H0 0 0: "	bT	x-. 
+&'	"	Hk*+ 
 
 
2&I &I &IR  @- @- @-F
 
 
"
 
 
2 $4$4###6N6N#OPP(J)?@@? ? A@ QP?@TE TE TEn  "E "E "EJ<J <J <J~4 4 4% % %% % %! ! !#B #B #BL2B 2B 2Bj --T4L115 5 21 .-50+ + +, YRYq!__55(>??   "% %#  @? 65&%. 7++.8 .8 ,+.8b 66##g,,k]9K9K*K#L#LMM}55-88(>??!# !# @? 98 65 NM!#H,J ,J ,J^ (>??CCC  5$-88E@ E@ 98  @?
E@P: : :*C C C8 AAABB,y).DEE@ @ FE CB@, 22233D D 43D8 kbk"a3344___55&; &; 65 54&;R (>??*. *. @?*.Z*F *F *FZ $899(FGG 7  7 HG :9 7F(O (O (OVQ Q Q kbk"a3344___55%? %? 65 54%?PA A A@ 	C888!aTCPPP 	'&    7++'
 '
 ,+ '
T 66##g,,k]9K9K*K#L#LMM1 1 NM1* %$GG$u$GG%4HH *< *< *<Z)H )H )HX 5$-88'B 'B 98'BT (F(F(FGGcds*C*CZ)PQQ! ! RQ HG! 7++4 4 ,+4$I I I	" 	" 	" 	" 	"rC   