U
    _»{jD ã                   @   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j4 5d¡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j4 Cd"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j4 Cd1eeg¡d2d3„ ƒZGej4 Cd1eeg¡d4d5„ ƒZHej4 Cd6d&d(d)d-g¡d7d8„ ƒZId9d:„ ZJd;d<„ ZKd=d>„ ZLd?d@„ ZMdAdB„ ZNdCdD„ ZOdEdF„ ZPdGdH„ ZQdIdJ„ ZRej4 CdKdLdMgfdNdOdPgfdQdOdPgfdRdMgfdSdOdPgfg¡dTdU„ ƒZSdVdW„ ZTdXdY„ ZUdZd[„ ZVd\d]„ ZWd^d_„ ZXej4 Cd`dadbdcœdadbdddeœg¡ej4 Cdfd`dgg¡dhdi„ ƒƒZYdjdk„ ZZdldm„ Z[dndo„ Z\dpdq„ Z]drds„ Z^dtdu„ Z_dvdw„ Z`dxdy„ Zadzd{„ Zbd|d}„ Zcej4 Cd~d+g¡ej4 Cdd€d�g¡d‚dƒ„ ƒƒZdd„d…„ Zeej4 Cd†e fdd‡¡¡ej4 Cdˆd$d'g¡ej4 Cd‰dŠd‹dŒd�dŽd�g¡d�d‘„ ƒƒƒZgej4 Cd6e7¡d’d“„ ƒZhej4 Cd6eieje7ƒejd#gƒ ƒ¡ej4 Cd”d•¡ej4 Cd–d•¡ej4 Cdˆd$d'g¡d—d˜„ ƒƒƒƒZkd™dš„ Zlej4 Cdˆd$d'g¡ej4 Cd6d#d(d.d-g¡ej4 Cd–d›dœg¡d�dž„ ƒƒƒZmdŸd „ Znd¡d¢„ Zoej4 Cd£d¤dadd¥d¦d§d¨g¡ej4 Cd©dªd«g¡d¬d­„ ƒƒZpej4 Cd£d¤dd¦d¨g¡d®d¯„ ƒZqej4 Cd£e rd°dd±¡¡ej4 Cd²daddd³g¡d´dµ„ ƒƒZsej4 Cdˆd¶¡d·d¸„ ƒZtd¹dº„ Zuej4 Cdd»¡ej4 Cdˆd¼¡d½d¾„ ƒƒZvd¿dÀ„ ZwdÁdÂ„ Zxej4 Cd£e rd°dd±¡¡ej4 Cd²daddd³g¡dÃdÄ„ ƒƒZydÅdÆ„ Zzej4jCdÇed dÈdÉ�ed dÊdÊd¤dÈdË�gdÌdÍ„ dÎ�ej4 Cd6e7¡dÏdÐ„ ƒƒZ{ej4 Cd6eieje7ƒejd#gƒ ƒ¡dÑdÒ„ ƒZ|ej4 CdÓd€d›dÔd§dÕœd�dœdÖd§dÕœd�d›dÖd§dÕœg¡d×dØ„ ƒZ}dÙdÚ„ Z~ej4 Cd–d›dœg¡dÛdÜ„ ƒZej4 Cdˆd$d'dÝg¡ej4 CdfdÞdßdÞdeœdgg¡dàdá„ ƒƒZ€ej4 Cd6e7¡dâdã„ ƒZ�dädå„ Z‚dædç„ Zƒdèdé„ Z„ej4 Cd6e7¡dêdë„ ƒZ…d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/bwave/python/venv/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s¢t‚|jdks°t‚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&   ç{®Gáz„?é*   )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s”t‚|  t j¡}t|jdd�t |¡ƒ t j|jdd� }t ||k¡dksàt‚dS )zÅTest 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"   Úignoreçffffffî?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 q d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sÐt‚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� qŒq\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� qàd S )Nr   rB   r*   r)   r(   rX   rm   ©r&   r'   Fçñhãˆµøä>éè  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sˆt
‚|d jjd }d	|ks¤t
‚d
|ks°t
‚d|ks¼t
‚d|ksÈt
‚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sÐt‚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_informativeéP   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sÈt‚t|j	|	j	ƒ t
|jƒdddgksît‚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�sŽt‚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sØt‚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�rŠdnddd�}|dk�r¦t| ƒ} | | |¡ | | |¡}| | |¡}||k�sØt‚|jj|jjk�sît‚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!   çH¯¼šò×z>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rødnddœ|—Ž}	tƒ � |	j| ||d� W 5 Q R X t|j	|	j	dd� qâd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� qÂd 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sŽt‚dD ] }t|ddddd�}t|dddddd�}	| ||¡ |	 ||¡ |jj||fksèt‚|	jj||fksüt‚t|j|jdd� t|j|	jdd� t|j	|j	dd� q’d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{®Gáz”?)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sžt‚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sœt‚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s‚t‚td| ||dd�}| 
||¡ |jjd||fks¶t‚|jdd� 
||¡ |jj|fksÜt‚|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 }	|r´d	|ksÄt|	ƒ‚n|d	ksÄt|	ƒ‚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ƒ q¨qŒq€d 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sØt‚t|ƒ}| ||¡ |jj|ksüt‚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˜|�r˜d}t|j|j|d� t|j|j|d� d S )Nr   rr   zSolver=z' does not support multinomial logistic.r#   r¦   gü©ñÒMb@?rt   )r_   rq   r!   ru   rD   g…ëQ¸…@Ú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 ]}| ||¡ qŒt|| 	|¡ƒ}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�r‚t‚tj||
ddd�r˜t‚tj|
|	ddd�r®t‚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s´t‚|	 ||¡| ||¡ksÐt‚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 s†t‚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sÂt‚|	j	d |jd ksÚt‚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sÈt‚|	 
|¡| 
|¡k ¡ dksèt‚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s�t‚|j
j||fks¤t‚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s–t‚t t|j 	¡ ƒ¡}	|	j
| ||j|jfksÄt‚|jj
| ||j|jfksàt‚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rŽd}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   gHáz®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�  g¤›ntž²@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r¸t|jt	 
|j¡ƒ t| |¡t	j|jd |jd	�ƒ t| |¡t	j|jd dfd
d	�ƒ | ||¡dk sÌt‚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
)
--#+	( 
þú*
ýþ
-+
*
