U
    9%eD                    @   sh  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mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 ej45dZ6eed dZeed dZdZ7dd gd dgddggZ8e9e8Z:d ddgZ;ddd gZ<e Z=dd Z>dd Z?dd Z@e3dd ZAd d! ZBej4Cd"eeDe=jEd#d$d%eeDe=jEd&d'd%eeDe=jEd(d'd%eeDe=jEd)d*d$d+d,eeDe=jEd-d*d$d+d,eeDe=jEd.d$d%gd/d0 ZFej4Cd1eegd2d3 ZGej4Cd1eegd4d5 ZHej4Cd6d&d(d)d-gd7d8 ZId9d: ZJd;d< ZKd=d> ZLd?d@ ZMdAdB ZNdCdD ZOdEdF ZPdGdH ZQdIdJ ZRej4CdKdLdMgfdNdOdPgfdQdOdPgfdRdMgfdSdOdPgfgdTdU ZSdVdW ZTdXdY ZUdZd[ ZVd\d] ZWd^d_ ZXej4Cd`dadbdcdadbdddegej4Cdfd`dggdhdi ZYdjdk ZZdldm Z[dndo Z\dpdq Z]drds Z^dtdu Z_dvdw Z`dxdy Zadzd{ Zbd|d} Zcej4Cd~d+gej4Cdddgdd Zddd Zeej4Cdefddej4Cdd$d'gej4Cdddddddgdd Zgej4Cd6e7dd Zhej4Cd6eieje7ejd#g ej4Cddej4Cddej4Cdd$d'gdd Zkdd Zlej4Cdd$d'gej4Cd6d#d(d.d-gej4Cdddgdd Zmdd Zndd Zoej4Cdddadddddgej4Cdddgdd Zpej4Cdddddgdd Zqej4Cderdddej4Cddadddgdd Zsej4Cdddd Ztdd Zuej4Cddej4Cdddd Zvdd Zwdd Zxej4Cderdddej4CddadddgddĄ ZyddƄ Zzej4jCded ddɍed dddddˍgdd̈́ d΍ej4Cd6e7ddЄ Z{ej4Cd6eieje7ejd#g dd҄ Z|ej4Cdddddd՜ddddd՜ddddd՜gdd؄ Z}ddڄ Z~ej4Cdddgdd܄ Zej4Cdd$d'dgej4Cdfddddedggdd Zej4Cd6e7dd Zdd Zdd Zdd Zej4Cd6e7dd ZdS )    N)partial)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)sparse)clone)	load_irismake_classification)ConvergenceWarning)SGDClassifier)LogisticRegression)LogisticRegressionCV)_log_reg_scoring_path_logistic_regression_path)
get_scorerlog_loss)GridSearchCVStratifiedKFoldcross_val_scoretrain_test_split)LabelEncoderStandardScalerscale)l1_min_c)	_IS_32BITcompute_class_weightshuffle)ignore_warningsskip_if_no_parallelz6error::sklearn.exceptions.ConvergenceWarning:sklearn.*random_state)lbfgs	liblinear	newton-cgnewton-choleskysagsaga      c                 C   s   t |}t|}|jd }| |||}t| j| |j|fksJtt|| | 	|}|j||fksptt
|jddt| t|jdd| dS )z;Check that the model is able to fit the classification datar   r)   ZaxisN)lennpuniqueshapefitpredictr   classes_AssertionErrorpredict_probar   sumonesargmax)clfXy	n_samplesclasses	n_classesZ	predictedprobabilities r?   g/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/linear_model/tests/test_logistic.pycheck_predictions:   s    



rA   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   r    d   )Cr!   F)fit_interceptr!   )rA   r   r9   Y1X_spr?   r?   r?   r@   test_predict_2_classesL   s    rG   c                  C   s   G dd d} |  }ddddg}d}t |||d}tdd	\}}||| |jd |d ksbt|j|t| ksxtd|_||||}||j	d kst|jdkst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| _ ddddg| _d S )Nr   皙?g?皙?      ?)callsscores)selfr?   r?   r@   __init__[   s    z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__Nc                 S   s(   | j | jt| j   }|  jd7  _|S )Nr)   )rL   rK   r,   )rM   modelr9   r:   sample_weightscorer?   r?   r@   __call___   s    z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__)N)__name__
__module____qualname__rN   rR   r?   r?   r?   r@   
MockScorerZ   s   rV   r)   r*         )Csscoringcvr   r    )
r   r
   r0   C_r3   rK   r,   rQ   r1   rL   )rV   Zmock_scorerrY   r[   lrr9   r:   Zcustom_scorer?   r?   r@   test_logistic_cv_mock_scorerY   s    
r^   c               	   C   sT   t jj\} }t jt j }tddd}d}tjt|d |	t j| W 5 Q R X 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datar/   target_namestargetr   pytestwarnsUserWarningr0   )r;   
n_featuresrf   r]   warning_messager?   r?   r@   test_lr_liblinear_warningz   s    rl   c                   C   s(   t tddtt t tddtt d S )N
   )rC   )rA   r   r9   Y2rF   r?   r?   r?   r@   test_predict_3_classes   s    ro   r8   r#   ovr)rC   r_   multi_classr"   multinomialr$   r&   {Gz?*   )rC   r_   tolrq   r!   r'   r%   c              	   C   s   t jj\}}t jt j }| jdkrRt   tdt	 | 
