o
    tBh                 
   @   sv  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZ d dlZd dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d dl m!Z! d dlm"Z" d dl#m$Z$ d dlm%Z% d dl m&Z& d dl'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- dd gd dgddggZ.e/e.Z0g dZ1g dZ2e Z3dd Z4dd Z5dd Z6d d! Z7e&d"d# Z8d$d% Z9d&d' Z:ej;<d(g d)d*d+ Z=ej;<d,e,e-gd-d. Z>ej;<d(g d)d/d0 Z?d1d2 Z@d3d4 ZAd5d6 ZBd7d8 ZCd9d: ZDd;d< ZEd=d> ZFd?d@ ZGdAdB ZHej;<dCdDdEgfdFdGdHgfdIdGdHgfdJdEgfdKdGdHgfgdLdM ZIdNdO ZJdPdQ ZKdRdS ZLdTdU ZMdVdW ZNdXdY ZOdZd[ ZPd\d] ZQd^d_ ZRd`da ZSdbdc ZTddde ZUdfdg ZVdhdi ZWdjdk ZXdldm ZYdndo ZZej;<dpdqgej;<drdsdtgdudv Z[dwdx Z\ej;<dye]ddzej;<d{d|d}gej;<d~g ddd Z^ej;<d(g ddd Z_ej;<d(dej;<ddej;<ddej;<d{d|d}gdd Z`dd Zaej;<d{d|d}gej;<d(g dej;<dddgdd Zbdd Zcdd Zdej;<dg dej;<dddgdd Zeej;<dg ddd Zfej;<degdddej;<dg ddd Zhej;<d{ddd Zidd Zjej;<drdej;<d{ddd Zkdd Zlej;<dddd Zmej;<dg ddgddfdd Znej;<degdddej;<dg ddd Zodd Zpej;j<de,d dde-d dddddÍgddń dƍej;<d(g dǢddɄ Zqej;<d(d)dd˄ Zrej;<ddsddddϜdtddddϜdtddddϜgddф Zsddӄ Ztej;<dddgddՄ Zuej;<d{g dej;<dddddٜdgdd܄ Zvej;<d(g dǢddބ ZwdS )    N)assert_allcloseassert_almost_equal)assert_array_almost_equalassert_array_equal)sparse)clone)	load_irismake_classification)log_loss)
get_scorer)StratifiedKFold)GridSearchCV)train_test_split)cross_val_score)LabelEncoderStandardScaler)compute_class_weight	_IS_32BIT)ignore_warnings)shuffle)SGDClassifier)scale)skip_if_no_parallel)ConvergenceWarning)_log_reg_scoring_path_logistic_regression_pathLogisticRegressionLogisticRegressionCV   )r   r   r   )   r   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   r   axisN)lennpuniqueshapefitpredictr   classes_predict_probar   sumonesargmax)clfXy	n_samplesclasses	n_classes	predictedprobabilities r6   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictions*   s   



