o
    iR                    @   s	  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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 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.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z= d dl>m?Z?m@Z@mAZA ejBCdZDee"d dZ!ee$d dZ#dZEdd gd dgddggZFg dZGg dZHe ZIdd ZJejBKd eAd!d" ZLd#d$ ZMe=d%d& ZNejBKd eAd'd( ZOejBCd)ejBCd*ejBKd+e!ePeIjQd,d-d.e!ePeIjQd/d0e!ePeIjQd1d0e!ePeIjQd2d3d-d4d5e!ePeIjQd6d3d-d4d5e!ePeIjQd7d0gd8d9 ZRejBCd)ejBKd:e!e#gd;d< ZSejBKd:e!e#gd=d> ZTejBCd)ejBKd?g d@dAdB ZUejBCd)dCdD ZVejBKdEe@dFdG ZWdHdI ZXdJdK ZYdLdM ZZdNdO Z[dPdQ Z\dRdS Z]dTdU Z^ejBKdVdWdXgfdYdZd[gfd\dZd[gfd]dXgfd^dZd[gfgd_d` Z_dadb Z`ejBKd eAdcdd ZaejBCd)dedf Zbdgdh ZcejBCd)ejBKdidjdkgdldm ZdejBKdidjdkgdndo ZeejBKdpdqdrdsdqdrdtdugejBKdvdpdwgdxdy ZfejBKdzd{ejBKd?dd|d} ZgejBKd?d~dd Zhdd Zidd ZjejBKd dd geA dd Zkdd Zldd ZmejBKd eAdd ZnejBKd eAdd Zodd Zpdd ZqejBKd eAdd ZrejBKdd4gejBKdddgdd Zsdd ZtejBCd)ejBKdeuddejBKdd-dgejBKdg ddd ZvejBCd)ejBCd*ejBKd?eEdd ZwejBKd?exeyeEeyd,g ejBKddejBKdiddd ZzejBKd?d7d1gejBKdidejBKdddd Z{ejBKd eAdd Z|ejBCd)ejBKdd-dgejBKd?g dejBKdidjdkgejBKd eAdd Z}dd Z~dd ZejBKdg dejBKdddgdd ZejBKdg ddd ZejBKdedddšejBKdg dǢddɄ ZejBKddˡdd̈́ ZejBCd)ddτ ZejBCd)ejBKddСejBKddѡddӄ ZejBCd)ddՄ Zddׄ ZejBKdedddšejBKdg dǢddل Zddۄ ZejBCd)ejBCd*ejBjKde!d ddލe#d dddddgdd dejBKd?eEdd ZejBKd?exeyeEeyd,g dd ZejBKdddjdddddkdddddjdddgdd Zdd ZejBCd)ejBKd?g dejBKdidjdkgdd ZejBCd)ejBKdg dѢejBKdvddddudwgdd ZejBKd?eEejBKd eAdd Zdd Zdd Zedkddd  Zdd ZejBKd?eEdd Zdd Zdd Zd	d
 ZejBKde!e#gdd ZdS (      N)partial)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)sparse)LinAlgWarningsvd)config_context)HalfMultinomialLoss)clone)	load_irismake_classificationmake_low_rank_matrix)ConvergenceWarning)SGDClassifier)LogisticRegression)LogisticRegressionCV)_log_reg_scoring_path_logistic_regression_path)
get_scorerlog_loss)GridSearchCVLeaveOneGroupOut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   r2   r2   )   r2   r   c                 C   s   t |}t|}|jd }| |||}t| j| |j|fks%J t|| | |}|j||fks8J t	|j
ddt| t|jdd| dS )z;Check that the model is able to fit the classification datar   r2   ZaxisN)lennpuniqueshapefitpredictr   classes_predict_probar   sumonesargmax)clfXy	n_samplesclasses	n_classesZ	predictedprobabilities rG   b/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictions?   s   



rI   csr_containerc                 C   s   t tddtt t tdd| tt t tdddtt t tddd| tt t tdddtt t tddd| tt d S )Nr   r)   d   )Cr*   Ffit_interceptr*   )rI   r   rA   Y1rJ   rG   rG   rH   test_predict_2_classesQ   s   rQ   c                  C   s   G dd d} |  }g d}d}t |||d}tdd\}}||| |jd |d ks/J |j|t| ks:J d|_||||}||jd ksOJ |jdksVJ d S )	Nc                   @   s   e Zd Zdd ZdddZdS )z0test_logistic_cv_mock_scorer.<locals>.MockScorerc                 S   s   d| _ g d| _d S )Nr   )皙?g?皙?      ?)callsscores)selfrG   rG   rH   __init__c   s   z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__Nc                 S   s(   | j | jt| j   }|  jd7  _|S )Nr2   )rV   rU   r5   )rW   modelrA   rB   sample_weightscorerG   rG   rH   __call__g   s   z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__N)__name__
__module____qualname__rX   r\   rG   rG   rG   rH   
MockScorerb   s    ra   )r2   r3         r3   )Csscoringcvr   r)   r2   )	r   r   r9   C_rU   r5   r[   r:   rV   )ra   Zmock_scorerrd   rf   lrrA   rB   Zcustom_scorerG   rG   rH   test_logistic_cv_mock_scorera   s   
ri   c                  C   s^   t dd\} }tddd}d}tjt|d || | W d    d S 1 s(w   Y  d S )Nr   r)   r,   r3   )solvern_jobsz\'n_jobs' > 1 does not have any effect when 'solver' is set to 'liblinear'. Got 'n_jobs' = 2.match)r   r   pytestwarnsUserWarningr9   )rA   rB   rh   Zwarning_messagerG   rG   rH   test_lr_liblinear_warning   s   "rq   c                 C   s,   t tddtt t tdd| tt d S )N
   rL   )rI   r   rA   Y2rP   rG   rG   rH   test_predict_3_classes   s   ru   z5ignore:.*'multi_class' was deprecated.*:FutureWarningzIignore:.*'liblinear' solver for multiclass classification is deprecated.*r@   r,   ovr)rL   rj   multi_classr+   )rL   rj   r-   r/   {Gz?*   )rL   rj   tolrw   r*   r0   r.   c                 C   s   t jj\}}t jt j }| jdkr3t  tdt	 | 
t j| W d   n1 s-w   Y  n| 
t j| tt|| j | t j}t||kdksTJ | t j}t|jddt| t j|jdd }t||kdkszJ 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?r2   r4   )irisdatar8   target_namestargetrj   warningscatch_warningssimplefilterr   r9   r   r6   r7   r;   r:   meanr<   r   r=   r>   r?   )r@   rC   
n_featuresr   predrF   rG   rG   rH   test_predict_iris   s    

