
    Ug;.                       d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z: ej;        <                    d          Z= eed           Z eed           ZdZ>dd gd dgddggZ?g dZ@g dZA e            ZBd ZCej;        D                    de:          d             ZEd ZFe6d              ZGej;        D                    de:          d!             ZHej;        <                    d"          ej;        D                    d# e eIeBjJ                  d$d%&           e eIeBjJ                  d'(           e eIeBjJ                  d)(           e eIeBjJ                  d*d+d%d,-           e eIeBjJ                  d.d+d%d,-           e eIeBjJ                  d/d%&          g          d0                         ZKej;        <                    d"          ej;        D                    d1eeg          d2                         ZLej;        D                    d1eeg          d3             ZMej;        <                    d"          ej;        D                    d4g d5          d6                         ZNej;        <                    d"          d7             ZOej;        D                    d8e9          d9             ZPd: ZQd; ZRd< ZSd= ZTd> ZUd? ZVd@ ZWej;        D                    dAdBdCgfdDdEdFgfdGdEdFgfdHdCgfdIdEdFgfg          dJ             ZXdK ZYej;        D                    de:          dL             ZZej;        <                    d"          dM             Z[dN Z\dO Z]ej;        D                    dPdQdRdSdQdRdTdUg          ej;        D                    dVdPdWg          dX                         Z^dY Z_dZ Z`ej;        D                    dd[ ge:z             d\             Zad] Zbd^ Zcej;        D                    de:          d_             Zdej;        D                    de:          d`             Zeda Zfdb Zgej;        D                    de:          dc             Zhej;        D                    ddd,g          ej;        D                    dedfdgg          dh                         Zidi Zjej;        <                    d"          ej;        D                    dj ejk        ddk                    ej;        D                    dld%dmg          ej;        D                    dng do          dp                                                 Zlej;        <                    d"          ej;        D                    d4e>          dq                         Zmej;        D                    d4 en eoe>           eod$d/g          z
                      ej;        D                    drds          ej;        D                    dtds          du                                     Zpej;        D                    de:          dv             Zqej;        <                    d"          ej;        D                    dld%dmg          ej;        D                    d4g dw          ej;        D                    dtdxdyg          ej;        D                    de:          dz                                                             Zrd{ Zsd| Ztej;        D                    d}g d~          ej;        D                    dddg          d                         Zuej;        D                    d}g d          d             Zvej;        D                    d} ejw        ddd                    ej;        D                    dg d          d                         Zxej;        D                    dd          d             Zyej;        <                    d"          d             Zzej;        <                    d"          ej;        D                    ded          ej;        D                    dld          d                                     Z{ej;        <                    d"          d             Z|d Z}ej;        D                    d} ejw        ddd                    ej;        D                    dg d          d                         Z~d Zej;        <                    d"          ej;        D                    d ed d           ed dddd          gd           ej;        D                    d4e>          d                                     Zej;        D                    d4 en eoe>           eod$g          z
                      d             Zej;        D                    ddfdxddddgdyddddgdxdddg          d             Zd Zej;        D                    dtdxdyg          d             Zej;        <                    d"          ej;        D                    dlg d          ej;        D                    dVddddUdWg          d                                     Zej;        D                    d4e>          ej;        D                    de:          d                         Zd Zd Zej;                            d          d             Zd Zej;        D                    d4e>          d             Zd Zd ZdS )    N)partial)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)sparse)config_context)clone)	load_irismake_classification)ConvergenceWarning)SGDClassifier)LogisticRegression)LogisticRegressionCV)_log_reg_scoring_path_logistic_regression_path)