r8   c                   C   sx   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   random_stated   )Cr:   F)fit_interceptr:   )r8   r   r/   Y1X_spr6   r6   r6   r7   test_predict_2_classes<   s   r@   c               	   C   s  d} t jt| d tddtt W d    n1 sw   Y  t jt| d tddtt W d    n1 s=w   Y  d} t jt| d tddd	tt W d    n1 s`w   Y  ttfD ]}d
} t jt| d |ddtt W d    n1 sw   Y  t jt| d |ddtt W d    n1 sw   Y  d} t jt| d |ddtt W d    n1 sw   Y  t jt| d |ddtt W d    n1 sw   Y  qid S )NzPenalty term must be positivematchr   r<   testzis not a valid scoring valuez
bad-scorerr    )scoringcvz0Tolerance for stopping criteria must be positive)tolz,Maximum number of iteration must be positive)max_iter)pytestraises
ValueErrorr   r'   r/   r>   r   )msgLRr6   r6   r7   
test_errorI   s8   rN   c                  C   s   G dd d} |  }g d}d}t |||d}|tt |jd |d ks(J |j|t| ks3J d|_|t|t}||j	d ksHJ |jdksOJ 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)selfr6   r6   r7   __init__k   s   z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__Nc                 S   s(   | j | jt| j   }|  jd7  _|S )Nr   )rS   rR   r#   )rT   modelr/   r0   sample_weightscorer6   r6   r7   __call__o   s   z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__N)__name__
__module____qualname__rU   rY   r6   r6   r6   r7   
MockScorerj   s    r^   )r   r          r    )CsrE   rF   r   r   )
r   r'   r/   r>   C_rR   r#   rX   r(   rS   )r^   mock_scorerra   rF   lrcustom_scorer6   r6   r7   test_logistic_cv_mock_scoreri   s   
rf   c                  C   sj   t jj\} }t jt j }tddd}d}tjt|d |	t j| W d    d S 1 s.w   Y  d S )N	liblinearr    )solvern_jobsz\'n_jobs' > 1 does not have any effect when 'solver' is set to 'liblinear'. Got 'n_jobs' = 2.rA   )
irisdatar&   target_namestargetr   rI   warnsUserWarningr'   )r1   
n_featuresrm   rd   warning_messager6   r6   r7   test_lr_liblinear_warning   s   "rr   c                   C   s(   t tddtt t tddtt d S )N
   rC   )r8   r   r/   Y2r?   r6   r6   r6   r7   test_predict_3_classes   s   ru   c                  C   s  t jj\} }t jt j }ttt jdddttt jdddttt jdddttt jdddd	d
ttt jdddd	d
fD ]I}|t j| tt	
||j |t j}t	||kdksbJ |t j}t|jddt	|  t j|jdd }t	||kdksJ q?d S )Nrg   ovrr<   rh   multi_classlbfgsmultinomial	newton-cgsag{Gz?*   )r<   rh   rG   rx   r:   sagagffffff?r   r!   )rj   rk   r&   rl   rm   r   r#   r'   r   r$   r%   r)   r(   meanr*   r   r+   r,   r-   )r1   rp   rm   r.   predr5   r6   r6   r7   test_predict_iris   s6   r   rh   ry   r{   r|   r   c                 C   sZ   t d| dd}tt |ddgddggddg W d    d S 1 s&w   Y  d S )Nr   rz   rw   r   r   )r   rI   rJ   rK   r'   )rh   rd   r6   r6   r7   test_multinomial_validation   s   "r   rM   c              	   C   sL  t jt j}}d}| ddd}tjt|d ||| W d    n1 s'w   Y  d}| ddd}tjt|d ||| W d    n1 sLw   Y  d}| d	d
d}tjt|d ||| W d    n1 sqw   Y  dD ]*}d| }| |ddd}tjt|d ||| W d    n1 sw   Y  qxdD ]*}d| }| |ddd}tjt|d ||| W d    n1 sw   Y  qdD ]*}d|}| |dd}tjt|d ||| W d    n1 sw   Y  qd}| dd	d}tjt|d ||| W d    d S 1 sw   Y  d S )NzrLogistic Regression supports only solvers in \['liblinear', 'newton-cg', 'lbfgs', 'sag', 'saga'\], got wrong_name.
wrong_namerv   rh   rx   rA   zDmulti_class should be 'multinomial', 'ovr' or 'auto'. Got wrong_namer{   z8Solver liblinear does not support a multinomial backend.rg   rz   )r{   ry   r|   z1Solver %s supports only 'l2' or 'none' penalties,l1)rh   penaltyrx   )r{   ry   r|   r   z1Solver %s supports only dual=False, got dual=TrueT)rh   dualrx   )rg   z>Only 'saga' solver supports elasticnet penalty, got solver={}.
elasticnet)rh   r   z8penalty='none' is not supported for the liblinear solvernone)r   rh   )rj   rk   rm   rI   rJ   rK   r'   format)rM   r/   r0   rL   rd   rh   r6   r6   r7   test_check_solver_option   sZ   $r   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   setosaz
not-setosarz   r~     )rh   rx   r:   rH   r   r   F)rh   rx   r:   r=   r!   ?)rj   rm   astyper$   intparrayr   r'   rk   coef_r&   
intercept_r   r(   r)   r-   predict_log_probar   )rh   rm   r.   mlrr   r6   r6   r7   test_multinomial_binary  s   r   c                  C   sv   t  \} }tddd}|| | || }|| }t|t|t|   }tjd| |f }t|| d S )Nrz   r   rx   rh   r   )	r	   r   r'   decision_functionr*   r$   expc_r   )r/   r0   r.   decisionprobaexpected_proba_class_1expected_probar6   r6   r7   %test_multinomial_binary_probabilities  s   


 r   c            	      C   s   t jj\} }t jt j }tddt j|}|t j}|  t	
|js(J |t j}t	t j}||}|  ||}t|| t|| t|| d S Nr   r9   )rj   rk   r&   rl   rm   r   r'   r   sparsifyr   issparser   
coo_matrixdensifyr   )	r1   rp   rm   r.   pred_d_dpred_s_dsp_datapred_s_spred_d_sr6   r6   r7   test_sparsify(  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   )   rs   r9   r   )r_      )r$   randomRandomStaterandom_sampler,   r&   r   rI   rJ   rK   r'   r/   r(   )rngX_y_r.   y_wrongr6   r6   r7   test_inconsistent_input?  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   r'   r/   r>   r   r   r   r   r.   r6   r6   r7   test_write_parametersS  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   r   r   r9   )r$   r   r/   float64nanr   rI   rJ   rK   r'   r>   )Xnanlogisticr6   r6   r7   test_nan\  s   

"r   c                  C   sd  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d	\}}}t|D ]&\}}	t	|	d	d
|dddd}
|

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

|| t |
j |
jg}t||d dd| d qpd S )Nr   r;   r    r   r   r`   rs   r|   r   Fh㈵>  rv   )ra   r=   rG   rh   rH   rx   r:   )r<   r=   rG   rh   rx   r:   rH   zwith solver = %s)decimalerr_msg)ry   r{   rg   r|   r        @@ư>g     @)ra   rG   rh   intercept_scalingr:   rx   -C6?)r<   rG   r   r:   rx   rh   )r$   r   r   concatenaterandnlogspacer   r   	enumerater   r'   r   ravelr   r   )r   r/   r0   ra   frh   coefs_ir<   rd   lr_coefr6   r6   r7   test_consistency_pathg  sv   &	

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   r;   r    r   r   r           )ra   rG   rH   r:   verboselbfgs failed to convergez!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r$   r   r   r   r   rI   rn   r   r   r#   messageargs)r   r/   r0   ra   recordwarn_msgr6   r6   r7   .test_logistic_regression_path_convergence_fail  s   &r   c                  C   s   t ddd\} }tddddddd	}|| | tddddddd	}|| | td
dddddd	}|| | t|j|j d}tjt|d t|j|j W d    d S 1 s[w   Y  d S )N   r   r1   r:   Tr   V瞯<rg   rv   )r:   r   rH   rG   rh   rx      z)Arrays are not almost equal to 6 decimalsrA   )r	   r   r'   r   r   rI   rJ   AssertionError)r/   r0   lr1lr2lr3rL   r6   r6   r7    test_liblinear_dual_random_state  sB   "r   c            	      C   s*  d\} }t jd}|| |}t |d|| }|| 8 }||  }tdgddddd	}|	|| t
ddddd
}|	|| t|j|j t|jjd|f t|jddg t|jdkshJ 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         ?Frg   rv   r_   )ra   r=   rh   rx   rF   )r<   r=   rh   rx   r   r   r    r   )r   r_   r   )r$   r   r   r   signdotr   stdr   r'   r   r   r   r   r&   r)   r#   asarraylistcoefs_paths_valuesCs_scores_)	r1   rp   r   X_refr0   lr_cvrd   coefs_pathsrS   r6   r6   r7   test_logistic_cv  s.   r   zscoring, multiclass_agg_listaccuracy 	precision_macro	_weightedf1neg_log_lossrecallc                 C   s   t ddddd\}}tdtdd}}tddd	}| }d
D ]}||= q"||| ||  |D ]&}	t| |	 }
tt||||fdg|
d|d d |
||| ||  q4d S )Nr;   r   r_      )r1   r:   r3   n_informativeP   r   rz   )r<   rx   )r<   ri   
warm_start)ra   rE   r    )	r	   r$   aranger   
get_paramsr'   r   r   r   )rE   multiclass_agg_listr/   r0   trainrD   rd   paramskey	averagingscorerr6   r6   r7   "test_logistic_cv_multinomial_score  s4   
r
  c            
      C   s~  d\} }}t | ||ddd\}}t g d|}t|d }tdd}tddd	}tdd}tddd	}	||| ||| ||| |	|| t|j	|j	 t