r   LRc              	   C   s  t jt j}}dD ]+}d| d}| |dd}tjt|d ||| W d    n1 s/w   Y  q	dD ]*}d| }| |d	d
d}tjt|d ||| W d    n1 s\w   Y  q7dD ]*}d| }| |dd
d}tjt|d ||| W d    n1 sw   Y  qddD ]+}d| d}| |dd}tjt|d ||| W d    n1 sw   Y  q| tu rd}| d dd}tjt|d ||| W d    d S 1 sw   Y  d S d S )Nr,   zSolver z( does not support a multinomial backend.multinomial)rj   rw   rl   )r+   r-   r.   r/   z/Solver %s supports only 'l2' or None penalties,l1rv   )rj   penaltyrw   r+   r-   r.   r/   r0   z1Solver %s supports only dual=False, got dual=TrueT)rj   dualrw   z;Only 'saga' solver supports elasticnet penalty, got solver=.
elasticnet)rj   r   z6penalty=None is not supported for the liblinear solverr,   r   rj   )r}   r~   r   rn   raises
ValueErrorr9   r   )r   rA   rB   rj   msgrh   rG   rG   rH   test_check_solver_option   sH   "r   c                 C   sh   | ddd}t jtdd |tddgdd	ggtd
dg W d    d S 1 s-w   Y  d S )Nr   r0   r   z.*l1_ratio.*rl   r2   r3   rb   rc   r   )rn   r   r   r9   r6   array)r   rY   rG   rG   rH   $test_elasticnet_l1_ratio_err_helpful   s   *"r   rj   r+   r-   r/   r0   c                 C   s   t jdktj}tddg| }t| dddd}|t j| |j	j
dt jj
d fks/J |jj
d	ks7J t|t j| t| ddd
d}|t j| |jtj|t jdd }t||kdkshJ d S )Nr   Zsetosaz
not-setosar   ry     )rj   rw   r*   max_iterr2   r2   F)rj   rw   r*   rN   r4   ?)r}   r   astyper6   Zintpr   r   r9   r~   coef_r8   
intercept_r   r:   r;   r?   Zpredict_log_probar   )rj   r   r@   Zmlrr   rG   rG   rH   test_multinomial_binary   s   r   c                 C   s~   t | d\}}tddd| d}||| ||}||}t|t|t|   }tjd| |f }t|| d S )Nr)   r   r0   MbP?)rw   rj   rz   r*   r2   )	r   r   r9   decision_functionr<   r6   expZc_r   )global_random_seedrA   rB   r@   ZdecisionprobaZexpected_proba_class_1Zexpected_probarG   rG   rH   %test_multinomial_binary_probabilities  s   

 r   coo_containerc                 C   s   t jj\}}t jt j }tt j}tdd||}||}|	  t
|js+J ||}| |}||}	|  ||}
t|| t||	 t||
 d S Nr   r)   )r}   r~   r8   r   r   r    r   r9   r   Zsparsifyr   issparser   Zdensifyr   )r   rC   r   r   rA   r@   Zpred_d_dZpred_s_dZsp_dataZpred_s_sZpred_d_srG   rG   rH   test_sparsify0  s   






r   c                  C   s   t jd} | d}t |jd }d|d< tdd}|d d }tt	 |
t| W d    n1 s8w   Y  tt	 |
||| d W d    d S 1 sZw   Y  d S )Nr   )   rr   r)   r1   )rb      )r6   randomRandomStateZrandom_sampler>   r8   r   rn   r   r   r9   rA   r:   )rngZX_Zy_r@   Zy_wrongrG   rG   rH   test_inconsistent_inputI  s   

"r   c                  C   sF   t dd} | tt d| jd d < d| jd d < t| td d S r   )r   r9   rA   rO   r   r   r   r   r@   rG   rG   rH   test_write_parameters]  s
   