t j| W 5 Q R X n| 
t j| tt|| j | t j}t||kdkst| t j}t|jddt| t j|jdd }t||kdkst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"   ignoreffffff?r)   r+   N)rc   rd   r/   re   rf   r_   warningscatch_warningssimplefilterr   r0   r   r-   r.   r2   r1   meanr3   r4   r   r5   r6   r7   )r8   r;   rj   rf   predr>   r?   r?   r@   test_predict_iris   s    

r}   LRc              
   C   sl  t jt j }}dD ]B}d| d}| |dd}tjt|d ||| W 5 Q R X qdD ]@}d| }| |d	d
d}tjt|d ||| W 5 Q R X qZdD ]@}d| }| |dd
d}tjt|d ||| W 5 Q R X qdD ]@}d|}| |dd}tjt|d ||| W 5 Q R X q| tkrhd}| ddd}tjt|d ||| W 5 Q R X d S )Nr#   r%   zSolver z( does not support a multinomial backend.rr   r_   rq   ra   )r"   r$   r%   r&   z1Solver %s supports only 'l2' or 'none' penalties,l1rp   )r_   penaltyrq   )r"   r$   r%   r&   r'   z1Solver %s supports only dual=False, got dual=TrueT)r_   dualrq   )r#   z>Only 'saga' solver supports elasticnet penalty, got solver={}.
elasticnet)r_   r   z8penalty='none' is not supported for the liblinear solvernoner#   r   r_   )	rc   rd   rf   rg   raises
ValueErrorr0   formatr   )r~   r9   r:   r_   msgr]   r?   r?   r@   test_check_solver_option   s8    
r   c              	   C   sR   | ddd}t jtdd. |tddgdd	ggtd
dg W 5 Q R X d S )Nr   r'   r   z.*l1_ratio.*ra   r)   r*   rW   rX   r   )rg   r   r   r0   r-   array)r~   rO   r?   r?   r@   $test_elasticnet_l1_ratio_err_helpful   s    r   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^t|jj
d	ksntt|t j| t| ddd
d}|t j| |jtj|t jdd }t||kdkstd S )Nr   Zsetosaz
not-setosarr   rt     )r_   rq   r!   max_iterr)   r)   F)r_   rq   r!   rD   r+   ?)rc   rf   astyper-   Zintpr   r   r0   rd   coef_r/   r3   
intercept_r   r1   r2   r7   Zpredict_log_probar{   )r_   rf   r8   Zmlrr|   r?   r?   r@   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    rr   r'   MbP?)rq   r_   ru   r!   r)   )	r
   r   r0   decision_functionr4   r-   expZc_r   )global_random_seedr9   r:   r8   ZdecisionZprobaZexpected_proba_class_1Zexpected_probar?   r?   r@   %test_multinomial_binary_probabilities  s    

 r   c            
      C   s   t jj\} }t jt j }tt j}tdd||}||}|	  t
|jsVt||}t
|}||}|  ||}	t|| t|| t||	 d S Nr   r    )rc   rd   r/   re   rf   r   r   r0   r   Zsparsifyr   issparser   r3   Z
coo_matrixZdensifyr   )
r;   rj   rf   r9   r8   Zpred_d_dZpred_s_dZsp_dataZpred_s_sZpred_d_sr?   r?   r@   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 5 Q R X tt	 |
||| d W 5 Q R X d S )Nr   )   rm   r    r(   )rW      )r-   randomRandomStateZrandom_sampler6   r/   r   rg   r   r   r0   r9   r1   )rngZX_Zy_r8   Zy_wrongr?   r?   r@   test_inconsistent_input9  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   r0   r9   rE   r   r   r   r   r8   r?   r?   r@   test_write_parametersM  s
    
r   c               	   C   sJ   t jtt jd} t j| d< tdd}tt |	| t
 W 5 Q R X d S )Ndtyper   r)   r   r    )r-   r   r9   float64nanr   rg   r   r   r0   rE   )ZXnanZlogisticr?   r?   r@   test_nanV  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 ]L\}}	t	|	d	d
|dddd}
|

|| |
j }t||| dd| d qq\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 qd S )Nr   rB   r*   r)   r(   rX   rm   r&   r'   Fh㈵>  rp   )rY   rD   ru   r_   r   rq   r!   )rC   rD   ru   r_   rq   r!   r   zwith solver = %s)decimalerr_msg)r"   r$   r%   r#   r&   r'        @@ư>     @)rY   ru   r_   intercept_scalingr!   rq   )rC   ru   r   r!   rq   r_   )r-   r   r   concatenaterandnlogspacer   r   	enumerater   r0   r   ravelr   r   )r   r9   r:   rY   fr_   coefs_irC   r]   Zlr_coefr?   r?   r@   test_consistency_patha  s~    &	
   

   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 5 Q R X t	|dkst