|jg dksbJ t|j	|	j	 t
|jg dkstJ t
|	jg dksJ t
t||g dksJ t
t|	|g dksJ tdd
dddd||}	t
t|	|ddgksJ d S )N)r   r   r_   r_   r   )r1   rp   r3   r   r:   )barbazfoor   rz   rx   )rx   ra   r    )class_weightrx   r  r  )r	   r   r'   inverse_transformr$   r   r   r   r   r   sortedr)   r%   r(   )
r1   rp   r3   r   r0   y_strrd   r   lr_str	lr_cv_strr6   r6   r7   2test_multinomial_logistic_regression_string_inputs+  s>   



  $r  c                  C   s|   t dddd\} }d| | dk < t| }t }|| | t }||| t|j|j t|j|j |j|jks<J d S )Nr   r   r   r1   rp   r:   r   r   )	r	   r   
csr_matrixr   r'   r   r   r   rb   )r/   r0   csrr.   clfsr6   r6   r7   test_logistic_cv_sparseT  s   
r  c               	   C   sL  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 ]z}|dv rdnd}t|d|d|dv rdnddd}|| | || |}|| |}||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 )Nr    rv   )rF   rx   r   r   r_   r   r   r    rs   )rs   r   r        rz   r~   MbP?r}   )rh   rx   rH   r:   rG   rF   )rj   rk   rm   r&   r   r   splitr   r'   copyr   r   r   r   r$   newaxisr   r)   r   r   r   r   rX   )r  rm   r1   rp   n_cvrF   precomputed_foldsr.   clf1target_copyr   rS   rh   rH   	clf_multimulti_score	ovr_scorer6   r6   r7   test_ovr_multinomial_irisb  sV   
 r)  c                     sp   t dddd\ tddddd	}  fd