get_scorerlog_loss)GridSearchCVStratifiedKFoldcross_val_scoretrain_test_split)OneVsRestClassifier)LabelEncoderStandardScalerscale)l1_min_c)compute_class_weightshuffle)ignore_warningsskip_if_no_parallel)	_IS_32BITCOO_CONTAINERSCSR_CONTAINERSz6error::sklearn.exceptions.ConvergenceWarning:sklearn.*random_state)lbfgs	liblinear	newton-cgnewton-choleskysagsaga   )r   r.   r.   )   r.   r   c                    t          |          }t          j        |          }|j        d         }|                     ||                              |          }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           g/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictionsrG   <   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    csr_containerc                 0   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&   )rG   r   r?   Y1rI   s    rF   test_predict_2_classesrQ   N   s     (a888!R@@@(a888--:J:JBOOO(3Q???BGGG(3Q???qAQAQSUVVV(u1MMMqRTUUUQ???qAQAQSU    rH   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    rF   __init__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__`   s    DJ...DKKKrH   Nc                 t    | j         | j        t          | j                   z           }| xj        dz  c_        |S )Nr.   )rZ   rY   r3   )r[   modelr?   r@   sample_weightscores         rF   __call__z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__d   s3    K
S-=-= =>EJJ!OJJLrH   N)__name__
__module____qualname__r\   ra    rH   rF   
MockScorerrT   _   s7        	/ 	/ 	/	 	 	 	 	 	rH   rg   )r.   r/         r/   )Csscoringcvr   r%   r.   )	r   r   r7   C_rY   r3   r`   r8   rZ   )rg   mock_scorerrj   rl   lrr?   r@   custom_scores           rF   test_logistic_cv_mock_scorerrq   ^   s           *,,K	B	
B	[R	@	@	@BA...DAqFF1aLLL 58r!u SWW,,,, K88Arzz!}}--L;-a00000!!!!!!rH   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datar6   target_namestargetr   pytestwarnsUserWarningr7   )rA   
n_featuresrz   ro   warning_messages        rF   test_lr_liblinear_warningr      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
   rL   )rG   r   r?   Y2rP   s    rF   test_predict_3_classesr      sN    (2...2666(2...a0@0@"EEEEErH   z5ignore:.*'multi_class' was deprecated.*:FutureWarningr>   r(   ovr)rL   rs   multi_classr'   )rL   rs   r)   r+   {Gz?*   )rL   rs   tolr   r&   r,   r*   c                    t           j        j        \  }}t           j        t           j                 }| j        dk    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.   r1   )rw   rx   r6   ry   rz   rs   warningscatch_warningssimplefilterr   r7   r   r4   r5   r9   r8   meanr:   r   r;   r<   r=   )r>   rA   r~   rz   predrE   s         rF   test_predict_irisr      s   8 !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 ]^}d| d} | |d          }t          j        t
          |          5  |                    ||           d d d            n# 1 swxY w Y   _| 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.multinomial)rs   r   ru   )r'   r)   r*   r+   z/Solver %s supports only 'l2' or None penalties,l1r   )rs   penaltyr   )r'   r)   r*   r+   r,   z1Solver %s supports only dual=False, got dual=TrueT)rs   dualr   )r(   z;Only 'saga' solver supports elasticnet penalty, got solver=.
elasticnet)rs   r   z6penalty=None is not supported for the liblinear solverr(   r   rs   )rw   rx   rz   r{   raises
ValueErrorr7   r   )r   r?   r@   rs   msgro   s         rF   test_check_solver_optionr      s    9dkqA 3  HHHHRv=999]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 C  ?&HRvt???]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	J  AFJRvDe<<<]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	    UFUUURv|444]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 
FR[111]:S111 	 	FF1aLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  sZ   A..A2	5A2	,CC	C	D00D4	7D4	.FF	F	G44G8;G8c                     | dd          }t          j        t          d          5  |                    t	          j        ddgdd	gg          t	          j        d
dg                     d d d            d S # 1 swxY w Y   d S )Nr   r,   r   z.*l1_ratio.*ru   r.   r/   rh   ri   r   )r{   r   r   r7   r4   array)r   r^   s     rF   $test_elasticnet_l1_ratio_err_helpfulr      s     B|F333E	z	9	9	9 @ @		"(QFQF+,,bh1v.>.>???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   AA99A= A=rs   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     )rs   r   r&   max_iterr.   r.   F)rs   r   r&   rN   r1   ?)rw   rz   astyper4   intpr   r   r7   rx   coef_r6   
intercept_r   r8   r9   r=   predict_log_probar   )rs   rz   r>   mlrr   s        rF   test_multinomial_binaryr      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((((((rH   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   rs   r   r&   r.   )	r   r   r7   decision_functionr:   r4   expc_r   )global_random_seedr?   r@   r>   decisionprobaexpected_proba_class_1expected_probas           rF   %test_multinomial_binary_probabilitiesr     s     ,>???DAq
!'	  C GGAqMMM$$Q''Ha  EVH--1A1ABFH9DUDU1UVU1557MMNN~.....rH   coo_containerc                    t           j        j        \  }}t           j        t           j                 }t          t           j                  }t          d                              ||          }|                    |          }|	                                 t          j        |j                  sJ |                    |          } | |          }|                    |          }	|                                 |                    |          }
t          ||           t          ||	           t          ||
           d S Nr   r%   )rw   rx   r6   ry   rz   r   r   r7   r   sparsifyr   issparser   densifyr   )r   rA   r~   rz   r?   r>   pred_d_dpred_s_dsp_datapred_s_spred_d_ss              rF   test_sparsifyr   -  s    !IOIzt{+FdiA
!
,
,
,
0
0F
;
;C$$Q''HLLNNN?39%%%%%$$Q''HmAG$$W--HKKMMM$$W--Hh111h111h11111rH   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-   )rh      )r4   randomRandomStaterandom_sampler<   r6   r   r{   r   r   r7   r?   r8   )rngX_y_r>   y_wrongs        rF   test_inconsistent_inputr   F  s   
)


"
"C			7	#	#B	!		BBqE
!
,
,
,C "gG	z	"	"  7               
z	"	" < <B 1 1' : :;;;< < < < < < < < < < < < < < < < < <s$   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   r7   r?   rO   r   r   r   r   r>   s    rF   test_write_parametersr   Z  sf    
!
,
,
,CGGArNNNCIaaaLCN111c33A66:::::rH   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%   )r4   r   r?   float64nanr   r{   r   r   r7   rO   )Xnanlogistics     rF   test_nanr   c  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          \  }}}t          |          D ]e\  }}	t          |	d	d
|dd          }
|

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

                    ||           t          j        |
j                                        |
j        g          }t          ||d         dd|z             d S )Nr   rK   r/   r.   r-   ri   r   r+   r,   Fh㈵>  )rj   rN   r   rs   r   r&   )rL   rN   r   rs   r&   r   zwith solver = %s)decimalerr_msg)r'   r)   r*   r(   r+   r,        @@ư>     @)rj   r   rs   intercept_scalingr&   )rL   r   r   r&   rs   )r4   r   r   concatenaterandnlogspacer    r   	enumerater   r7   r   ravelr   r   )r   r?   r@   rj   frs   coefs_irL   ro   lr_coefs               rF   test_consistency_pathr   n  sS   
)


"
"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	
 	
 	
 	
 	
)
 
rH   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   rK   r/   r.   r-   r           )rj   r   r   r&   verboselbfgs failed to convergez!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r4   r   r   r   r   r{   r|   r   r   r3   messageargs)r   r?   r@   rj   recordwarn_msgs         rF   .test_logistic_regression_path_convergence_failr     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          }|                    | |           t          dddd          }|                    | |           t          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   rA   r&   Tr   r(   )r&   r   r   rs      z)Arrays are not almost equal to 6 decimalsru   )r   r   r7   r   r   r{   r   AssertionError)r?   r@   lr1lr2lr3r   s         rF    test_liblinear_dual_random_stater    sY   !<<<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   C//C36C3c                  2   d\  } }t           j                            d          }|                    | |          }t          j        |                    d|                    |          z                      }||                                z  }||                                z  }t          dgddd          }|	                    ||           t          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(   rh   )rj   rN   rs   rl   )rL   rN   rs   r.   r-   r/   r   )r.   rh   r.   )r4   r   r   r   signdotr   stdr   r7   r   r   r   r   r6   r9   r3   asarraylistcoefs_paths_valuesCs_scores_)	rA   r~   r   X_refr@   lr_cvro   coefs_pathsrZ   s	            rF   test_logistic_cvr    s   !Iz
)


"
"CIIi,,E
		!cii