|d jjd }d	|kst
d
|kst
d|kst
d|kst
d S )Nr   rB   r*   r)   r(   r           )rY   ru   r   r!   verboselbfgs failed to convergez!Increase the number of iterationszscale the dataz%linear_model.html#logistic-regression)r-   r   r   r   r   rg   rh   r   r   r,   r3   messageargs)r   r9   r:   rY   recordZwarn_msgr?   r?   r@   .test_logistic_regression_path_convergence_fail  s(    &      r   c               	   C   s   t ddd\} }tdddddd}|| | tdddddd}|| | td	ddddd}|| | t|j|j d
}tjt|d t|j|j W 5 Q R X d S )N   r   r;   r!   Tr   r#   rp   )r!   r   ru   r_   rq      z)Arrays are not almost equal to 6 decimalsra   )r
   r   r0   r   r   rg   r   r3   )r9   r:   Zlr1Zlr2Zlr3r   r?   r?   r@    test_liblinear_dual_random_state  s:    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st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#   rp   rW   )rY   rD   r_   rq   r[   )rC   rD   r_   rq   r)   r(   r*   r   )r)   rW   r)   )r-   r   r   r   signdotr{   Zstdr   r0   r   r   r   r   r/   r2   r,   r3   asarraylistcoefs_paths_valuesCs_scores_)	r;   rj   r   X_refr:   lr_cvr]   coefs_pathsrL   r?   r?   r@   test_logistic_cv  s<           r   zscoring, multiclass_agg_listZ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
D ]
}||= qD||| ||  |D ]L}	t| |	 }
tt||||fdg|
d|d d |
||| ||  qhd S )NrB   r   rW      )r;   r!   r=   n_informativeP   r   rr   )rC   rq   )rC   r`   
warm_start)rY   rZ   r*   )	r
   r-   aranger   
get_paramsr0   r   r   r   )rZ   Zmulticlass_agg_listr9   r:   traintestr]   paramskeyZ	averagingZscorerr?   r?   r@   "test_logistic_cv_multinomial_score  s@       
    r   c            
      C   s  d\} }}t | ||ddd\}}t dddg|}t|d }td	d
}td	dd}td	d
}td	dd}	||| ||| ||| |	|| t|j	|j	 t
|jdddgkstt|j	|	j	 t
|jdddgkstt
|	jdddgkstt
t||dddgks,tt
t|	|dddgksPttddddd	d||}	t
t|	|ddgkstd S )N)r   r   rW   rW   r   )r;   rj   r=   r   r!   barbazfoor)   rr   rq   )rq   rY   r*   )r   r   r   )class_weightrq   )r
   r   r0   Zinverse_transformr-   r   r   r   r   r   sortedr2   r3   r.   r1   )
r;   rj   r=   r   r:   Zy_strr]   r   Zlr_strZ	lr_cv_strr?   r?   r@   2test_multinomial_logistic_regression_string_inputs"  sB    



$$
  r   c                  C   s|   t dddd\} }d| | dk < t| }t }|| | t }||| t|j|j t|j|j |j|jksxt	d S )Nr   r   r   r;   rj   r!   r   r   )
r
   r   
csr_matrixr   r0   r   r   r   r\   r3   )r9   r:   csrr8   Zclfsr?   r?   r@   test_logistic_cv_sparseK  s    
r   c               	   C   st  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stt|jdddg tt|j }
|
jd|d|d fkst|jjdks,ttt|j }|jd|dfksVtd	D ]}|d
krndnd}t|d|d|d
krdnddd}|dkrt| } || | || |}|| |}||kst|jj|jjkstt|jdddg tt|j }
|
jd|d|d fks0t|jjdksBttt|j }|jd|dfksZtqZd S )Nr*   rp   )r[   rq   r)   r   rW   rm   )rm   r"   r$   r&   r'   r        rr   rt   r   rs   )r_   rq   r   r!   ru   r[   r"   )rc   rd   rf   r/   r   r   splitr   r0   copyr   r   r   r   r-   Znewaxisr3   r   r2   r   r   r   r   r   rQ   )r   rf   r;   rj   Zn_cvr[   Zprecomputed_foldsr8   clf1Ztarget_copyr   rL   r_   r   	clf_multiZmulti_scoreZ	ovr_scorer?   r?   r@   test_ovr_multinomial_irisY  sX    
 

r   c                     sl   t dddd\ tdddd fd	d
tD } tj| ddD ]"\}}t| | j| | jdd qDdS )z)Test solvers converge to the same result.rm   r   r   )rj   r   r!   Frt   rp   )rD   r!   rq   c                    s(   i | ] }|t f d |i qS r_   )r   r0   .0r_   r9   r   r:   r?   r@   
<dictcomp>  s    z4test_logistic_regression_solvers.<locals>.<dictcomp>r*   rrW   r   Nr
   dictSOLVERS	itertoolscombinationsr   r   )
regressorssolver_1solver_2r?   r   r@    test_logistic_regression_solvers  s      r	  c                     s   t dddddd\ d} td| dd	d
ddd fddtD }tj|ddD ]"\}}t|| j|| jdd qZdS )zATest solvers converge to the same result for multiclass problems.r   rm   rW   r   r;   rj   r   r=   r!   Hz>Frt   rp   )rD   ru   r!   rq   r   '  r   c              
      s2   i | ]*}|t f ||d d qS )rB   r_   r   )r   getr0   r   r9   r   Zsolver_max_iterr:   r?   r@   r     s     
 z?test_logistic_regression_solvers_multiclass.<locals>.<dictcomp>r*   r   rX   r   Nr  )ru   r  r  r  r?   r  r@   +test_logistic_regression_solvers_multiclass  s&        

  r  weightrH   g?r   rJ   )r   r)   r*   r   balancedc           	   	   C   s   t | }|dkr| }tddddd|dd\}}tddd|d	}tf d
di|}||| tttdg D ]L}tf d
|i|}|dkr|jdddd ||| t|j	|j	dd qndS )z+Test class_weight for LogisticRegressionCV.r  r   rW   r   )r;   rj   
n_repeatedr   n_redundantr=   r!   r)   Frp   )rY   rD   rq   r   r_   r"   r   r   r  )ru   r   r!   r   rtolN)
r,   r
   r  r   r0   setr  
set_paramsr   r   )	r  r   r=   r9   r:   r   Z	clf_lbfgsr_   r8   r?   r?   r@   (test_logistic_regressioncv_class_weights  s4    
	r  c                  C   s`  t dddddd\} }|d }ttfD ]z}dd	d