d| D }tj|ddD ]\}}t|| j|| jdd q$dS )z)Test solvers converge to the same result.rs   r   r   )rp   r   r:   Fr~   rv   )r=   r:   rx   r{   ry   rg   r|   r   c                    s(   i | ]}|t dd |i qS )rh   r6   )r   r'   .0rh   r/   r  r0   r6   r7   
<dictcomp>  s    z4test_logistic_regression_solvers.<locals>.<dictcomp>r    rr_   r   Nr	   dict	itertoolscombinationsr   r   )solvers
regressorssolver_1solver_2r6   r-  r7    test_logistic_regression_solvers  s   r:  c                     s   t dddddd\ d} td| dd	d
d}ddd fdd|D }tj|ddD ]\}}t|| j|| jdd q/dS )zATest solvers converge to the same result for multiclass problems.r   rs   r_   r   r1   rp   r   r3   r:   Hz>Fr~   rv   )r=   rG   r:   rx   r*  r   '  r   c              
      s2   i | ]}|t d||d d qS )r;   )rh   rH   r6   )r   getr'   r+  r/   r  solver_max_iterr0   r6   r7   r.    s    z?test_logistic_regression_solvers_multiclass.<locals>.<dictcomp>r    r/  r`   r1  Nr2  )rG   r6  r7  r8  r9  r6   r?  r7   +test_logistic_regression_solvers_multiclass  s   


rA  c            
      C   s:  dddddddfD ]} t | }| dfD ]}tddd	dd	|d	d
\}}tdddd|d}tdddd|d}tdddd|d}tdddd|ddd	d}tdddd|ddd	d}	||| ||| ||| ||| |	|| t|j|jdd t|j|jdd t|j|jdd t|	j|jdd qqd S )NrO   g?r   rQ   r  balanced   r_   r   )r1   rp   
n_repeatedr   n_redundantr3   r:   ry   r   Frv   )rh   ra   r=   rx   r  r{   rg   r|   r   r=  )rh   ra   r=   rx   r  rG   rH   r:   r   r`   r1  )r#   r	   r   r'   r   r   )
weightr3   r  r/   r0   clf_lbfclf_ncgclf_libclf_sagclf_sagar6   r6   r7   (test_logistic_regressioncv_class_weights  s   



rL  c               	   C   s  t dddddd\} }|d }ttfD ]}dd	d
d}|tu r'|ddd dD ]1}|d!d|i|}|d!d|i|}|| | |j| |t|jd d t|j	|j	dd q)|d!i |}|j| ||d |d!ddi|}	|	j| ||d |d!ddd|}
t
  |
j| ||d W d    n1 sw   Y  |d!ddi|}|j| ||d t|j	|	j	dd t|j	|
j	dd t|j	|j	dd dD ]/}|d!|dddd|}|| | |d!d|i|}|j| ||d t|j	|j	dd qqtdd	ddddddd
d}|| | td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 )"Nr   r   r_   r    r   r;  r   r~   Frv   )r:   r=   rx   )ra   rF   )ry   rg   rh   rW   r`   r1  r{   r|   绽|=)rh   rG   rg   r   )rh   r  r   r   )rh   r=   r  r   rG   r:   rx   )rh   r=   r   rG   r:   rx   l2T)rh   r=   r  r   r   r:   rx   )rh   r=   r   r   r:   rx   r6   )r	   r   r   updater'   r$   r,   r&   r   r   r   )r/   r0   rW   rM   kwrh   clf_sw_noneclf_sw_onesclf_sw_lbfgsclf_sw_n
clf_sw_sagclf_sw_liblinear	clf_cw_12	clf_sw_12clf_cwclf_swr6   r6   r7   'test_logistic_regression_sample_weights  s   

			r\  c                 C   s*   t | }td|| d}tt||}|S )NrB  )r2   r0   )r$   r%   r   r3  zip)r0   r2   r  class_weight_dictr6   r6   r7    _compute_class_weight_dictionaryk  s   