3334455A	UZZ\\E	UYY[[E 5ka  E 
IIeQ	c{	K	K	KB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/////rH   zscoring, multiclass_agg_listaccuracy 	precision_macro	_weightedf1neg_log_lossrecallc                    t          dddd          \  }}t          j        d          t          j        dd          }}t          d          }|                                }d	D ]}||= |                    ||         ||                    |D ]b}	t          | |	z             }
t          t          ||||fdg|
d d d d d
|ddiz  d         d          |
|||         ||                              cd S )NrK   r   rh      )rA   r&   rC   n_informativeP   r
  r   )rL   rt   
warm_start)rj   rk   	pos_classmax_squared_sumr_   score_paramsr   r   r/   )	r   r4   aranger   
get_paramsr7   r   r   r   )rk   multiclass_agg_listr?   r@   traintestro   paramskey	averagingscorers              rF   "test_logistic_cv_multinomial_scorer1    sS   & A!  DAq )B--2s!3!34E	c	"	"	"B]]__F,  3KKFF1U8QuX( 
 
	Gi/00!!	
 5 $"!  ]M::    F2qw$((	
 	
 	
 	

 
rH   c                     d\  } }}t          | ||dd          \  }}t                                          g d                              |          }t	          j        |          dz
  }t                      }t          d          }t                      }t          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	                              ||          }	t          t	          j        |	                    |                              d
dgk    sJ d S )N)r	  r   rh   rh   r   )rA   r~   rC   r"  r&   )barbazfoor.   )rj   r/   )class_weightr3  r4  )r   r   r7   inverse_transformr4   r   r   r   r   r   sortedr9   r5   r8   )
rA   r~   rC   r  r@   y_strro   r  lr_str	lr_cv_strs
             rF   2test_multinomial_logistic_regression_string_inputsr<  0  sg   '/$Iz9"  HE1 NN44455GGJJE
aA			B A&&&E!!F$***I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 #!A0N0NOOOSSu I ")I--e4455665%.HHHHHHrH   c                 t   t          ddd          \  }}d||dk     <    | |          }t                      }|                    ||           t                      }|                    ||           t          |j        |j                   t          |j        |j                   |j        |j        k    sJ d S )Nr	  r   r   rA   r~   r&   r   r
  )r   r   r7   r   r   r   rm   )rI   r?   r@   csrr>   clfss         rF   test_logistic_cv_sparserA  Y  s    JJJDAqAa#gJ
-

C

 
 CGGAqMMM!!DHHS!dj#)444dos~>>>7cfrH   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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   )rl   r   r.   r   rh   r   r.   r/   r   )r   r   r        r   r   r   )rs   r   r&   r   rl   r'   )rw   rx   rz   r6   r   r  splitr   r7   copyr   r  r   r   r4   newaxisr   r9   r  r  r  r  r   r`   )r+  rz   rA   r~   n_cvrl   precomputed_foldsr>   clf1target_copyr  rZ   rs   r   	clf_multimulti_score	ovr_scores                    rF   test_ovr_multinomial_irisrP  j  s|    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},,,,,3- -rH   c                  
   t          ddd          \  t          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   )r~   r"  r&   Fr   rM   c                 V    i | ]%}|t          dd |i                              &S )rs   rf   )r   r7   ).0rs   r?   r-  r@   s     rF   
<dictcomp>z4test_logistic_regression_solvers.<locals>.<dictcomp>  sO        	";;&;F;;??1EE  rH   r/   rrh   r   N)r   dictSOLVERS	itertoolscombinationsr   r   )
regressorssolver_1solver_2r?   r-  r@   s      @@@rF    test_logistic_regression_solversr_    s    "AANNNDAqB777F       J
 (4Z1EEE 
 
(!x &
8(<(BA	
 	
 	
 	
 	

 
rH   c            	      |   t          ddddd          \  d} t          d| d	          d
d
dfdt          t                    t          ddg          z
  D             }t	          j        |d          D ];\  }}t          ||         j        ||         j        |dk    rdnd| d|            <dS )zATest solvers converge to the same result for multiclass problems.r   r   rh   r   rA   r~   r"  rC   r&   :0yE>Fr   )rN   r   r&   '  r   c                     i | ]:}|t          d|                    |d           d                              ;S )rK   rs   r   rf   )r   getr7   )rS  rs   r?   r-  solver_max_iterr@   s     rF   rT  z?test_logistic_regression_solvers_multiclass.<locals>.<dictcomp>  sl         	" 
O$7$7$D$D
 
HN
 

#a))  rH   r(   r*   r/   rU  r,   g{Gzt?r   z vs rtolr   N)r   rX  setrY  rZ  r[  r   r   )r   r\  r]  r^  r?   r-  rg  r@   s       @@@@rF   +test_logistic_regression_solvers_multiclassrk    s*   2QR  DAq C3R@@@F %f55O       'llS+7H)I%J%JJ	  J (4Z1EEE 
 
(x &x &!V++//X//		
 	
 	
 	
 	

 
rH   weightrV   g?r   rX   rC  r6  balancedc           	      F   t          |           }|dk    r| }t          ddddd||          \  }}t          dd|d	          }t          dd
di|}t	          t
                    5  |                    ||           ddd           n# 1 swxY w Y   t          t                    t          g d          z
  D ]e}t          dd