d}|tkrP|ddd dD ]b}|f d|i|}|f d|i|}|| | |j| |t|jd d t|j	|j	dd qT|f |}|j| ||d t
tt
d D ]X}|f ||dkrdndd|}	t  |	j| ||d W 5 Q R X t|j	|	j	dd qdD ]`}|f |dddd|}
|
| | |f d|i|}|j| ||d t|
j	|j	dd q@q&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   rW   r*   r   r
  r)   rt   Frp   )r!   rD   rq   )rY   r[   )r"   r#   r_   rP   -C6?r  )r"   r'   r&   绽|=r   r_   ru   r   )r_   r   r#   r   )r_   rD   r   r   ru   r!   rq   )r_   rD   r   ru   r!   rq   rX   r   l2T)r_   rD   r   r   r   r!   rq   )r_   rD   r   r   r!   rq   )r
   r   r   updater0   r-   r6   r/   r   r   r  r  r   r   )r9   r:   rP   r~   kwr_   Zclf_sw_noneZclf_sw_onesZclf_sw_lbfgsZclf_swZ	clf_cw_12Z	clf_sw_12Zclf_cwr?   r?   r@   'test_logistic_regression_sample_weights  s        

 		r!  c                 C   s*   t | }td|| d}tt||}|S )Nr  )r<   r:   )r-   r.   r   r  zip)r:   r<   r   class_weight_dictr?   r?   r@    _compute_class_weight_dictionary>  s    
r$  c                  C   s  t tj} | dd d d f }tjdd  }d}t|}|D ]J}t|ddd}t|d|d}||| ||| t|j|jdd q<| ddd d f }tjdd }t|}t	t
t	d	 D ]J}t|d
dd}t|d
|d}||| ||| t|j|jdd qd S )N-   )r"   r$   rr   r  )r_   rq   r   rX   r   rB   r   rp   r   )r   rc   rd   rf   r$  r   r0   r   r   r  r  )ZX_irisr9   r:   Zsolversr#  r_   r   Zclf2r?   r?   r@   &test_logistic_regression_class_weightsF  sH    
        r&  c               	   C   s  d\} }}t | |d|dd\}}tdd|}d}t|dd	}t|ddd
}||| ||| |jj||fkszt|jj||fkstdD ]}t|ddddd}t|dddddd}	||| |	|| |jj||fkst|	jj||fkstt|j|jdd t|j|	jdd t|j	|j	dd qdD ]J}t
|ddddgd}
|
|| t|
j|jdd t|
j	|j	dd q8d S )N)r   r   rW   rm   r   r
  F)Z	with_meanr"   rr   r   )r_   rq   rD   )r&   r'   r$   rt   r   r  )r_   rq   r!   r   ru   )r_   rq   r!   r   ru   rD   rs   r  r   r   r   )r_   r   ru   rq   rY   g{Gz?)r
   r   fit_transformr   r0   r   r/   r3   r   r   r   )r;   rj   r=   r9   r:   r_   Zref_iZref_wZclf_iZclf_wZclf_pathr?   r?   r@   $test_logistic_regression_multinomialk  sl    

      r(  c                  C   sP   t dddd\} }tdddd}|| | td} t|| td d S )	Nr   r   r   Fr#   rp   )rD   r_   rq   )r   r   )r
   r   r0   r-   zerosr   r1   r9   r:   r8   r?   r?   r@   %test_liblinear_decision_function_zero  s
    
r+  c                  C   s4   t dddd\} }tddd}|t| | d S )Nrm   r   r   r   r#   rp   r   r
   r   r0   r   r   r*  r?   r?   r@   test_liblinear_logregcv_sparse  s    r-  c                  C   s4   t dddd\} }tddd}|t| | d S )Nrm   r   r   r   r'   rs   r  r,  r*  r?   r?   r@   test_saga_sparse  s    r.  c                  C   s(   t dd} | tt | jdks$td S )NF)rD   r   )r   r0   r9   rE   r   r3   r   r?   r?   r@   "test_logreg_intercept_scaling_zero  s    
r/  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 )Nrt   r   r   r   r   rW   sizer*   r/   r)   r+   r   r   r#   Frp   r  r   rC   r_   rD   rq   ru   r'   r   r   rC   r_   rD   rq   r   ru   r   )r-   r   r   r
   normalr6   r   r   r0   r   r   r)  )r   r;   r9   r:   X_noise
X_constantlr_liblinearlr_sagar?   r?   r@   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 )Nrt   r   r   r   r   rH   rW   )r   r1  r*   r2  r)   r+   r   r   r#   Frp   r  r3  r'   r   r4  r5  r   )r-   r   r   r
   r6  r)  r   r   r   r   r0   r   r   Ztoarray)	r   r;   r9   r:   r7  r8  r9  r:  Zlr_saga_denser?   r?   r@   test_logreg_l1_sparse_data  sR    
		r<  random_seedr   r   r  c                 C   sv   t dd| d\}}td|| ddd}tf dgd	d
|}||| tf ddi|}||| t|j|j d S )NrB   r   r   r'   r   -q=)r_   r   r!   r   ru   r   T)rY   refitrC   )r
   r  r   r0   r   r   r   )r=  r   r9   r:   Zcommon_paramsr   r]   r?   r?   r@   !test_logistic_regression_cv_refit,  s    r@  c                  C   s   t dddddd\} }tddd}|| | t||| }td	dd}|| | t||| }||ksrtt||| }t||| }||kstd S )
Nrm   r   r   rW   )r;   rj   r!   r=   r   rr   r"   rq   r_   rp   )r
   r   r0   r   r4   r3   Z_predict_proba_lr)r9   r:   r   Zclf_multi_lossZclf_ovrZclf_ovr_lossZclf_wrong_lossr?   r?   r@   %test_logreg_predict_proba_multinomialF  s"        
rB  r   r   rq   zsolver, message)r$   z@newton-cg failed to converge. Increase the number of iterations.)r#   z@Liblinear failed to converge, increase the number of iterations.)r&   ?The max_iter was reached which means the coef_ did not converge)r'   rC  )r"   r   )r%   z6Newton solver did not converge after [0-9]* iterationsc              	   C   s   t jt j  }}d||dk< |dkr8|dkr8td |dkrR| dkrRtd t| d	|d|d
}tjt|d |	|| W 5 Q R X |j
d | kstd S )Nr   r*   r   rr   z?'multinomial' is not supported by liblinear and newton-choleskyr%   r)   z/solver newton-cholesky might converge very fastV瞯<)r   ru   rq   r!   r_   ra   )rc   rd   rf   r   rg   skipr   rh   r   r0   n_iter_r3   )r   rq   r_   r   r9   y_binr]   r?   r?   r@   test_max_iter\  s     

rH  c           	      C   sl  t jt j }}| dkrt|}t|jd }|dks:t| }d||dk< d}d}t	dd| dd	}|
|| |jjd
ksttd| ||dd}|
|| |jjd||fkst|jdd
|| |jj|fkst|jdd
|| |jj|||fkst| dkrd S |jdd
|| |jjd
ks<t|jdd
|| |jjd||fkshtd S )Nr"   r   rW   r*   rX   rs   r   rt   )ru   rC   r_   r!   r   )ru   r_   rY   r[   r!   r)   rp   r   r   rr   )rc   rd   rf   r   r-   r.   r/   r3   r   r   r0   rF  r   r  )	r_   r9   r:   r=   rG  Zn_CsZ	n_cv_foldr8   Zclf_cvr?   r?   r@   test_n_iter  s>        
rI  r   )TFrD   c           
   	   C   s   t jt j }}| dkr"|dkr"d S td||| d|d}ttd* ||| |j}d|_||| W 5 Q R X t	
t	||j }d| |t|t|f }	|rd	|kst|	n|d	kst|	d S )
Nr%   rr   r  rt   )ru   rq   r   r_   r!   rD   categoryr)   zUWarm starting issue with %s solver in %s mode with fit_intercept=%s and warm_start=%s       @)rc   rd   rf   r   r   r   r0   r   r   r-   r5   absstrr3   )
r_   r   rD   rq   r9   r:   r8   Zcoef_1Zcum_diffr   r?   r?   r@   test_warm_start  s0    rO  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 ]\}}dD ]}|jd }t	d	ddD ]l}	t
d
||	  dddd|ddd}
t
d
||	  dddd|ddd}|
|| ||| t|
j|jd qqqd S )NrW   r)   r*   r   r   r   r   )r   r  r(   r   r'   rp      Fr   )rC   r_   rq   r   rD   r   r!   ru   r#   )r	   rd   rf   r-   r   r
   r   r   r/   r   r   r0   r   r   )rc   r9   r:   ZX_binrG  ZX_sparseZy_sparser   r;   alphar'   r#   r?   r?   r@   test_saga_vs_liblinear  sN      




rR  FTc                 C   s  | dkr"|dkr"t d|  d | dkr0t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stt|}||| |jj|kstt|}||| |jjtjks$tt|}||	| |jjtjksLtd
|
 }tjdkrjtrjd}t|j|jtj|d | dkr|rd}t|j|j|d t|j|j|d d S )Nr   rr   zSolver=z' does not support multinomial logistic.r#   r   gMb@?rt   )r_   rq   r!   ru   rD   gQ@ntrs   atolr'   rH   )rg   rE  r-   r   Zfloat32r   r9   r   rE   r   r   r   r   r0   r   r   r3   osnamer   r   )r_   rq   rD   Z
out32_typeZX_32Zy_32ZX_64Zy_64ZX_sparse_32ZX_sparse_64Z
solver_tolZlr_templZlr_32Zlr_32_sparseZlr_64Zlr_64_sparserU  r?   r?   r@   test_dtype_match  sJ    		rX  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 ]}||| qt||	|}t||dd d S )Nr   rB   r*   r)   r(   rr   r&   F)rq   r_   r   r!   Tr   r   r  )r-   r   r   r   r   r   r   r   r0   r4   ranger   )r   r9   r:   Zlr_no_wsZlr_wsZlr_no_ws_lossr   Z
lr_ws_lossr?   r?   r@   test_warm_start_converge_LR\  s(    &      rZ  c               
   C   s   t dd\} }d}d}t }d|fddfD ]6\}}t||dd|d	d
d}|| | ||j q*|\}}	}
tj||	dddrttj||
dddrttj|
|	dddrtd S )Nr   r    rL  rJ   r   )r   N)r  Nr'   r   rP  )r   rC   r_   r!   l1_ratioru   r   rH   )r  rU  )	r
   r   r   r0   appendr   r-   allcloser3   )r9   r:   rC   r[  Zcoeffsr   ratior]   Zelastic_net_coeffsZ	l1_coeffsZ	l2_coeffsr?   r?   r@   test_elastic_net_coeffsq  s(    	
r_  rC   r   rm   rB   r   g    .Azpenalty, l1_ratio)r   r)   )r  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   r'   rs   )r   rC   r[  r_   r!   ru   r   rC   r_   r!   ru   )r
   r   r0   r   r   )rC   r   r[  r9   r:   lr_enetZlr_expectedr?   r?   r@   "test_elastic_net_l1_l2_equivalence  s&        rb  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 ]}||| q|	|||
||kst|	|||||kstd S )Nr   r   r    r[  r)   r   r   r'   rs   r`  T)r?  r   r  )	r
   r   r-   linspacer   r   r0   rQ   r3   )rC   r9   r:   X_trainX_testy_trainy_test