r   c                  C   s`   t jtt jd} t j| d< tdd}tt |	| t
 W d    d S 1 s)w   Y  d S )Ndtyper   r2   r   r)   )r6   r   rA   float64nanr   rn   r   r   r9   rO   )ZXnanZlogisticrG   rG   rH   test_nanf  s   

"r   c                  C   s\  t jd} t | ddddg | ddf}dgd dgd  }t ddd}t}dD ]=}|t|||d	d
|ddd\}}}t|D ]%\}}	t	|	d	d
|ddd}
|

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

|| t |
j |
jg}t||d dd| d qnd S )Nr   rK   r3   r2   r1   rc   rr   r/   r0   Fh㈵>  )rd   rN   rz   rj   r   r*   )rL   rN   rz   rj   r*   r   zwith solver = %s)decimalerr_msg)r+   r-   r.   r,   r/   r0        @@ư>     @)rd   rz   rj   intercept_scalingr*   )rL   rz   r   r*   rj   )r6   r   r   concatenaterandnlogspacer$   r   	enumerater   r9   r   ravelr   r   )r   rA   rB   rd   frj   coefs_irL   rh   Zlr_coefrG   rG   rH   test_consistency_pathq  sn   &

	r   c               
   C   s   t jd} t | ddddg | ddf}dgd dgd  }dg}tt}t|||ddddd W d    n1 sAw   Y  t	|dksNJ |d j
jd }d	|v s\J d
|v sbJ d|v shJ d|v snJ d S )Nr   rK   r3   r2   r1   r           )rd   rz   r   r*   verbosez-lbfgs failed to converge after 1 iteration(s)z!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r6   r   r   r   r   rn   ro   r   r   r5   messageargs)r   rA   rB   rd   recordZwarn_msgrG   rG   rH   .test_logistic_regression_path_convergence_fail  s   &r   c                  C   s   t d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|d
 t|j|j W d    d S 1 sUw   Y  d S )N   r   rC   r*   Tr   r,   )r*   r   rz   rj      z)Arrays are not almost equal to 6 decimalsrl   )r   r   r9   r   r   rn   r   AssertionError)rA   rB   Zlr1Zlr2Zlr3r   rG   rG   rH    test_liblinear_dual_random_state  s6   "r   c            	      C   s&  d\} }t jd}|| |}t |d|| }|| 8 }||  }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sfJ t t|j }t|jd
dd
|f t|jjd t t|j }t|jd d S )N)2   r   r   r         ?Fr,   rb   )rd   rN   rj   rf   )rL   rN   rj   r2   r1   r3   r   )r2   rb   r2   )r6   r   r   r   signdotr   Zstdr   r9   r   r   r   r   r8   r;   r5   asarraylistcoefs_paths_valuesCs_scores_)	rC   r   r   X_refrB   lr_cvrh   coefs_pathsrV   rG   rG   rH   test_logistic_cv  s*   
r   zscoring, multiclass_agg_listaccuracy 	precisionZ_macroZ	_weightedf1Zneg_log_lossZrecallc                 C   s   t ddddd\}}tdtdd}}tdd}| }d	D ]}||= q!||| ||  |D ].}	t| |	 }
tt||||fdg|
d d d d d
|ddiB d d |
||| ||  q3d S )NrK   r   rb      )rC   r*   rE   n_informativeP   r   rs   )rL   rk   
warm_start)rd   re   Z	pos_classZmax_squared_sumrZ   Zscore_paramsrw   r   r3   )	r   r6   aranger   
get_paramsr9   r   r   r   )re   Zmulticlass_agg_listrA   rB   traintestrh   paramskeyZ	averagingZscorerrG   rG   rH   "test_logistic_cv_multinomial_score  sD   


r   c            
      C   sp  d\} }}t | ||ddd\}}t g d|}t|d }t }tdd}t }tdd}	||| ||| ||| |	|| t|j	|j	 t
|jg dks\J t|j	|	j	 t
|jg dksnJ t
|	jg dksyJ t
t||g dksJ t
t|	|g dksJ tddddd	||}	t
t|	|d
dgksJ d S )N)r   r   rb   rb   r   )rC   r   rE   r   r*   )barbazZfoor2   )rd   r3   )class_weightr   r   )r   r   r9   Zinverse_transformr6   r   r   r   r   r   sortedr;   r7   r:   )
rC   r   rE   r   rB   Zy_strrh   r   Zlr_strZ	lr_cv_strrG   rG   rH   2test_multinomial_logistic_regression_string_inputs3  s:   



  $r   c                 C   sz   t dddd\}}d||dk < | |}t }||| t }||| t|j|j t|j|j |j|jks;J d S )Nr   r   r   rC   r   r*   r   r   )r   r   r9   r   r   r   rg   )rJ   rA   rB   Zcsrr@   ZclfsrG   rG   rH   test_logistic_cv_sparse\  s   r   c                  C   sZ  t jt j} }| j\}}d}t|}t|| |}t|dd}|| | t|d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slJ t|jg d tt|j }
|
jd|d|d fksJ |jjd	ksJ tt|j }|jd|dfksJ d
D ]}|dv rdnd}t||d|dv rdnddd}|dkrt| } || | || |}|| |}||ksJ |jj|jjksJ t|jg d tt|j }
|
jd|d|d fksJ |jjd	ksJ tt|j }|jd|dfks*J qd S )Nr3   rv   )rf   rw   r2   r   rb   r   r2   r3   rr   )rr   r   r        ry   r   rx   )rj   r   r*   rz   rf   r+   )r}   r~   r   r8   r   r   splitr   r9   copyr   r   r   r   r6   Znewaxisr   r;   r   r   r   r   r    r[   )r   r   rC   r   Zn_cvrf   Zprecomputed_foldsr@   clf1Ztarget_copyr   rV   rj   r   	clf_multiZmulti_scoreZ	ovr_scorerG   rG   rH   test_ovr_multinomial_irism  sX   
 r  c                     sj   t dddd\ tddd fdd	tD } tj| d
dD ]\}}t| | j| | jdd q!dS )z)Test solvers converge to the same result.rr   r   r   )r   r   r*   Fry   rM   c                    s(   i | ]}|t dd |i qS )rj   rG   )r   r9   .0rj   rA   r   rB   rG   rH   
<dictcomp>  s    z4test_logistic_regression_solvers.<locals>.<dictcomp>r3   rrb   r   N)r   dictSOLVERS	itertoolscombinationsr   r   )
regressorssolver_1solver_2rG   r  rH    test_logistic_regression_solvers  s   r  rN   FTc                    s   t dddddd\ d}t| |ddd	d
d
d fddtttdg D }tj|ddD ]@\}}t|| j|| j|dksI|dkrKdnd| d| d | rtt|| j|| j|dksh|dkrjdnd| d| d q4dS )zATest solvers converge to the same result for multiclass problems.r   rr   rb   r   rC   r   r   rE   r*   :0yE>ry   )rN   rz   r*      '  r+   r/   r0   c              
      s2   i | ]}|t d||d d qS )rK   rj   r   rG   )r   getr9   r  rA   r   solver_max_iterrB   rG   rH   r    s    z?test_logistic_regression_solvers_multiclass.<locals>.<dictcomp>r,   r3   r  r0   {Gzt?r    vs rtolr   N)	r   r
  setr  r  r  r   r   r   )rN   rz   r  r  r  rG   r  rH   +test_logistic_regression_solvers_multiclass  s2   

r   c              	      sF  d\}}}t j|}t|||  ||  d|d | r"d dddf< t \}}}t |dks2J t |t | dk s@J | rL ddddf  |jdd	|| d
}	|		||}	|jdd|d
|  }
 |	j
 |
 }t|d}|j|}t |t|D ]}t |jd||ddf dd |< qdt| ddddddddd fddtttdg D }| D ]}t|| jjdddd|d qtj|ddD ]C\}}t|| j|| j|dks|dkrd nd!| d"| d# | r t|| j|| j|dks|dkrd nd| d"| d# qdS )$zGTest and compare solver results for unpenalized multinomial multiclass.)rK   rc   rb   rR   )rC   r   Zeffective_rankZtail_strengthr*   r2   Nr1   r   rK   rb   )lowhighsize)rE   )nZpvals)r   r   g&.>ry   rM   r  r  r  r  r   c                    s@   i | ]}|t dtj|||d d qS )rK   )rL   rj   rz   r   rG   )r   r6   infr  r9   r  rA   r   r  
solver_tolrz   rB   rG   rH   r    s    

zKtest_logistic_regression_solvers_multiclass_unpenalized.<locals>.<dictcomp>r,   r   r4   绽|=)atolr   r3   r  r0   r  gMb`?r  r  )r6   r   r   r   r	   allmaxminuniformZreshapeTr   linkZinversezerosrangeZargwherer   r
  r  r  keysr   r   r=   r  r  r   )rN   r   rC   r   rE   r   UsZVtcoefZ	interceptZraw_predictionlossr   r   r  rj   r  r  rG   r&  rH   7test_logistic_regression_solvers_multiclass_unpenalized  sh   