r_  c                  C   s  t jdd d d f } t jdd  }d}t|}|D ]%}t|ddd}t|d|d}|| | || | t|j|jdd qt jddd d f } t jdd }d	}t|}|D ]%}t|d
dd}t|d
|d}|| | || | t|j|jdd qZd S )N-   )ry   r{   rz   rB  )rh   rx   r  r`   r1  r;   )ry   r{   rg   rv   r   )rj   rk   rm   r_  r   r'   r   r   )r/   r0   r6  r^  rh   r$  clf2r6   r6   r7   &test_logistic_regression_class_weightss  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 ]P}t|ddddd}t|dddddd}	||| |	|| |jj||fkstJ |	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dgd}
|
|| t|
j|jdd t|
j|jdd qd S )N)r   r   r_   rs   r   r;  F)	with_meanry   rz   r   )rh   rx   r=   )r|   r   r{   r~   r   r<  )rh   rx   r:   rH   rG   )rh   rx   r:   rH   rG   r=   r}   rtolr   r   r   )rh   rH   rG   rx   ra   g{Gz?)
r	   r   fit_transformr   r'   r   r&   r   r   r   )r1   rp   r3   r/   r0   rh   ref_iref_wclf_iclf_wclf_pathr6   r6   r7   $test_logistic_regression_multinomial  sb   

rl  c                  C   sP   t dddd\} }tdddd}|| | td} t|| td d S )	Nr   r   r  Frg   rv   )r=   rh   rx   )r   r   )r	   r   r'   r$   zerosr   r(   r/   r0   r.   r6   r6   r7   %test_liblinear_decision_function_zero  s
   
ro  c                  C   s4   t dddd\} }tddd}|t| | d S )Nrs   r   r   r  rg   rv   r   r	   r   r'   r   r  rn  r6   r6   r7   test_liblinear_logregcv_sparse  s   rq  c                  C   s2   t dddd\} }tdd}|t| | d S )Nrs   r   r   r  r   rh   rp  rn  r6   r6   r7   test_saga_sparse  s   
rs  c               	   C   s`   dD ]+} t | ddd}d|j }tjt|d |tt W d    n1 s(w   Y  qd S )N)r   r   rg   rv   )r   rh   rx   zqIntercept scaling is %r but needs to be greater than 0. To disable fitting an intercept, set fit_intercept=False.rA   )r   r   rI   rJ   rK   r'   r/   r>   )r   r.   rL   r6   r6   r7   test_logreg_intercept_scaling  s   rt  c                  C   s(   t dd} | tt | jdksJ d S )NF)r=   r   )r   r'   r/   r>   r   r   r6   r6   r7   "test_logreg_intercept_scaling_zero  s   
ru  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d}||| td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 )Nr~   r   r   r   r  r_   sizer    r&   r   r!   r   r   rg   Frv   rN  r   r<   rh   r=   rx   rG   r   r   r   r<   rh   r=   rx   rH   rG   r   )r$   r   r   r	   normalr,   r   r   r'   r   r   rm  )r   r1   r/   r0   X_noise
X_constantlr_liblinearlr_sagar6   r6   r7   test_logreg_l1  s8   	"r  c            	   	   C   s2  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|}t	ddddddd}|
|| t	d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d}|
| | t|j|j d S )Nr~   r   r   r   r  rO   r_   )r   rw  r    rx  r   r!   r   r   rg   Frv   rN  ry  r   r   rz  r{  r   )r$   r   r   r	   r|  rm  r   r   r  r   r'   r   r   toarray)	r   r1   r/   r0   r}  r~  r  r  lr_saga_denser6   r6   r7   test_logreg_l1_sparse_data4  sR   
		r  random_seedr~   r   r   rO  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 )Nr;   r   r  r   r   -q=)rh   r   r:   rH   rG   r   T)ra   refitr<   r6   )r	   r3  r   r'   r   r   r   )r  r   r/   r0   common_paramsr   rd   r6   r6   r7   !test_logistic_regression_cv_refiti  s   r  c                  C   s   t dddddd\} }tddd}|| | t||| }td	dd}|| | t||| }||ks9J t||| }t||| }||ksOJ d S )
Nrs   r   r   r_   )r1   rp   r:   r3   r   rz   ry   r   rv   )r	   r   r'   r
   r*   _predict_proba_lr)r/   r0   r&  clf_multi_lossclf_ovrclf_ovr_lossclf_wrong_lossr6   r6   r7   %test_logreg_predict_proba_multinomial  s   