param_gridZenet_clfgsZl1_clfZl2_clfr8   r?   r?   r@   test_elastic_net_vs_l1_l2  s:                rj  rX   r[  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 std S )Nr   r*   r   rm   r   r;   r=   rj   r   r  r  r!   r   r'   F)r   r_   r!   rC   r[  rD   r  )r   r_   r!   rC   rD   c                    sV   | j  } t|  }|tt| 7 }|d d t|| 7 }|S )Nr   rJ   )r   r   r   r4   r-   r5   rM  r   )r]   ZcoefobjrC   r9   r[  r:   r?   r@   enet_objective  s
    
zEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective)r
   r   r   r0   r3   )rC   r[  ra  Zlr_l2ro  r?   rn  r@   -test_LogisticRegression_elastic_net_objective  s:    
	    rp  )rp   rr   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}||| ||d}tddd| dd}t|||d}	|	|| |	j	d |j
d kst|	j	d |jd kstd S )Nrp   r   r    rB   rW   r;   r=   r   r!   r   r)   rX   r   r'   rs   r   rY   r_   r[   	l1_ratiosr!   rq   ru   rC   r[  r   r_   r!   rq   ru   r[   r[  rC   )r
   r   r-   rc  r   r   r0   r   r   Zbest_params_	l1_ratio_r3   r\   )