*

r7  weightrR   g?r   rT   r   r   balancedc           
   	   C   s   t | }|dkr
| }tddddd||d\}}tdd|dd	}tdd
di|}ttd ||| W d   n1 s>w   Y  tttg d D ],}tdd
|i|}	|dv rf|	j	dd|d d |	|| t
|	j|jd| dd qMdS )z+Test class_weight for LogisticRegressionCV.r8  r   rb   r   )rC   r   
n_repeatedr   n_redundantrE   r*   r2   Fr  )rd   rN   r   rz   rj   r+   categoryN)r+   r,   r.   r   gC]r2<r  )rz   r   r*   r   z	 vs lbfgsr  rG   )r5   r   r
  r   r$   r   r9   r  r  
set_paramsr   r   )
r8  r   r   rE   rA   rB   r   Z	clf_lbfgsrj   r@   rG   rG   rH   (test_logistic_regressioncv_class_weights-  sB   
		
r?  problem)singlerf   c                 C   s  d}d}t || dddd|d\}}tj|}t|jd }|d|dr)d	nd
dd}	|	 }
|jdd|d|d |< tj	||
tdd}tj	||
tdd}| dkr[t}nI| dkrt}tt|dt|dt|dg}tt j||d}|	d|d tj	||
tdd}tt j||d}|
d|d |dd|i|	}|dd|i|
}|dkrt  tdt |j|||d ||| W d    n1 sw   Y  n|j|||d ||| | dkrt|jd |jd  t|j|jdd d S )Nr  rb   r   r3   r   )rC   r   r   rE   r;  r*   Fr/   順 r   r  r*   rN   r   rz   r#  r4   rA  rf   r2   )groupsrK   )rd   rf   rj   r+   r{   rZ   r   r)  rG   )r   r6   r   r   r>   r8   
startswithr   randintrepeatr   intr   r   r   fullr   r   r   updater   r   r   r   r9   r   r   r   )r@  rj   r   Zn_samples_per_cv_groupZn_cv_groupsrA   rB   r   swkw_weightedZkw_repeatedZ
X_repeatedZ
y_repeatedr   Zgroups_weightedZsplits_weightedZgroups_repeatedZsplits_repeatedZclf_sw_weightedZclf_sw_repeatedrG   rG   rH   'test_logistic_regression_sample_weights]  sh   





rP  r   c                 C   s   t dddd|d\}}|d }|ddd	d
}td| dddd|}||| tdd| i|}|j|||d t|j|jdd d S )N,  r   rb   r3   r  r2   FrB  r  rC  r   )rj   r   rj   rF  r   rG  rG   r   r   r9   r   r   )rj   r   rA   rB   rZ   rO  Z	clf_cw_12Z	clf_sw_12rG   rG   rH   -test_logistic_regression_solver_class_weights  s,   

rS  c              
   C   s   t dddd| d\}}|d }tddddd	d
dd| d}||| tddd
dd| d}|||| t|j|jdd tddddd	dddd| d}||| tdddddd| d}|||| t|j|jdd d S )NrQ  r   rb   r3   r  r2   r,   Fr   r   r  -q=)rj   rN   r   r   r   rz   r*   )rj   rN   r   r   rz   r*   r(  rG  l2T)rj   rN   r   r   r   rz   r   r*   )rj   rN   r   r   rz   r   r*   rR  )r   rA   rB   rZ   Zclf_cwZclf_swrG   rG   rH   2test_sample_and_class_weight_equivalence_liblinear  sd   
	
	rV  c                 C   s*   t | }td|| d}tt||}|S )Nr9  )rD   rB   )r6   r7   r"   r
  zip)rB   rD   r   class_weight_dictrG   rG   rH    _compute_class_weight_dictionary   s   
rY  c                 C   s   | S r]   rG   xrG   rG   rH   <lambda>  s    r\  c                 C   s  t tj}|dd d d f }| |}tjdd  }t|}tttddg D ]h}t|dd}tdddi|}tdd|i|}|	|| |	|| t
|jdksWJ t|j|jd	d
 t|jd }	|jD ]}
|	||
k  ||
 9  < qktdi |j	|||	d}t|j|jd	d
 q(|ddd d f }tjdd }t|}tD ]/}t|dd}tdddi|}tdd|i|}|	|| |	|| t|j|jdd qd S )N-   r,   r.   r   r  r   r9  rb   -C6?r  r   rF  rK   r   r	  rG   )r    r}   r~   r   rY  r  r  r
  r   r9   r5   r;   r   r   r6   r>   r8   r   )rJ   ZX_irisrA   rB   rX  rj   r   r   clf2rN  cZclf3rG   rG   rH   &test_logistic_regression_class_weights  s:   

rb  c                  C   s  d\} }}t | |d|dd\}}tdd|}d}t|dd	}t|ddd
}||| ||| |jj||fks=J |jj||fksGJ dD ]N}t|dddd}t|ddddd}	||| |	|| |jj||fksrJ |	jj||fks|J t|j|jdd t|j|	jdd t|j|jdd qIdD ]#}t	|dddgd}
|
|| t|
j|jdd t|
j|jdd qd S )N)r   r   rb   rr   r   r  F)Z	with_meanr+   r   rj   rz   )rj   rN   rz   )r/   r0   r-   ry   r   gHz>)rj   r*   r   rz   )rj   r*   r   rz   rN   r   r_  rx   r   r   )rj   r   rz   rd   )
r   r   fit_transformr   r9   r   r8   r   r   r   )rC   r   rE   rA   rB   rj   Zref_iZref_wZclf_iZclf_wZclf_pathrG   rG   rH   $test_logistic_regression_multinomial/  sZ   


re  c                  C   sN   t dddd\} }tddd}|| | td} t|| td d S )Nr   r   r   Fr,   )rN   rj   )r   r   )r   r   r9   r6   r0  r   r:   )rA   rB   r@   rG   rG   rH   %test_liblinear_decision_function_zeroj  s
   