r  rH   r   rx   rv   rz   zsolver, message))r{   z@newton-cg failed to converge. Increase the number of iterations.)rg   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  )ry   r   c                 C   s   t jt j }}d||dk< |dkr|dkrtd t| d|d|d}tjt|d |	|| W d    n1 s=w   Y  |j
d | ksKJ d S )	Nr   r    rg   rz   z4'multinomial' is unavailable when solver='liblinear'r   )rH   rG   rx   r:   rh   rA   )rj   rk   rm   r   rI   skipr   rn   r   r'   n_iter_)rH   rx   rh   r   r/   y_binrd   r6   r6   r7   test_max_iter  s   
r  )r{   rg   r|   r   ry   c           	      C   sT  t jt j}}t|jd }|dksJ | }d||dk< d}d}tdd| dd}||| |j	jd	ks9J t
d| ||dd
}||| |j	jd||fksSJ |jdd|| |j	j|fksfJ |jdd|| |j	j|||fks{J | dkrd S |jdd|| |j	jd	ksJ |jdd|| |j	jd||fksJ d S )Nr   r_   r    r`   r}   r   r~   )rG   r<   rh   r:   r   )rG   rh   ra   rF   r:   r   rv   r  rg   rz   )rj   rk   rm   r$   r%   r&   r   r   r'   r  r   
set_params)	rh   r/   r0   r3   r  n_Cs	n_cv_foldr.   clf_cvr6   r6   r7   test_n_iter  s2   
r  )r{   r|   r   ry   r  )TFr=   c           
      C   s   t jt j}}td||| d|d}ttd ||| |j}d|_||| W d    n1 s3w   Y  t	
t	||j }d| |t|t|f }	|r[d|ksYJ |	d S |dkscJ |	d S )Nr   r~   )rG   rx   r  rh   r:   r=   )categoryr   zUWarm starting issue with %s solver in %s mode with fit_intercept=%s and warm_start=%s       @)rj   rk   rm   r   r   r   r'   r   rH   r$   r+   absstr)
rh   r  r=   rx   r/   r0   r.   coef_1cum_diffrL   r6   r6   r7   test_warm_start  s.   r  c                  C   s  t  } | j| j}}t|gd }t|gd }||dk }||dk d d }tdddd\}}t|}||f||ffD ]L\}}dD ]E}|jd }t	d	ddD ]6}	t
d
||	  dddd|ddd}
t
d
||	  dddd|ddd}|
|| ||| t|
j|jd qTqFq@d S )Nr_   r   r    r   r   r   r  )r   rO  r   r   r   rv      FgW:)r<   rh   rx   rH   r=   r   r:   rG   rg   )r   rk   rm   r$   r   r	   r   r  r&   r   r   r'   r   r   )rj   r/   r0   X_binr  X_sparsey_sparser   r1   alphar   rg   r6   r6   r7   test_saga_vs_liblinear  sP   




r  )r{   rg   r   FTc                 C   s  | dkr|dkrt 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	j
ttjd}t	j
ttjd}	d}
t| |d|
|d}t|}||| |jj|kshJ t|}||| |jj|kszJ 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 )Nrg   rz   z/liblinear does not support multinomial logisticr   gMb@?r~   )rh   rx   r:   rG   r=   gQ@ntr}   atolr   rO   )rI   r  r$   r   float32r   r/   r   r>   r   r  r   r   r'   r   r   osnamer   r   )rh   rx   r=   
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  r6   r6   r7   test_dtype_matchA  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d	}tddd
dd	}t||||	|}t
dD ]}||| qFt||	|}t||dd d S )Nr   r;   r    r   r   rz   r|   F)rx   rh   r  r:   Tr   r   rd  )r$   r   r   r   r   r   r   r
   r'   r*   ranger   )r   r/   r0   lr_no_wslr_wslr_no_ws_lossr   
lr_ws_lossr6   r6   r7   test_warm_start_converge_LR  s   &r  c            
      C   s   t dd\} }d}d}t }dD ]}t||dd|d}|| | ||j q|\}}}	tj||ddd	r8J tj||	ddd	rCJ tj|	|ddd	rNJ d S )
Nr   r9   r  rQ   )r   r   rO  r   )r   r<   rh   r:   l1_ratiorO   )re  r  )r	   r   r   r'   appendr   r$   allclose)
r/   r0   r<   r  coeffsr   rd   elastic_net_coeffs	l1_coeffs	l2_coeffsr6   r6   r7   test_elastic_net_coeffs  s   

r  r<   )r  rO   r   rs   r;   r       .Azpenalty, l1_ratio)r   r   )rO  r   c                 C   sZ   t dd\}}td| |ddd}t|| ddd}||| ||| t|j|j d S )Nr   r9   r   r   )r   r<   r  rh   r:   r   r<   rh   r:   )r	   r   r'   r   r   )r<   r   r  r/   r0   lr_enetlr_expectedr6   r6   r7   "test_elastic_net_l1_l2_equivalence  s   
r  )r  r   r;   r  c                 C   s   t ddd\}}t||dd\}}}}dtdddi}td| ddd	}t||d
d}	td| ddd	}
td| ddd	}|	|
|fD ]}||| q@|	|||
||ksWJ |	|||||kseJ d S )Nr  r   r9   r  r   r   r   r   r  T)r  r   rO  )r	   r   r$   linspacer   r   r'   rX   )r<   r/   r0   X_trainX_testy_trainy_test
param_gridenet_clfgsl1_clfl2_clfr.   r6   r6   r7   test_elastic_net_vs_l1_l2  s    r  r    r`   r  )rO   rQ   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   r    r   rs   r   r1   r3   rp   r   rE  rD  r:   r   r   F)r   rh   r:   r<   r  r=   rO  )r   rh   r:   r<   r=   c                    sV   | j  } t|  }|tt| 7 }|d d t|| 7 }|S )Nr   rQ   )r   r   r
   r*   r$   r+   r  r   )rd   coefobjr<   r/   r  r0   r6   r7   enet_objective  s
   
zEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective)r	   r   r   r'   )r<   r  r  lr_l2r  r6   r  r7   -test_LogisticRegression_elastic_net_objective  s2   
	
r  )rv   rz   c           
   	   C   s   | dkrt dd\}}n
t ddddd\}}td}tddd}td	d
d}td|d||d| d}||| ||d}tddd| d}t|||d}	|	|| |	j	d |j
d ks_J |	j	d |jd kskJ d S )Nrv   r   r9   r;   r_   r1   r3   r   r:   r   r   r`   r   r   r   ra   rh   rF   	l1_ratiosr:   rx   r<   r  r   rh   r:   rx   rF   r  r<   )r	   r   r$   r  r   r   r'   r   r   best_params_	l1_ratio_rb   )
rx   r/   r0   rF   r  ra   lrcvr  rd   r  r6   r6   r7   2test_LogisticRegressionCV_GridSearchCV_elastic_net  s4   
	
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}
td
dddd}t	||
|d}||| |	
||
|k dksbJ |	
||
|k dksrJ d S )Nr;   r_   r   r  r9   r   r   r  r`   r   r   rv   r  r  r  r  rP   )r	   r   r   r$   r  r   r   r'   r   r   r(   r   )r/   r0   r  r  r  r  rF   r  ra   r  r  rd   r  r6   r6   r7   6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovr7  s2   
	
 $r  )rO  r   )rv   rz   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}||| |jj|fks>J |jj|fksGJ |j	j||fksQJ d S )Nr_   r   r  r   r1   r3   r   rp   r:   r  r`   r   r   r    r   F)r   ra   rh   r  r:   rx   r  )
r	   r$   r   r  r   r'   rb   r&   r  r   )	r   rx   r3   rp   r/   r0   ra   r  r  r6   r6   r7   "test_LogisticRegressionCV_no_refit_  s4   
	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}||| tt|j	 }|j
| ||j|j|d fksJJ tt|j	 }	|	j
| ||j|jfksaJ |jj
| ||j|jfksoJ d S )Nr_   r   r  r   r  r  r`   r   r    r   r   rv   )r   ra   rh   rF   r  rx   r:   )r	   r$   r   r  r   r'   r   r   r   r   r&   rw  r   r  )
r3   rp   r/   r0   ra   r  n_foldsr  r   rS   r6   r6   r7   5test_LogisticRegressionCV_elasticnet_attribute_shapes  sB   
	
 r  )r   r    Nsomething_wrongc                 C   s   d|  }t jt|d tdd| dtt W d    n1 s!w   Y  | d urQd}t jt|d tdd| dtt W d    d S 1 sJw   Y  d S d S )Nz5l1_ratio must be between 0 and 1; got \(l1_ratio=%r\)rA   r   r   )r   rh   r  zQl1_ratio parameter is only used when penalty is 'elasticnet'\. Got \(penalty=l1\)r   )	rI   rJ   rK   r   r'   r/   r>   rn   ro   )r  rL   r6   r6   r7   test_l1_ratio_param  s   "r  r  rQ   r  c                 C   s   d|  }t jtt|d tdd| ddtt W d    n1 s%w   Y  | d urXd}tdd| ddj}t j	t
|d |tt W d    d S 1 sQw   Y  d S d S )	NzGl1_ratios must be a list of numbers between 0 and 1; got (l1_ratios=%r)rA   r   r   r    )r   rh   r  rF   zQl1_ratios parameter is only used when penalty is 'elasticnet'. Got \(penalty=l1\)r   )rI   rJ   rK   reescaper   r'   r/   r>   rn   ro   )r  rL   functionr6   r6   r7   test_l1_ratios_param  s,   "r  c              
   C   s   d}t |ddddddd\}}t|}tdddtj d	|d
|  | dd}tddddd|| dd}||| ||| t|j|jdd d S )Nr  r    r   r   r   r  r   Fr   r   r
   )r   r:   r=   rG   rH   r  r  lossr   r   r   )r   r:   r=   rG   rH   r  r<   rh   r1  )	r	   r   r   r$   infr   r'   r   r   )r<   r  r1   r/   r0   sgdlogr6   r6   r7   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  r_   r    r   r   )r1   r3   r   rE  n_clusters_per_classr:   rp   )r   r   r=  r   r   rz   )r   ra   rh   r:   rx   r1  )r	   r   rI   rJ   r   r   )r/   r0   ra   r   r   r6   r6   r7   /test_logistic_regression_path_coefs_multinomial  s8   
	