rq   r9   r:   r[   rt  rY   lrcvrh  r]   ri  r?   r?   r@   2test_LogisticRegressionCV_GridSearchCV_elastic_net  sD       


rz  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st|	
||
|k dkstd S )NrB   rW   r   rq  r    r   r)   rr  rX   r   r'   rp   rs   rs  ru  rv  rw  rI   )r
   r   r   r-   rc  r   r   r0   r   r   r1   r{   r3   )r9   r:   rd  re  rf  rg  r[   rt  rY   ry  rh  r]   ri  r?   r?   r@   6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovr  sB       


 r{  )r  r   )rp   rr   autoc           	   
   C   s   d}d}t d|||dd\}}tddd}| dkrDtdd	d
}nd }t| |d|d|ddd}||| |jj|fks~t|j	j|fkst|j
j||fkstd S )NrW   r   rP  r   r;   r=   r   rj   r!   rr  rX   r   r)   r*   r'   rs   F)r   rY   r_   rt  r!   rq   ru   r?  )r
   r-   r   rc  r   r0   r\   r/   r3   rx  r   )	r   rq   r=   rj   r9   r:   rY   rt  ry  r?   r?   r@   "test_LogisticRegressionCV_no_refitH  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sttt|j	 }	|	j
| ||j|jfkst|jj
| ||j|jfkstd S )NrW   r   rP  r   r}  rr  rX   r)   r*   r   r'   rp   rs   )r   rY   r_   r[   rt  rq   r!   ru   )r
   r-   r   rc  r   r0   r   r   r   r   r/   r1  r3   r   rF  )