rf  c                 C   s0   t dddd\}}tdd}|| || d S )Nrr   r   r   r   r,   rj   r   r   r9   rJ   rA   rB   r@   rG   rG   rH   test_liblinear_logregcv_sparsey  s   
rj  c                 C   s2   t dddd\}}tddd}|| || d S )Nrr   r   r   r   r0   rx   rc  rh  ri  rG   rG   rH   test_saga_sparse  s   rk  c                  C   s(   t dd} | tt | jdksJ d S )NF)rN   r   )r   r9   rA   rO   r   r   rG   rG   rH   "test_logreg_intercept_scaling_zero  s   
rl  c                  C   s   t jd} d}t|ddd\}}| j|dfd}t j|dfd	}t j|||fd
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 d t	|j
ddd f t d d S )Nry   r   r   r   r   rb   rD  r3   r8   r2   r4   r   r   r,   Fr(  r   rL   rj   rN   rz   r0   r   r   rL   rj   rN   r   rz   r   )r6   r   r   r   normalr>   r   r   r9   r   r   r0  )r   rC   rA   rB   X_noise
X_constantlr_liblinearlr_sagarG   rG   rH   test_logreg_l1  s4   "rv  c           
      C   s*  t jd}d}t|ddd\}}|jd|dfd}t j|d	fd
}t j|||fdd}d||dk < | |}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 d t	|j
ddd f t d tddddddd}	|	| | t	|j
|	j
 d S )Nry   r   r   r   r   rR   rb   )r    r#  r3   rm  r2   r4   r   r   r,   Fr(  rn  r0   r   ro  rp  r   )r6   r   r   r   rq  r0  r   r   r9   r   r   Ztoarray)
rJ   r   rC   rA   rB   rr  rs  rt  ru  Zlr_saga_denserG   rG   rH   test_logreg_l1_sparse_data  sL   rw  random_seedr   r   rU  c                 C   sv   t dd| d\}}td|| ddd}tddgd	d
|}||| tdddi|}||| t|j|j d S )NrK   r   r   r0   r   rT  )rj   r   r*   r   rz   r   T)rd   refitrL   rG   )r   r
  r   r9   r   r   r   )rx  r   rA   rB   Zcommon_paramsr   rh   rG   rG   rH   !test_logistic_regression_cv_refit  s   rz  c                  C   s   t dddddd\} }tdd}|| | t||| }ttdd}|| | t||| }||ks9J t||| }t||| }||ksOJ d S )Nrr   r   r   rb   )rC   r   r*   rE   r   r+   rg  )r   r   r9   r   r<   r   Z_predict_proba_lr)rA   rB   r  Zclf_multi_lossZclf_ovrZclf_ovr_lossZclf_wrong_lossrG   rG   rH   %test_logreg_predict_proba_multinomial  s   


r{  r   r   rw   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)r0   r|  )r+   lbfgs failed to converge)r.   z6Newton solver did not converge after [0-9]* iterationsc                 C   s   t jt j }}d||dk< |dv r|dkrtd |dkr)| dkr)td t| d	|d|d
}tjt|d |	|| W d    n1 sJw   Y  |j
d | ksXJ d S )Nr   r3   r   r   z+'multinomial' is not supported by liblinearr.   r2   z/solver newton-cholesky might converge very fastgV瞯<)r   rz   rw   r*   rj   rl   )r}   r~   r   r   rn   skipr   ro   r   r9   n_iter_)r   rw   rj   r   rA   y_binrh   rG   rG   rH   test_max_iter  s"   