|i|}	|dv r|		                    dd|dz              |	                    ||           t          |	j        |j        d| d           fdS )z+Test class_weight for LogisticRegressionCV.rl  rE  rh   r   )rA   r~   
n_repeatedr"  n_redundantrC   r&   r.   Frb  )rj   rN   r6  r   rs   r'   categoryN)r'   r(   r*   r   gC]r2<rc  )r   r   r&   r   z	 vs lbfgsrh  rf   )r3   r   rX  r   r    r   r7   rj  rY  
set_paramsr   r   )
rl  r6  r   rC   r?   r@   r-  	clf_lbfgsrs   r>   s
             rF   (test_logistic_regressioncv_class_weightsru    s    FIx'  DAq !	  F %>>G>v>>I 
"4	5	5	5  a               g,,%N%N%N!O!OO 

 

";;&;F;;_$$NNE8JQ8N     	1IyTf;O;O;O	
 	
 	
 	
 	


 

s   'B

BBc            
         t          ddddd          \  } }|dz   }t          t          f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 |ddi}|                    | ||           t          t                    t          dg          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          }|                    | |           t          dd	ddd          }	|	                    | ||           t          |j	        |	j	        d           t          dd	ddddd d!          }|                    | |           t          dd	dd d"          }	|	                    | ||           t          |j	        |	j	        d           d S )$Nr   r   rh   r/   r   ra  r.   r   F)r&   rN   )rj   rl   )r'   r(   rs   r_   -C6?ri  r   r   r'   r+   绽|=rs   r   r   )rs   r6  r(   r   )rs   rN   r6  r   r   r&   )rs   rN   r   r   r&   ri   rW  l2T)rs   rN   r6  r   r   r&   )rs   rN   r   r   r&   rf   )r   r   r   updater7   r4   r<   r6   r   r   rj  rY  r    r   )r?   r@   r_   r   kwrs   clf_sw_noneclf_sw_onesclf_sw_lbfgsclf_sw	clf_cw_12	clf_sw_12clf_cws                rF   'test_logistic_regression_sample_weightsr  
  s   !qq  DAq EM!#78 !I !I 599%%%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 r))B))D)))A];;;'llS'^^3 	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 )Nrm  )rB   r@   )r4   r5   r   rX  zip)r@   rB   r6  class_weight_dicts       rF    _compute_class_weight_dictionaryr  \  sA    illG'
GqIIILS,7788rH   c                     | S rb   rf   xs    rF   <lambda>r  d  s    Q rH   c                    t          t          j                  }|dd d d f         } | |          }t          j        dd          }t	          |          }t          t                    t          ddg          z
  D ]}t          |d          }t          dddi|}t          dd|i|}|	                    ||           |	                    ||           t          |j                  dk    sJ t          |j        |j        d	
           t          j        |j        d                   }	|j        D ]}
|	||
k    xx         ||
         z  cc<   t          di |	                    |||	          }t          |j        |j        d	
           |ddd d f         }t          j        dd         }t	          |          }t          D ]w}t          |d          }t          dddi|}t          dd|i|}|	                    ||           |	                    ||           t#          |j        |j        d           xd S )N-   r(   r*   r   re  r6  rm  rh   rx  ry  r   rw  rK   r!  rW  rf   )r   rw   rx   rz   r  rj  rY  rX  r   r7   r3   r9   r   r   r4   r<   r6   r   )rI   X_irisr?   r@   r  rs   r-  rK  clf2swcclf3s               rF   &test_logistic_regression_class_weightsr  d  sv    49FrssAAAvAaABCCA8;;g,,k3D%E!F!FF ; ;Vd333!DDzDVDD!KK/@KFKKAA4=!!Q&&&&
DJT::::WQWQZ   	/ 	/AqAvJJJ+A..JJJJ!++F++//1B/GG
DJT::::: 	r#vqqqyABsFA8;; E EVd333!DDzDVDD!KK/@KFKKAA!$*dj!DDDDDE ErH   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          }t          |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 ]d}t          |dddg          }
|
                    ||           t          |
j        |j        d           t          |
j        |j        d           ed S )N)r	  r   rh   r   r   ra  F)	with_meanr'   r   r{  )rs   rN   r   )r+   r,   r)   r   r   gHz>)rs   r&   r   r   )rs   r&   r   r   rN   r   ry  r   r   r
  )rs   r   r   rj   )