r=   rj   r9   r:   rY   rt  Zn_foldsry  r   rL   r?   r?   r@   5test_LogisticRegressionCV_elasticnet_attribute_shapesm  sD    


r  c               	   C   s8   d} t jt| d tddddtt W 5 Q R X d S )NzQl1_ratio parameter is only used when penalty is 'elasticnet'\. Got \(penalty=l1\)ra   r   r'   rJ   )r   r_   r[  )rg   rh   ri   r   r0   r9   rE   )r   r?   r?   r@   test_l1_ratio_non_elasticnet  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   r*   r   r   r)   rl  r   Fr   r   r   )r   r!   rD   ru   r   r[  rQ  lossr   r   r'   )r   r!   rD   ru   r   r[  rC   r_   r   )r
   r   r   r   r0   r   r   )rC   r[  r;   r9   r:   Zsgdlogr?   r?   r@   test_elastic_net_versus_sgd  sD    
	

r  c               	   C   s   t dddddddd\} }dddg}t| |d	|d
ddd\}}}tt t|d |d dd W 5 Q R X tt t|d |d dd W 5 Q R X tt t|d |d dd W 5 Q R X d S )NrP  rW   r*   r   r)   )r;   r=   r   r  Zn_clusters_per_classr!   rj   r   r  r   r'   rr   )r   rY   r_   r!   rq   r   )r
   r   rg   r   r3   r   )r9   r:   rY   r   r   r?   r?   r@   /test_logistic_regression_path_coefs_multinomial  s2    
	

  r  estr   )r!   r   rW   )r!   r[   rY   ru   r   c                 C   s   | j jS N)	__class__rS   )xr?   r?   r@   <lambda>      r  )Zidsc              	      sX   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r|||d|d}t|
j|j t|
||| nx|||d
|d}t|
j|j t|
||| t|j|||d
|djr2t	t|j|||d
|djrTt	d S )Nc                    s   t  jf || |S r  )r   r  r0   )r9   r:   r   r  r?   r@   r0     s    z6test_logistic_regression_multi_class_auto.<locals>.fitrm   r)   r   r|  rA  rp   r   rr   )
r   rc   rd   rf   r   r   r4   r-   r]  r3   )r  r_   r0   Zscaled_datar9   X2Zy_multirG  Zest_auto_binZest_ovr_binZest_auto_multiZest_ovr_multiZest_multi_multir?   r  r@   )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 5 Q R X td | dd}td	tj| dd
}||||}||||}t	|| d S )Nr   r   )r;   r  r!   z&Setting penalty=None will ignore the CrX   )r   r_   rC   ra   )r   r_   r!   r  )r   rC   r_   r!   )
r
   r   rg   rh   ri   r0   r-   infr1   r   )	r_   r9   r:   r   r]   Zlr_noneZlr_l2_C_infZ	pred_noneZpred_l2_C_infr?   r?   r@   test_penalty_none  s       r  r   r   )r   r   ru   r   r>  c                 C   st  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ddddddddddddddddgt dd}t ||g}t |d| g}t jt|d d}d	|t|d < t|||d	d