r  c           	      C   sd  t jt j}}| dkrt|}t|jd }|dksJ | }d||dk< d}d}tdd| dd	}|	|| |j
jd
ksAJ td| ||dd}|	|| |j
jd||fks[J |jdd	|| |j
j|fksnJ |jdd	|| |j
j|||fksJ | dv rd S |jdd	|| |j
jd
ksJ |jdd	|| |j
jd||fksJ d S )Nr+   r   rb   r3   rc   rx   r   ry   )rz   rL   rj   r*   r   )rz   rj   rd   rf   r*   r2   rv   rw   r   r   )r}   r~   r   r    r6   r7   r8   r   r   r9   r  r   r>  )	rj   rA   rB   rE   r  Zn_CsZ	n_cv_foldr@   Zclf_cvrG   rG   rH   test_n_iterG  s6   
r  r   )TFc           	      C   s   t jt j}}td|| d|d}ttd ||| |j}d|_||| W d    n1 s2w   Y  t	
t	||j }d|  d|d|}|rYd	|ksWJ |d S |d	ksaJ |d S )
Nr^  ry   )rz   r   rj   r*   rN   r<  r2   z Warm starting issue with solver zwith fit_intercept=z and warm_start=       @)r}   r~   r   r   r$   r   r9   r   r   r6   r=   abs)	rj   r   rN   rA   rB   r@   Zcoef_1Zcum_diffr   rG   rG   rH   test_warm_start}  s0   r  rU  Nc                 C   s   t jt j}}t|d||| d}ttd ||| W d   n1 s&w   Y  t|dd||| d}ttd ||| ||| W d   n1 sQw   Y  t|j|j |rht|j	|j	 dS dS )zITest that 2 steps at once are the same as 2 single steps with warm start.r3   )rj   r   rN   r   r*   r<  Nr2   T)rj   r   r   rN   r   r*   )
r}   r~   r   r   r$   r   r9   r   r   r   )r   rj   rN   r   rA   rB   r   r`  rG   rG   rH   test_warm_start_newton_solver  s6   r  c                 C   s  t  }|j|j}}t|gd }t|gd }||dk }||dk d d }tdddd\}}| |}||f||ffD ]J\}}dD ]C}|jd }	td	ddD ]4}
td
|	|
  ddd|ddd}td
|	|
  ddd|ddd}|	|| |	|| t
|j|jd qSqEq?d S )Nrb   r2   r3   r   r   r   r   )r   rU  r1   r   r0   r  Fr   )rL   rj   r   rN   r   r*   rz   r,   )r   r~   r   r6   r   r   r8   r   r   r9   r   r   )rJ   r}   rA   rB   ZX_binr  ZX_sparseZy_sparser   rC   alphar0   r,   rG   rG   rH   test_saga_vs_liblinear  sL   





r  )r,   r-   r.   r0   c                 C   s  | dkr|dkrt d|  d | dkrtjntj}tttj}tttj}tttj}tttj}|ttjd}	|ttjd}
d}t	| |d||d}t
|}||| |jj|ksjJ t
|}||	| |jj|ks|J t
|}||| |jjtjksJ t
|}||
| |jjtjksJ d	| }tjd
krtrd}t|j|jtj|d | dkr|rd}t|j|j|d t|j|j|d d S )Nr,   r   zSolver=z' does not support multinomial logistic.r   gMb@?ry   )rj   rw   r*   rz   rN   gQ@ntrx   rG  r0   rR   )rn   r~  r6   r   Zfloat32r   rA   r   rO   r   r   r9   r   r   osnamer&   r   )rj   rw   rN   rJ   Z
out32_typeZX_32Zy_32ZX_64Zy_64ZX_sparse_32ZX_sparse_64r'  Zlr_templZlr_32Zlr_32_sparseZlr_64Zlr_64_sparser)  rG   rG   rH   test_dtype_match  sJ   	r  c                  C   s   t jd} t | ddddg | ddf}t dgd dgd  }tdddd}tdd	dd}t||||	|}t
d
D ]}||| qDt||	|}t||dd d S )Nr   rK   r3   r2   r1   r/   F)rj   r   r*   Tr   r   r_  )r6   r   r   r   r   r   r   r   r9   r<   r1  r   )r   rA   rB   Zlr_no_wsZlr_wsZlr_no_ws_lossr   Z
lr_ws_lossrG   rG   rH   test_warm_start_converge_LR>  s   &r  c               
   C   s   t dd\} }d}d}t }d|fddfD ]\}}t||dd|d	d
d}|| | ||j q|\}}	}
tj||	dddrAJ tj||
dddrLJ tj|
|	dddrWJ d S )Nr   r)   r  rT   r   )r   Nr  r0   r   r  )r   rL   rj   r*   l1_ratiorz   r   rR   )r  r)  )r   r   r   r9   appendr   r6   allclose)rA   rB   rL   r  Zcoeffsr   ratiorh   Zelastic_net_coeffsZ	l1_coeffsZ	l2_coeffsrG   rG   rH   test_elastic_net_coeffsO  s(   	
r  rL   )r   rR   r2   rr   rK   r       .Azpenalty, l1_ratio)r   r2   )rU  r   c                 C   s^   t dd\}}td| |dddd}t|| dddd}||| ||| t|j|j d S )Nr   r)   r   r0   rx   )r   rL   r  rj   r*   rz   r   rL   rj   r*   rz   )r   r   r9   r   r   )rL   r   r  rA   rB   lr_enetZlr_expectedrG   rG   rH   "test_elastic_net_l1_l2_equivalencek  s   
r  )r   r2   rK   r  c                 C   s   t ddd\}}t||dd\}}}}dtdddi}td| ddd	d
}t||dd}	td| ddd	d
}
td| ddd	d
}|	|
|fD ]}||| qC|	|||
||ksZJ |	|||||kshJ d S )Nr   r   r)   r  r2   r   r   r0   rx   r  T)ry  r   rU  )r   r   r6   linspacer   r   r9   r[   )rL   rA   rB   X_trainX_testy_trainy_test
param_gridZenet_clfgsZl1_clfZl2_clfr@   rG   rG   rH   test_elastic_net_vs_l1_l2  s"   


 r  r3   rc   r  )rR   rT   r   c              	      s   t dddddddd\ttddd d	d
}tddd d	d}| |  fdd}||||k sCJ d S )Nr   r3   r   rr   r   rC   rE   r   r   r;  r:  r*   r   r0   F)r   rj   r*   rL   r  rN   rU  )r   rj   r*   rL   rN   c                    sV   | j  } t|  }|tt| 7 }|d d t|| 7 }|S )Nr   rT   )r   r   r   r<   r6   r=   r  r   )rh   r5  objrL   rA   r  rB   rG   rH   enet_objective  s
   
zEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective)r   r    r   r9   )rL   r  r  Zlr_l2r  rG   r  rH   -test_LogisticRegression_elastic_net_objective  s2   
	
r  rE   )r3   rb   c           
   	   C   s   t d| ddd\}}td}tddd}tddd}td	|d
||ddd}||| ||d}td	d
ddd}t|||d}	|	|| |	j	d |j
d ksSJ |	j	d |jd ks_J d S )NrK   rb   r   rC   rE   r   r*   r   r2   rc   r   r0   rx   )r   rd   rj   rf   	l1_ratiosr*   rz   rL   r  )r   rj   r*   rz   rf   r  rL   )r   r   r6   r  r   r   r9   r   r   Zbest_params_	l1_ratio_rg   )
rE   rA   rB   rf   r  rd   lrcvr  rh   r  rG   rG   rH   2test_LogisticRegressionCV_GridSearchCV_elastic_net  s6   
	
r  c               
   C   s   t ddddd\} }t| |dd\}}}}td}tddd}tdd	d}td
|d||dddd}	|	|| ||d}
td
ddddd}t	||
|d}||| |	
||
|k dksdJ |	
||
|k dkstJ d S )NrK   rb   r   r  r)   r   r2   r  rc   r   r0   rv   rx   )r   rd   rj   rf   r  r*   rw   rz   r  )r   rj   r*   rw   rz   r  rS   )r   r   r   r6   r  r   r   r9   r   r   r:   r   )rA   rB   r  r  r  r  rf   r  rd   r  r  rh   r  rG   rG   rH   6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovr  s<   	


 $r  )rU  r   )rv   r   autoc           	   
   C   s   d}d}t d|||dd\}}tddd}| dkr"tdd	d
}nd }t| |d|d|ddd}||| |jj|fks?J |jj|fksHJ |j	j||fksRJ d S )Nrb   r   r  r   rC   rE   r   r   r*   r  rc   r   r2   r3   r0   rx   F)r   rd   rj   r  r*   rw   rz   ry  )
r   r6   r   r  r   r9   rg   r8   r  r   )	r   rw   rE   r   rA   rB   rd   r  r  rG   rG   rH   "test_LogisticRegressionCV_no_refit#  s6   

r  c            
   
   C   s   d} d}t d| | |dd\}}tddd}tddd	}d	}td
|d||dddd}||| tt|j	 }|j
| ||j|j|d fksKJ tt|j	 }	|	j
| ||j|jfksbJ |jj
| ||j|jfkspJ d S )Nrb   r   r  r   r  r  rc   r2   r3   r   r0   rv   rx   )r   rd   rj   rf   r  rw   r*   rz   )r   r6   r   r  r   r9   r   r   r   r   r8   r#  r   r  )
rE   r   rA   rB   rd   r  Zn_foldsr  r   rV   rG   rG   rH   5test_LogisticRegressionCV_elasticnet_attribute_shapesL  sD   


 r  c                  C   sN   d} t jt| d tddddtt W d    d S 1 s w   Y  d S )NzQl1_ratio parameter is only used when penalty is 'elasticnet'\. Got \(penalty=l1\)rl   r   r0   rT   )r   rj   r  )rn   ro   rp   r   r9   rA   rO   )r   rG   rG   rH   test_l1_ratio_non_elasticnetx  s
   "r  c              
   C   s   d}t |ddddddd\}}t|}tdddd d	|d
|  | dd}tddddd|| dd}||| ||| t|j|jdd d S )Nr   r3   r   r   r2   r  r   Fr   r   r   )r   r*   rN   rz   r   r  r  r6  r   r   r0   )r   r*   rN   rz   r   r  rL   rj   r	  )r   r    r   r   r9   r   r   )rL   r  rC   rA   rB   ZsgdlogrG   rG   rH   test_elastic_net_versus_sgd  sD   
	

r  c               	   C   s  t dddddddd\} }g d}t| |d|d	dd
d\}}}tt t|d |d dd W d    n1 s:w   Y  tt t|d |d dd W d    n1 sZw   Y  tt t|d |d dd W d    d S 1 s{w   Y  d S )Nr  rb   r3   r   r2   )rC   rE   r   r;  Zn_clusters_per_classr*   r   )r   r2   r  r   r0   r   )r   rd   rj   r*   rw   r	  )r   r   rn   r   r   r   )rA   rB   rd   r   r   rG   rG   rH   /test_logistic_regression_path_coefs_multinomial  s8   
	
"r  estr   )r*   r   rb   r   )r*   rf   rd   rz   r   c                 C   s   | j jS r]   )	__class__r^   rZ  rG   rG   rH   r\    s    )Zidsc              	      sV   fdd}t tj}|d d d }|dd d }tjd d d }|dk}|||d|d}|||d|d}	t|j|	j t|||	| |||d|d}
|d	kro|||d|d}t|
j|j t|
||| d S |||d
|d}t|
j|j t|
||| t|j|||d
|djrJ t|j|||d
|djrJ d S )Nc                    s   t  jdi || |S )NrG   )r   r>  r9   )rA   rB   kwr  rG   rH   r9     s   z6test_logistic_regression_multi_class_auto.<locals>.fitrr   r2   r   r  )rw   rj   rv   r,   r   )	r    r}   r~   r   r   r   r<   r6   r  )r  rj   r9   Zscaled_datarA   X2Zy_multir  Zest_auto_binZest_ovr_binZest_auto_multiZest_ovr_multiZest_multi_multirG   r  rH   )test_logistic_regression_multi_class_auto  s<   
r  c           	      C   s   t dddd\}}d}td | dd}tjt|d ||| W d    n1 s*w   Y  td | dd}td	tj| dd
}||||}||||}t	|| d S )Nr   r   )rC   r;  r*   z&Setting penalty=None will ignore the Crc   )r   rj   rL   rl   )r   rj   r*   rU  )r   rL   rj   r*   )
r   r   rn   ro   rp   r9   r6   r%  r:   r   )	rj   rA   rB   r   rh   Zlr_noneZlr_l2_C_infZ	pred_noneZpred_l2_C_infrG   rG   rH   test_penalty_none  s   
r  r   r   r   )r   r   rz   r   rT  c                 C   sZ  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 dd}t jg dt dd}t ||g}t |d| g}t jt|d d	}d
|t|d < t|||d
d\}}}tddd}|j	di |  t
|||}t
|j|||d}dD ]}	t||	|}
t||	|}t|
| qd S )Nr2   rb   r3   rc   floatr   )r2   r2   r2   r2   r3   r3   r3   r3   r2   r2   r2   r2   r3   r3   r3   r3   rK  rm  r   r)   r,   ry   )rj   r*   rF  )r:   r<   r   rG   )r6   r   r   ZvstackZhstackr>   r5   r#   r   r>  r   r9   getattrr   )r   rA   rB   r  y2rZ   Zbase_clfZclf_no_weightZclf_with_weightmethodZX_clf_no_weightZX_clf_with_weightrG   rG   rH   /test_logisticregression_liblinear_sample_weight  sJ   r  c                  C   s   t ddd\} }tdd}ddg}g d}td	d
|||dddd}|| | |jd jdd}t|D ]/\}}t|D ]&\}	}
td	d
||
dddd}t|| ||d }|||	f t	
|ksbJ q<q4d S )Nr   r   r   r   )Zn_splitsrR   r   )rR   r2   rr   r   r0      r   )r   rj   r  rd   rf   r*   r   rz   r2   r4   )r   rj   rL   r  r*   r   rz   r  )r   r   r   r9   r   r   r   r   r   rn   approx)rA   rB   rf   r  rd   r  Zavg_scores_lrcvr   rL   jr  rh   Zavg_score_lrrG   rG   rH   'test_scores_attribute_layout_elasticnetN  s>   


r  )r+   r-   r.   c                 C   s   t jj\}}t jt j }ttt jd|d}tt j}||| t	|j
jddddd |r?|jjddtjdddksAJ 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   rj   rN   r   r4   r(  rG  gdy=)r  N)r}   r~   r8   r   r   r   r5   r    r9   r   r   r=   r   rn   r  )rj   rN   rC   r   r   r@   ZX_scaledrG   rG   rH   (test_multinomial_identifiability_on_irisz  s   
 r  r   g      $@c                 C   sf   t dd\}}t|}t|}d|d |d < | }td|d| d}|j|||d t|| d S )NTZ
return_X_yr3   r   r  )r*   r   r   rw   rF  )r   r5   r6   r>   r   r   r9   r   )rw   r   rA   rB   r   Wexpectedr@   rG   rG   rH   test_sample_weight_not_modified  s   
r  c                 C   s   |t jdd|d}dD ]}t||t||d qtj|}|jd|j	d d}| d	v rTd
}t
jt|d t| d|| W d    d S 1 sMw   Y  d S t| d|| d S )Nr   rr   r)   )indicesZindptrZint64r3   r   rD  )r,   r/   r0   z0Only sparse matrices with 32-bit integer indicesrl   rg  )r   Zrandsetattrr  r   r6   r   r   rI  r8   rn   r   r   r   r9   )rj   r   rJ   rA   attrr   rB   r   rG   rG   rH   test_large_sparse_matrix  s   "r  c                  C   sJ   t g dgj} t g d}| jd dksJ tddd| | d S )N)rT   g?g?g      ?rS   gHzG?r|   ffffff?)r2   r2   r   r   r2   r2   r   r2   r2   r-   T)rj   rN   )r6   r   r.  r8   r   r9   )rA   rB   rG   rG   rH   test_single_feature_newton_cg  s   r  c               	   C   s   t j } t j }| |dk } ||dk }t | }t| |ddd }tddddd	d
|d}t	  t
dt ||| W d    d S 1 sLw   Y  d S )Nr3   r  )r6  gnt@r   r,   r   rK   r   r   )r   rj   rz   r   r   r*   rL   error)r}   r~   r   r   r   rd  r!   r   r   r   r   r   r9   )rA   rB   ZX_preprL   r@   rG   rG   rH   test_liblinear_not_stuck  s&   


"r  Zenable_metadata_routingc                  C   s  t jd} td| d\}}td| d\}}t t|}d|dt|d < d|i}td}t|d}|j||fi | td}	|	j	dd	 t|	d}
|
j||fi | t 
|jd
 |
jd
 reJ |j||fi |}|
j||fi |}t 
||rJ 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.
    rr   r   r3   NrZ   r   re   TrF  r2   )r6   r   r   r   r>   r5   r   r   r9   set_score_requestr  r   r[   )r   rA   rB   X_ty_trZ   kwargsscorer1lr_cv1scorer2lr_cv2score_1score_2rG   rG   rH   8test_lr_cv_scores_differ_when_sample_weight_is_requested  s"   

r  c                  C   sN  t jd} td| d\}}td| d\}}t t|}d|dt|d < d|i}tdd% td}t|d	}|j	||fi | |j
||fi |}	W d   n1 sXw   Y  td
d+ td}
|
jd
d t|
d	}|j	||fi | |j
||fi |}W d   n1 sw   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`
    rr   r   r3   NrZ   Fr  r   r  TrF  r2   )r6   r   r   r   r>   r5   r
   r   r   r9   r[   r  r   r   )r   rA   rB   r  r  rZ   r  r  r  r  r  r  r  rG   rG   rH   3test_lr_cv_scores_without_enabling_metadata_routing	  s*   