"r  estr  )r:   rH   r_   r  )r:   rF   ra   rG   rH   c                 C   s   | j jS rZ   )	__class__r[   )xr6   r6   r7   <lambda>*  s    r  )ids)rg   ry   r{   r|   r   c              	      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 )Nr6   )r   r  r'   )r/   r0   rQ  r  r6   r7   r'   0  s   z6test_logistic_regression_multi_class_auto.<locals>.fitrs   r   r   r  r   rv   rg   rz   )	r   rj   rk   rm   r   r   r*   r$   r  )r  rh   r'   scaled_datar/   X2y_multir  est_auto_binest_ovr_binest_auto_multiest_ovr_multiest_multi_multir6   r  r7   )test_logistic_regression_multi_class_auto$  s<   
r  c           
      C   s   t 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	|| t
dd}d}	tjt|	d ||| W d    d S 1 suw   Y  d S )Nr   r   r   z(Setting penalty='none' will ignore the Cr   r`   )r   rh   r<   rA   )r   rh   r:   rO  r  )r   zFpenalty='none' is not useful and not supported by LogisticRegressionCV)r	   r   rI   rn   ro   r'   r$   r  r(   r   r   rJ   rK   )
rh   r/   r0   rL   rd   lr_nonelr_l2_C_inf	pred_nonepred_l2_C_infr   r6   r6   r7   test_penalty_noneV  s$   


"r  r  r  r   )r   r   rG   rH   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 )Nr   r_   r    r`   floatr   )r   r   r   r   r    r    r    r    r   r   r   r   r    r    r    r    intrx  r   r9   rg   r~   )rh   r:   rM  )r(   r*   r   r6   )r$   r   r   vstackhstackr,   r#   r   r   r  r   r'   getattrr   )r  r/   r0   r  y2rW   base_clfclf_no_weightclf_with_weightmethodX_clf_no_weightX_clf_with_weightr6   r6   r7   /test_logisticregression_liblinear_sample_weightq  sJ   r  c               	   C   s   t ddd\} }tdd}ddg}g d}td	d
|||dd}|| | |jd jdd}t|D ]-\}}t|D ]$\}	}
td	d
||
dd}t|| ||d }|||	f t	
|ks^J q:q2d S )Nr   r   r   r   )n_splitsrO   r   )rO   r   rs   r   r   )r   rh   r  ra   rF   r:   r   r!   )r   rh   r<   r  r:   r  )r	   r   r   r'   r   r   r   r   r   rI   approx)r/   r0   rF   r  ra   r  avg_scores_lrcvr   r<   jr  rd   avg_score_lrr6   r6   r7   'test_scores_attribute_layout_elasticnet  s6   
r%  c                 C   s~   t jj\}}t jt j }ttt jddd| d}|t j| t|j	j
ddddd | r=|jj
ddtjd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>`
    ry   i,  rz   )r<   rh   rH   rx   r=   r   r!   rN  r  r   )r  N)rj   rk   r&   rl   rm   r   r#   r'   r   r   r+   r   rI   r!  )r=   r1   rp   rm   r.   r6   r6   r7   (test_multinomial_identifiability_on_iris  s    r&  r  r   g      $@r  rB  c                 C   sf   t dd\}}t|}t|}d|d |d < | }td|d| d}|j|||d t|| d S )NT)
return_X_yr    r   r  )r:   r  rH   rx   rM  )r   r#   r$   r,   r   r   r'   r   )rx   r  r/   r0   rp   Wexpectedr.   r6   r6   r7   test_sample_weight_not_modified  s   
r*  c                 C   s   t jdddd}dD ]}t||t||d q
tjjd|jd d	}| d
v rMd}t	j
t|d t| d|| W d    d S 1 sFw   Y  d S t| d|| d S )Nr   rs   r  )r   )indicesindptrint64r    r   rv  )rg   r|   r   z0Only sparse matrices with 32-bit integer indicesrA   rr  )r   randsetattrr  r   r$   r   randintr&   rI   rJ   rK   r   r'   )rh   r/   attrr0   rL   r6   r6   r7   test_large_sparse_matrix	  s   "r2  )xr4  r  r  numpyr$   numpy.testingr   r   r   r   scipyr   rI   sklearn.baser   sklearn.datasetsr   r	   sklearn.metricsr
   r   sklearn.model_selectionr   r   r   r   sklearn.preprocessingr   r   sklearn.utilsr   r   sklearn.utils._testingr   r   sklearn.linear_modelr   r   r   sklearn.exceptionsr   sklearn.linear_model._logisticr   r   r   r   r/   r  r?   r>   rt   rj   r8   r@   rN   rf   rr   ru   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r)  r:  rA  rL  r\  r_  rb  rl  ro  rq  rs  rt  ru  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*  r2  r6   r6   r6   r7   <module>   s6   
  
'

4
	B'



)?B\$?&5
- /H
)
(("*

( 
)

-(
)