\}}}tddd}|j	f |  t
|||}t
|j|||d}dD ],}	t||	|}
t||	|}t|
| qBd S )Nr)   rW   r*   rX   floatr   intr2  r   r    r#   rt   )r_   r!   r  )r1   r4   r   )r-   r   r   ZvstackZhstackr6   r,   r   r   r  r   r0   getattrr   )r   r9   r:   r  y2rP   Zbase_clfZclf_no_weightZclf_with_weightmethodZX_clf_no_weightZX_clf_with_weightr?   r?   r@   /test_logisticregression_liblinear_sample_weight4  sJ    " r  c                  C   s   t ddd\} }tdd}ddg}ddd	g}td
d|||dddd}|| | |jd jdd}t|D ]^\}}t|D ]L\}	}
td
d||
dddd}t|| ||d }|||	f t	
|ksztqzqjd S )Nr   r   r   r   )Zn_splitsrH   r   r)   rm   r   r'      r   )r   r_   rt  rY   r[   r!   r   ru   r+   )r   r_   rC   r[  r!   r   ru   rw  )r
   r   r   r0   r   r{   r   r   r   rg   approxr3   )r9   r:   r[   rt  rY   ry  Zavg_scores_lrcvr   rC   jr[  r]   Zavg_score_lrr?   r?   r@   'test_scores_attribute_layout_elasticneti  s:    



r  c                 C   s   t jj\}}t jt j }ttt jdd| d}tt j}||| t	|j
jddddd | r||jjddtjddd	k 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"   rr   )rC   r_   rq   rD   r   r+   r  rT  rD  )rM  N)rc   rd   r/   re   rf   r   r,   r   r0   r   r   r5   r   rg   r  )rD   r;   rj   rf   r8   ZX_scaledr?   r?   r@   (test_multinomial_identifiability_on_iris  s    
r  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_yr*   r   rP  )r!   r   r   rq   r  )r	   r,   r-   r6   r   r   r0   r   )rq   r   r9   r:   rj   Wexpectedr8   r?   r?   r@   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
krd}t
jt|d t| d|| W 5 Q R X nt| d|| d S )Nr   rm   r   )r   r!   )indicesZindptrZint64r*   r   r0  )r#   r&   r'   z0Only sparse matrices with 32-bit integer indicesra   r   )r   Zrandsetattrr  r   r-   r   r   randintr/   rg   r   r   r   r0   )r_   r   r9   attrr   r:   r   r?   r?   r@   test_large_sparse_matrix  s    r  c               
   C   sb   t ddddddddggj} t d	d	d
d
d	d	d
d	g}| jd	 d	ksJttddd| | d S )NrJ   g?g?g      ?rI   gHzG?rw   ffffff?r)   r   r$   T)r_   rD   )r-   r   Tr/   r3   r   r0   )r9   r:   r?   r?   r@   test_single_feature_newton_cg  s    r  c               	   C   sF   t jt j } tdd}d}tjt|d |t j|  W 5 Q R X d S )Nr   )r   zv`penalty='none'`has been deprecated in 1.2 and will be removed in 1.4. To keep the past behaviour, set `penalty=None`.ra   )	rc   re   rf   r   rg   rh   FutureWarningr0   rd   )rf   r]   rk   r?   r?   r@   #test_warning_on_penalty_string_none  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 5 Q R X d S )Nr*   r  )r  gnt@r   r#   r   rB   r   r   )r   r_   ru   r   r   r!   rC   error)rc   rd   r   rf   r   r'  r   r   rx   ry   rz   r   r0   )r9   r:   ZX_preprC   r8   r?   r?   r@   test_liblinear_not_stuck  s$    


r  c              	   C   s   t dd\}}|dk}ttd t| dd||}W 5 Q R X | dkrV|jdksVt| dkrt|jt	
|j t||t	j|jd |jd	 t||t	j|jd dfd
d	 |||dk std S )NTr  r*   rJ  r   r  )r'   r&   r"   )r/   Z
fill_valuerJ   r  )r	   r   r   r   r0   rF  r3   r   r   r-   Z
zeros_liker   fullr/   r   r4   rQ   )r_   r9   r:   r8   r?   r?   r@   test_zero_max_iter  s"    r  )r  rV  rx   	functoolsr   numpyr-   rg   Znumpy.testingr   r   r   r   Zscipyr   Zsklearn.baser   Zsklearn.datasetsr	   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   Zsklearn.preprocessingr   r   r   Zsklearn.svmr   Zsklearn.utilsr   r   r   Zsklearn.utils._testingr   r   markfilterwarningsZ
pytestmarkr  r9   r   rF   rE   rn   rc   rA   rG   r^   rl   ro   Zparametrizer,   rd   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@  rB  r   rH  rI  r   r  rO  rR  rX  rZ  r_  rb  rj  r   rp  rz  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?   r?   r?   r@   <module>   s  


!
        

*

	B$



)C V%?&5
1$/ 
H
)
--#+	( 
*

-+
*