r  c                 C   s   t dd\}}|dk}ttd t| dd||}W d    n1 s%w   Y  | dvr5|jdks5J | dkrft|jt	|j t|
|tj|jd |jd	 t||tj|jd dfd
d	 |||dk spJ d S )NTr  r3   r<  r   r  )r0   r/   r+   )r8   Z
fill_valuerT   r  )r   r$   r   r   r9   r  r   r   r6   Z
zeros_liker   rL  r8   r   r<   r[   )rj   rA   rB   r@   rG   rG   rH   test_zero_max_iter-	  s$   r  c               	   C   s   t ddd\} }t }d}tddW ddi}tjt|d	 |j| |fi | W d
   n1 s3w   Y  tjt|d	 |j| |fi | W d
   n1 sTw   Y  W d
   d
S W d
   d
S 1 slw   Y  d
S )zTest that the right error message is raised when metadata params
    are passed while not supported when `enable_metadata_routing=False`.rr   r   r   z1is only supported if enable_metadata_routing=TrueFr  Zextra_paramr   rl   N)r   r   r
   rn   r   r   r9   r[   )rA   rB   r   r   r   rG   rG   rH   5test_passing_params_without_enabling_metadata_routingG	  s   "r  c                  C   sB  t dddd\} }tdd}d}tjt|d || | W d	   n1 s(w   Y  tdd}tjt|d || | W d	   n1 sJw   Y  t d