r   r   fit_transformr   r7   r   r6   r   r   r   )rA   r~   rC   r?   r@   rs   ref_iref_wclf_iclf_wclf_paths              rF   $test_logistic_regression_multinomialr    si    (1$Iz9  DAq 	'''55a88A Ff$777EfEtLLLE	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u
 
 
 	Q$????+U-=DIIIIIJ JrH   c                     t          ddd          \  } }t          dd          }|                    | |           t          j        d          } t          |                    |           t          j        d                     d S )Nr   r   r>  Fr(   )rN   rs   )r   r   )r   r   r7   r4   zerosr   r8   )r?   r@   r>   s      rF   %test_liblinear_decision_function_zeror    sx     qqIIIDAq
5
E
E
ECGGAqMMM 	As{{1~~rx{{33333rH   c                     t          ddd          \  }}t          d          }|                     | |          |           d S )Nr   r   r   r>  r(   rs   r   r   r7   rI   r?   r@   r>   s       rF   test_liblinear_logregcv_sparser    sP     JJJDAq
k
2
2
2CGGMM!a     rH   c                     t          ddd          \  }}t          dd          }|                     | |          |           d S )Nr   r   r   r>  r,   r   r{  r  r  s       rF   test_saga_sparser    sR     JJJDAq
f$
7
7
7CGGMM!a     rH   c                      t          d          } |                     t          t                     | j        dk    sJ d S )NF)rN   r   )r   r7   r?   rO   r   r   s    rF   "test_logreg_intercept_scaling_zeror    s>     5
1
1
1CGGArNNN>S      rH   c                     t           j                            d          } d}t          |dd          \  }}|                     |df          }t          j        |df	          }t          j        |||fd
          }t          ddddd          }|                    ||           t          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   r>  rh   sizer/   r6   r.   r1   r   r
  r(   Frz  r   rL   rs   rN   r   r,   r   r   rL   rs   rN   r   r   r   )r4   r   r   r   normalr<   r   r   r7   r   r   r  )r   rA   r?   r@   X_noise
X_constantlr_liblinearlr_sagas           rF   test_logreg_l1r    sb    )


#
#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ArH   c                 |   t           j                            d          }d}t          |dd          \  }}|                    d|df          }t          j        |d	f
          }t          j        |||fd          }d||dk     <    | |          }t          ddddd          }|                    ||           t          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          }	|	                    |                                |           t          |j
        |	j
                   d S )Nr   r	  r   r   r>  rV   rh   )r   r  r/   r  r.   r1   r   r
  r(   Frz  r  r,   r   r  r  r   )r4   r   r   r   r  r  r   r   r7   r   r   toarray)
rI   r   rA   r?   r@   r  r  r  r  lr_saga_denses
             rF   test_logreg_l1_sparse_datar    s   
 )


#
#CIrPQRRRDAqjjs)Qj88GA///J
7J/a888AAa!eHa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ArH   random_seedr   r   r|  c                     t          dd|           \  }}t          d|| dd          }t          ddgd	d
|}|                    ||           t	          dddi|}|                    ||           t          |j        |j                   d S )NrK   r   r>  r,   r   -q=)rs   r   r&   r   r   r
  T)rj   refitrL   rf   )r   rX  r   r7   r   r   r   )r  r   r?   r@   common_paramsr  ro   s          rF   !test_logistic_regression_cv_refitr  F  s     +VVVDAq   M !GSEGGGGE	IIaOOO		3	3c	3]	3	3BFF1aLLLek2844444rH   c                     t          ddddd          \  } }t          d          }|                    | |           t          ||                    |                     }t          t          d                    }|                    | |           t          ||                    |                     }||k    sJ t          ||                    |                     }t          ||                    |                     }||k    sJ d S )Nr   r   r   rh   )rA   r~   r&   rC   r"  r'   r  )r   r   r7   r   r:   r   _predict_proba_lr)r?   r@   rM  clf_multi_lossclf_ovrclf_ovr_lossclf_wrong_losss          rF   %test_logreg_predict_proba_multinomialr  `  s   !qPR  DAq #'222IMM!Qa!8!8!;!;<<N!"4G"D"D"DEEGKK1Aw44Q7788L.(((( a!8!8!;!;<<Na!<!<Q!?!?@@NN******rH   r   r   r   r   zsolver, message))r)   zAnewton-cg failed to converge.* Increase the number of iterations.)r(   z@Liblinear failed to converge, increase the number of iterations.)r+   ?The max_iter was reached which means the coef_ did not converge)r,   r  )r'   r   )r*   z6Newton solver did not converge after [0-9]* iterationsc                    t           j        t           j                                        }}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&   rs   ru   )rw   rx   rz   rG  r{   skipr   r|   r   r7   n_iter_)r   r   rs   r   r?   y_binro   s          rF   test_max_iterr  w  s:   , 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   rh   r/   ri   r   r
  r   )r   rL   rs   r&   r   )r   rs   rj   rl   r&   r.   r   r   r   r   )rw   rx   rz   r   r4   r5   r6   rG  r   r7   r  r   rs  )	rs   r?   r@   rC   r  n_Cs	n_cv_foldr>   clf_cvs	            rF   test_n_iterr    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7rH   r$  )TFrN   c                    t           j        t           j        }}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|}|rd	|k    s
J |            d S |d	k    s
J |            d S )
Nrx  r   )r   r$  rs   r&   rN   rq  r.   z Warm starting issue with solver zwith fit_intercept=z and warm_start=       @)rw   rx   rz   r   r    r   r7   r   r   r4   r;   abs)	rs   r$  rN   r?   r@   r>   coef_1cum_diffr   s	            rF   test_warm_startr    sW    9dkqA
#  C 
"4	5	5	5  11               vbfVci/0011H	36 	3 	3	3 	3%/	3 	3   #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          \  }} | |          }||f||ffD ]\  }}dD ]}|j        d         }	t          j        d	dd          D ]}
t          d
|	|
z  z  ddd|dd          }t          d
|	|
z  z  ddd|dd          }|	                    ||           |	                    ||           t          |j        |j        d           d S )Nrh   r.   r/   r	  r   r   r>  )r   r|  r-   r
  r,      Fr   )rL   rs   r   rN   r   r&   r   r(   )r   rx   rz   r4   r   r   r6   r   r   r7   r   r   )rI   rw   r?   r@   X_binr  X_sparsey_sparser   rA   alphar,   r(   s                rF   test_saga_vs_liblinearr    s   ;;D9dkqA
sQwA
sQwAa1fIEa1fIMAE,!  Hh }X&&H(H!56 J J1# 	J 	JG
IRA.. J J)Y./! "'#!"   /Y./& "'#!"  	 Aa###)$*ioqIIII1J	JJ JrH   )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          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   )rs   r   r&   r   rN   gQ@ntr   atolr,   rV   )r{   r  r4   r   float32r   r?   r   rO   r   r
   r7   r   r   osnamer"   r   )rs   r   rN   rI   
out32_typeX_32y_32X_64y_64X_sparse_32X_sparse_64
solver_tollr_templlr_32lr_32_sparselr_64lr_64_sparser  s                     rF   test_dtype_matchr  (  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-444K-444K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$??????rH   c                  x   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          }t          dd	d          }t          ||                    ||          	                    |                    }t          d
          D ]}|                    ||           t          ||	                    |                    }t          ||d           d S )Nr   rK   r/   r.   r-   r+   F)rs   r$  r&   Tr   r   ry  )r4   r   r   r   r   r   r   r   r7   r:   ranger   )r   r?   r@   lr_no_wslr_wslr_no_ws_lossr   
lr_ws_losss           rF   test_warm_start_converge_LRr  w  s%    )


"
"C
		#q))QF2CIIc14E4EFGGA
!sbTCZ'((A!5qQQQHe1MMMEQQ 2 2 @ @ C CDDM1XX  		!Q!U003344JM:D999999rH   c            
         t          d          \  } }d}d}t                      }d|fddfD ]K\  }}t          ||dd|d	d
          }|                    | |           |                    |j                   L|\  }}	}
t          j        ||	dd          rJ t          j        ||
dd          rJ t          j        |
|	dd          rJ d S )Nr   r%   r  rX   r   )r   N)r|  Nr,   r   r  )r   rL   rs   r&   l1_ratior   r   rV   )ri  r  )r   r  r   r7   appendr   r4   allclose)r?   r@   rL   r  coeffsr   ratioro   elastic_net_coeffs	l1_coeffs	l2_coeffss              rF   test_elastic_net_coeffsr	    s    A...DAqAHVVF((3\<P    
 
 
 	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BrH   rL   )r   rV   r.   r   rK   r       .Azpenalty, l1_ratio)r   r.   )r|  r   c                 
   t          d          \  }}t          d| |ddd          }t          || ddd          }|                    ||           |                    ||           t          |j        |j                   d S )Nr   r%   r   r,   r   )r   rL   r  rs   r&   r   r   rL   rs   r&   r   )r   r   r7   r   r   )rL   r   r  r?   r@   lr_enetlr_expecteds          rF   "test_elastic_net_l1_l2_equivalencer    s    
 A...DAq 
  G %1V!  K KK1OOAqgm[->?????rH   )r   r.   rK   r
  c                 $   t          dd          \  }}t          ||d          \  }}}}dt          j        ddd          i}t	          d| ddd	
          }t          ||d          }	t	          d| ddd	
          }
t	          d| ddd	
          }|	|
|fD ]}|                    ||           |	                    ||          |
                    ||          k    sJ |	                    ||          |                    ||          k    sJ d S )NrD  r   r%   r  r.   r   r   r,   r   r  T)r  r   r|  )r   r   r4   linspacer   r   r7   r`   )rL   r?   r@   X_trainX_testy_trainy_test
param_gridenet_clfgsl1_clfl2_clfr>   s                rF   test_elastic_net_vs_l1_l2r    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CrH   r/   ri   r  )rV   rX   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   rA   rC   r~   r"  rp  ro  r&   r   r,   F)r   rs   r&   rL   r  rN   r|  )r   rs   r&   rL   rN   c                     | j                                         }t          |                                         z  }|t	          j        t	          j        |                    z  z  }|dz
  dz  t	          j        ||          z  z  }|S )Nr
  rX   )r   r   r   r:   r4   r;   r  r  )ro   coefobjrL   r?   r  r@   s      rF   enet_objectivezEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective  s    x~~(1b..q11222x"&....h#%tT(:(:::
rH   )r   r   r   r7   )rL   r  r  lr_l2r"  r?   r@   s   ``   @@rF   -test_LogisticRegression_elastic_net_objectiver$    s      DAq 	aA 
  G V!q  E KK1	IIaOOO        >'""^^E%:%:::::::rH   rC   )r/   rh   c           	         t          d| dd          \  }}t          d          }t          j        ddd          }t          j        ddd          }t          d	|d
||dd          }|                    ||           ||d}t          d	d
dd          }t          |||          }	|	                    ||           |	j	        d         |j
        d         k    sJ |	j	        d         |j        d         k    sJ d S )NrK   rh   r   rA   rC   r"  r&   r   r.   ri   r   r,   r   )r   rj   rs   rl   	l1_ratiosr&   r   rL   r  )r   rs   r&   r   rl   r  rL   )r   r   r4   r  r   r   r7   r   r   best_params_	l1_ratio_rm   )
rC   r?   r@   rl   r(  rj   lrcvr  ro   r  s
             rF   2test_LogisticRegressionCV_GridSearchCV_elastic_netr.    s-   
 !!  DAq 
		BAq!$$I	RA		B  D 	HHQNNNy11J		
 
 
B 
b*	,	,	,BFF1aLLL?:&$.*;;;;;?3471:------rH   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 )NrK   rh   r   r&  r%   r   r.   r'  ri   r   r,   r   r   )r   rj   rs   rl   r(  r&   r   r   r)  )r   rs   r&   r   r   r*  rW   )r   r   r   r4   r  r   r   r7   r   r   r8   r   )r?   r@   r  r  r  r  rl   r(  rj   r-  r  ro   r  s                rF   6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovrr0  -  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ErH   )r|  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 )Nrh   r   r  r   rA   rC   r"  r~   r&   r'  ri   r   r.   r/   r,   r   F)r   rj   rs   r(  r&   r   r   r  )
r   r4   r   r  r   r7   rm   r6   r,  r   )	r   r   rC   r~   r?   r@   rj   r(  r-  s	            rF   "test_LogisticRegressionCV_no_refitr4  \  s     IJ  DAq 
RA		B,K1a((				 	 	D 	HHQNNN7=YL((((>I<////:	:6666666rH   c            
         d} d}t          d| | |d          \  }}t          j        ddd          }t          j        ddd	          }d	}t	          d
|d||ddd          }|                    ||           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 )Nrh   r   r  r   r3  r'  ri   r.   r/   r   r,   r   r   )r   rj   rs   rl   r(  r   r&   r   )r   r4   r   r  r   r7   r  r  r  r  r6   r  r  r  )
rC   r~   r?   r@   rj   r(  n_foldsr-  r  rZ   s
             rF   5test_LogisticRegressionCV_elasticnet_attribute_shapesr7    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NrH   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\)ru   r   r,   rX   )r   rs   r  )r{   r|   r}   r   r7   r?   rO   )r   s    rF   test_l1_ratio_non_elasticnetr9    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 )NrD  r/   r   r   r.   r  r   Fr   r
  r   )r   r&   rN   r   r   r  r  lossr   r   r,   )r   r&   rN   r   r   r  rL   rs   rW  )r   r   r   r   r7   r   r   )rL   r  rA   r?   r@   sgdlogs          rF   test_elastic_net_versus_sgdr>    s     I  DAq 	aA
Ag	!	 	 	C 
	 	 	C GGAqMMMGGAqMMMciA>>>>>>rH   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  rh   r/   r   r.   )rA   rC   r"  rp  n_clusters_per_classr&   r~   )r   r.   rc  r   r,   r   )r   rj   rs   r&   r   rW  )r   r   r{   r   r  r   )r?   r@   rj   r   r   s        rF   /test_logistic_regression_path_coefs_multinomialrA    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estrD  )r&   r   rh   r   )r&   rl   rj   r   r   c                     | j         j        S rb   )	__class__rc   r  s    rF   r  r    s    !+& rH   )idsc           	           fd}t          t          j                  }|d d d         }|dd d         }t          j        d d d         }|dk    } |||d|          } |||d|          }	t	          |j        |	j                   t	          |                    |          |	                    |                      |||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 )Nrf   )r
   rs  r7   )r?   r@   r~  rB  s      rF   r7   z6test_logistic_regression_multi_class_auto.<locals>.fit  s2    $uSzz$**r**..q!444rH   r   r.   r   r1  )r   rs   r   r   r   )	r   rw   rx   rz   r   r   r:   r4   r  )rB  rs   r7   scaled_datar?   X2y_multir  est_auto_binest_ovr_binest_auto_multiest_ovr_multiest_multi_multis   `            rF   )test_logistic_regression_multi_class_autorP    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
 
 	
 	
 	
 	
 	
rH   c                    t          d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   )rA   rp  r&   z&Setting penalty=None will ignore the Cri   )r   rs   rL   ru   )r   rs   r&   r|  )r   rL   rs   r&   )
r   r   r{   r|   r}   r7   r4   infr8   r   )	rs   r?   r@   r   ro   lr_nonelr_l2_C_inf	pred_nonepred_l2_C_infs	            rF   test_penalty_nonerW  9  s?    11MMMDAq
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.   rh   r/   ri   floatr   )r.   r.   r.   r.   r/   r/   r/   r/   r.   r.   r.   r.   r/   r/   r/   r/   intr  r   r%   r(   r   )rs   r&   rw  )r8   r:   r   rf   )r4   r   r   vstackhstackr<   r3   r   r   rs  r
   r7   getattrr   )r-  r?   r@   rI  y2r_   base_clfclf_no_weightclf_with_weightmethodX_clf_no_weightX_clf_with_weights               rF   /test_logisticregression_liblinear_sample_weightre  O  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??):;;;;< <rH   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_splitsrV   r   )rV   r.   r   r   r,      r   )r   rs   r(  rj   rl   r&   r   r   r.   r1   )r   rs   rL   r  r&   r   r   r*  )r   r   r   r7   r  r   r   r   r   r{   approx)r?   r@   rl   r(  rj   r-  avg_scores_lrcvr   rL   jr  ro   avg_score_lrs                rF   'test_scores_attribute_layout_elasticnetrm    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rH   c                    t           j        j        \  }}t           j        t           j                 }t          t          t           j                  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'   )rL   rs   rN   r   r1   rz  r  r  )r  N)rw   rx   r6   ry   rz   r   r3   r   r7   r   r   r;   r   r{   ri  )rN   rA   r~   rz   r>   X_scaleds         rF   (test_multinomial_identifiability_on_irisrp    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rH   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&   r6  r   r   rw  )r   r3   r4   r<   rG  r   r7   r   )r   r6  r?   r@   r~   Wexpectedr>   s           rF   test_sample_weight_not_modifiedrv    s     %%%DAqQJ

AA
avvxxH
\C[  C GGAqG"""Ha     rH   c           	      >    |t          j        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   r%   )indicesindptrint64r/   r   r  )r(   r+   r,   z0Only sparse matrices with 32-bit integer indicesru   r  )r   randsetattrr]  r   r4   r   r   randintr6   r{   r   r   r   r7   )rs   r   rI   r?   attrr   r@   r   s           rF   test_large_sparse_matrixr    sf    	fk"b7IJJJKKA% ; ;4D))0099::::
)

 2
3
3CAAGAJ''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,,C03C0c                      t          j        g dg          j        } t          j        g d          }| j        d         dk    sJ t	          dd                              | |           d S )N)rX   g?g?g      ?rW   gHzG?r   ffffff?)r.   r.   r   r   r.   r.   r   r.   r.   r)   T)rs   rN   )r4   r   Tr6   r   r7   )r?   r@   s     rF   test_single_feature_newton_cgr    sr     	>>>?@@BA
)))**A71:????k>>>BB1aHHHHHrH   c            	         t           j                                        } t           j                                        }| |dk             } ||dk             }t	                                          |           }t          | |d          dz  }t          ddddd	d
|          }t          j	                    5  t          j
        dt                     |                    ||           d d d            d S # 1 swxY w Y   d S )Nr/   r=  )r;  gnt@r   r(   r   rK   r   r   )r   rs   r   r   r   r&   rL   error)rw   rx   rG  rz   r   r  r   r   r   r   r   r   r7   )r?   r@   X_preprL   r>   s        rF   test_liblinear_not_stuckr    s8   	AA	!q&	A	!q&	A++A..FAE"""_4A
!
  C 
	 	"	"  g'9:::                 s   41C22C69C6enable_slep006c                     t           j                            d          } t          d|           \  }}t          d|           \  }}t          j        t          |                    }d|dt          |          dz  <   d|i}t          d          }t          |          } |j        ||fi | t          d          }	|		                    d	           t          |	          }
 |
j        ||fi | t          j
        |j        d
         |
j        d
                   rJ  |j        ||fi |} |
j        ||fi |}t          j
        ||          rJ dS )zTest that `sample_weight` is correctly passed to the scorer in
    `LogisticRegressionCV.fit` and `LogisticRegressionCV.score` by
    checking the difference in scores with the case when `sample_weight`
    is not requested.
    r   r  r/   Nr_   r  rk   Trw  r.   )r4   r   r   r   r<   r3   r   r   r7   set_score_requestr  r  r`   )r   r?   r@   X_ty_tr_   kwargsscorer1lr_cv1scorer2lr_cv2score_1score_2s                rF   8test_lr_cv_scores_differ_when_sample_weight_is_requestedr  $  s}    )


#
#C#>>>DAq"RcBBBHCGCFFOOM#$M-CFFaK- }-F$$G!'222FFJq!v$$GD111!'222FFJq!v{6>!,fnQ.?@@@@@fl3..v..Gfl3..v..G{7G,,,,,,,rH   c                  8   t           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           n# 1 swxY w Y   t          d
          5  t          d          }
|
                    d
           t          |
	          } |j	        ||fi |  |j
        ||fi |}ddd           n# 1 swxY w Y   t          |j        d         |j        d                    t          |	|           dS )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  Trw  r.   )r4   r   r   r   r<   r3   r	   r   r   r7   r`   r  r   r  )r   r?   r@   r  r  r_   r  r  r  r  r  r  r  s                rF   3test_lr_cv_scores_without_enabling_metadata_routingr  C  s=   
 )


#
#C#>>>DAq"RcBBBHCGCFFOOM#$M-CFFaK- }-F		6	6	6 3 3Z((%g666
1a""6"""&,sC22622	3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
	5	5	5 3 3Z((!!!555%g666
1a""6"""&,sC226223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 FN1%v~a'8999GW%%%%%s%   >CC"%C"9AEE Ec                    t          d          \  }}|dk    }t          t                    5  t          | d                              ||          }d d d            n# 1 swxY w Y   | dvr|j        dk    sJ | dk    rt          |j        t          j	        |j                             t          |
                    |          t          j        |j        d         |j        	                     t          |                    |          t          j        |j        d         dfd
	                     |                    ||          dk     sJ d S )NTrr  r/   rq  r   re  )r,   r+   r'   )r6   
fill_valuerX   r  )r   r    r   r   r7   r  r   r   r4   
zeros_liker   fullr6   r   r:   r`   )rs   r?   r@   r>   s       rF   test_zero_max_iterr  `  s    %%%DAq	QA	"4	5	5	5 F F ;;;??1EEF F F F F F F F F F F F F F F_$${a	2=#;#;<<<!!!$$G!'!*@@@	
 	
 	
 	a  G171:q/c:::	
 	
 	
 99Q??S      s   &A!!A%(A%c                     t          dd          \  } }t                      }d}t          d          5  ddi}t          j        t
          |	          5   |j        | |fi | d
d
d
           n# 1 swxY w Y   t          j        t
          |	          5   |j        | |fi | d
d
d
           n# 1 swxY w Y   d
d
d
           d
S # 1 swxY w Y   d
S )zTest that the right error message is raised when metadata params
    are passed while not supported when `enable_metadata_routing=False`.r   r   r  z1is only supported if enable_metadata_routing=TrueFr  extra_paramr
  ru   N)r   r   r	   r{   r   r   r7   r`   )r?   r@   r  r   r-  s        rF   5test_passing_params_without_enabling_metadata_routingr  z  s    !<<<DAq ""E
=C		6	6	6 ( (%]:S111 	& 	&EIa%%f%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& ]:S111 	( 	(EK1'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sY    CA1%C1A5	5C8A5	9CB3'C3B7	7C:B7	;CCC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          }t          j        t          |          5  |                    | |           d	d	d	           n# 1 swxY w Y   t          d
dd          \  } }t          d          }d}t          j        t          |          5  |                    | |           d	d	d	           n# 1 swxY w Y   t          d          }t          j        t          |          5  |                    | |           d	d	d	           d	S # 1 swxY w Y   d	S )z)Check `multi_class` parameter deprecated.rh   r	  r!  )rC   rA   r"  r   r  z'multi_class' was deprecatedru   Nr/   r   z-'multi_class' was deprecated.*binary problems)r   r   r{   r|   FutureWarningr7   r   )r?   r@   ro   r   lrCVs        rF   test_multi_class_deprecatedr    s}   bJJJDAq		.	.	.B
(C	m3	/	/	/  
q!                E222D	m3	/	/	/  A               bJJJDAq		6	6	6B
9C	m3	/	/	/  
q!                M:::D	m3	/	/	/  A                 sH   A&&A*-A*B??CCD//D36D3%F		FF)rZ  r  r   	functoolsr   numpyr4   r{   numpy.testingr   r   r   r   scipyr   sklearnr	   sklearn.baser
   sklearn.datasetsr   r   sklearn.exceptionsr   sklearn.linear_modelr   sklearn.linear_model._logisticr   LogisticRegressionDefaultr   LogisticRegressionCVDefaultr   r   sklearn.metricsr   r   sklearn.model_selectionr   r   r   r   sklearn.multiclassr   sklearn.preprocessingr   r   r   sklearn.svmr   sklearn.utilsr   r   sklearn.utils._testingr    r!   sklearn.utils.fixesr"   r#   r$   markfilterwarnings
pytestmarkrY  r?   rO   r   rw   rG   parametrizerQ   rq   r   r   r3   rx   r   r   r   r   r   r   r   r   r   r   r   r  r  r1  r<  rA  rP  r_  rk  ru  r  r  r  r  r  r  r  r  r  r  r  r  r(  r  r  r8  rj  r  r  r  r  r	  r  r  r   r$  r.  r0  r4  r7  r9  r>  rA  rP  rW  re  rm  rp  rv  r  r  r  usefixturesr  r  r  r  r  rf   rH   rF   <module>r     s       				                              " " " " " "       ; ; ; ; ; ; ; ; 1 1 1 1 1 1 . . . . . .                  1 0 0 0 0 0 0 0            3 2 2 2 2 2 E E E E E E E E E E             7 7 7 7 7 7 7 7 G G G G G G G G I I I I I I I I I I[''< 
 W6QGGG w:KKK  P!Wq!fq!fYYYYy{{8 8 8$ .99  :9" " "B " " " .99F F :9F STT	SS^^KUSSSSS^^G<<<SS^^K@@@c$)nnU%VX	
 	
 	
 	c$)nn	
 	
 	
 	c$)nn%6E	
 	
 	
 ** *+  UT,*: STT 24HIJJ% % KJ UT%P  24HIJJ@ @ KJ@ STT#H#H#HII) ) JI UT)2 STT/ / UT/* .992 2 :920< < <(; ; ;  ;
 ;
 ;
|? ? ?,8 8 8B0 0 06 "	bT	x-. 
+&'	"	Hk*+  
  
  
F&I &I &IR .99  :9  STT?- ?- UT?-D
 
 
"
 
 
8 $4$4###6N6N#OPP(J)?@@+
 +
 A@ QP+
\OE OE OEd   ;;-.*HII#E #E JI#EL8J 8J 8Jv4 4 4 .99! ! :9! .99! ! :9!! ! !!B !B !BH .99/B /B :9/Bd --T4L115 5 21 .-50+ + +. STTYRYq!__55(>??   "% %#  @? 65 UT(%0 STT7++.8 .8 ,+ UT.8b ffSS\\CC6G(H$I$IIJJ  }55-88# # 98 65 
#< .99*J *J :9*J\ STT(>??CCC  5$-88.99E@ E@ :9 98  @? UT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 f--#. #. .-#.P STT*F *F UT*F\ STT$899(FGG 7  7 HG :9 UT 7L STT(O (O UT(OVQ Q Q kbk"a3344___55%? %? 65 54%?PA A AB STT	C888!aTCPPP 	'&    7++'
 '
 ,+  UT'
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V 5$-88&B &B 98&BT STT(F(F(FGGcds*C*CZ)PQQ! ! RQ HG UT! 7++.994 4 :9 ,+4&I I I  2 )**- - +*-<& & &: 7++! ! ,+!2( ( ($    rH   