ddd\} }tdd}d}tjt|d || | W d	   n1 sww   Y  tdd}tjt|d || | W d	   d	S 1 sw   Y  d	S )z)Check `multi_class` parameter deprecated.rb   r   r   )rE   rC   r   rv   r  z'multi_class' was deprecatedrl   Nr3   r   z-'multi_class' was deprecated.*binary problems)r   r   rn   ro   FutureWarningr9   r   )rA   rB   rh   r   ZlrCVrG   rG   rH   test_multi_class_deprecatedY	  s(   



"r  c           
   	   C   sd  t dd| d\}}d}td|d}t  td ||| |jd }W d    n1 s0w   Y  |d	ks;J td
|d}ttd ||| |jd }W d    n1 s\w   Y  ||ksgJ td
||d	 d}ttd* t	j
tdd ||| |jd }	W d    n1 sw   Y  W d    n1 sw   Y  |	|jd	 ksJ d S )Nrr   r   r   gꌠ9Y>)Fr+   )rj   rL   r  r   r2   r.   r<  )rj   rL   r   r}  rl   )r   r   r   r   r   r9   r  r$   r   rn   ro   r   r   )
r   rA   rB   rL   Zlr_lbfgsZn_iter_lbfgsZlr_ncZ	n_iter_ncZlr_nc_limitedZn_iter_nc_limitedrG   rG   rH   &test_newton_cholesky_fallback_to_lbfgsq	  s8   



r  	Estimatorc                 C   sN   d}t jt|d | ddtjtj W d   dS 1 s w   Y  dS )z2Check that liblinear warns on multiclass problems.a  Using the 'liblinear' solver for multiclass classification is deprecated. An error will be raised in 1.8. Either use another solver which supports the multinomial loss or wrap the estimator in a OneVsRestClassifier to keep applying a one-versus-rest scheme.rl   r,   rg  N)rn   ro   r  r9   r}   r~   r   )r  r   rG   rG   rH   !test_liblinear_multiclass_warning	  s
   "r  )r  r  r   	functoolsr   numpyr6   rn   Znumpy.testingr   r   r   r   Zscipyr   Zscipy.linalgr   r	   Zsklearnr
   Zsklearn._lossr   Zsklearn.baser   Zsklearn.datasetsr   r   r   Zsklearn.exceptionsr   Zsklearn.linear_modelr   Zsklearn.linear_model._logisticr   ZLogisticRegressionDefaultr   ZLogisticRegressionCVDefaultr   r   Zsklearn.metricsr   r   Zsklearn.model_selectionr   r   r   r   r   Zsklearn.multiclassr   Zsklearn.preprocessingr   r   r    Zsklearn.svmr!   Zsklearn.utilsr"   r#   Zsklearn.utils._testingr$   r%   Zsklearn.utils.fixesr&   r'   r(   markfilterwarningsZ
pytestmarkr  rA   rO   rt   r}   rI   ZparametrizerQ   ri   rq   ru   r5   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r7  r?  rP  rS  rV  rY  rb  re  rf  rj  rk  rl  rv  rw  rz  r{  r   r  r  r   r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rG   rG   rG   rH   <module>   s   
!



(

	


	>!



#)


B
#
E.C
;
&;

$
2

1

.H
)

(

.
&
+	(
!
*

-
,
*
+