U
    ½mœdó ã                   @   sT  d dl Z d dlZd dlZd dlm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/m0Z1 ej2 3d¡Z4ee/d d�Z.ee1d d�Z0dZ5dd gd dgddggZ6e 7e6¡Z8d ddgZ9ddd gZ:eƒ Z;dd„ Z<dd „ Z=d!d"„ Z>e(d#d$„ ƒZ?d%d&„ Z@ej2 Ad'e.eBe;jCƒd(d)d*�e.eBe;jCƒd+d,d*�e.eBe;jCƒd-d,d*�e.eBe;jCƒd.d/d)d0d1�e.eBe;jCƒd2d/d)d0d1�e.eBe;jCƒd3d)d*�g¡d4d5„ ƒZDej2 Ad6e.e0g¡d7d8„ ƒZEej2 Ad9d+d-d.d2g¡d:d;„ ƒZFd<d=„ ZGd>d?„ ZHd@dA„ ZIdBdC„ ZJdDdE„ ZKdFdG„ ZLdHdI„ ZMdJdK„ ZNdLdM„ ZOej2 AdNdOdPgfdQdRdSgfdTdRdSgfdUdPgfdVdRdSgfg¡dWdX„ ƒZPdYdZ„ ZQd[d\„ ZRd]d^„ ZSd_d`„ ZTdadb„ ZUej2 Adcdddedfœdddedgdhœg¡ej2 Adidcdjg¡dkdl„ ƒƒZVdmdn„ ZWdodp„ ZXdqdr„ ZYdsdt„ ZZdudv„ Z[dwdx„ Z\dydz„ Z]d{d|„ Z^d}d~„ Z_dd€„ Z`ej2 Ad�d0g¡ej2 Ad‚dƒd„g¡d…d†„ ƒƒZad‡dˆ„ Zbej2 Ad‰e cddŠ¡¡ej2 Ad‹d)d,g¡ej2 AdŒd�dŽd�d�d‘d’g¡d“d”„ ƒƒƒZdej2 Ad9e5¡d•d–„ ƒZeej2 Ad9efege5ƒegd(gƒ ƒ¡ej2 Ad—d˜¡ej2 Ad™d˜¡ej2 Ad‹d)d,g¡dšd›„ ƒƒƒƒZhdœd�„ Ziej2 Ad‹d)d,g¡ej2 Ad9d(d-d3d2g¡ej2 Ad™dždŸg¡d d¡„ ƒƒƒZjd¢d£„ Zkd¤d¥„ Zlej2 Ad¦d§dddd¨d©dªd«g¡ej2 Ad¬d­d®g¡d¯d°„ ƒƒZmej2 Ad¦d§dd©d«g¡d±d²„ ƒZnej2 Ad¦e od³dd´¡¡ej2 Adµdddgd¶g¡d·d¸„ ƒƒZpej2 Ad‹d¹¡dºd»„ ƒZqd¼d½„ Zrej2 Ad‚d¾¡ej2 Ad‹d¿¡dÀdÁ„ ƒƒZsdÂdÃ„ ZtdÄdÅ„ Zuej2 Ad¦e od³dd´¡¡ej2 Adµdddgd¶g¡dÆdÇ„ ƒƒZvdÈdÉ„ Zwej2jAdÊe.d dËdÌ�e0d dÍdÍd§dËdÎ�gdÏdÐ„ dÑ�ej2 Ad9e5¡dÒdÓ„ ƒƒZxej2 Ad9efege5ƒegd(gƒ ƒ¡dÔdÕ„ ƒZyej2 AdÖdƒdžd×dªdØœd„dŸdÙdªdØœd„dždÙdªdØœg¡dÚdÛ„ ƒZzdÜdÝ„ Z{ej2 Ad™dždŸg¡dÞdß„ ƒZ|ej2 Ad‹d)d,dàg¡ej2 Adidádâdádhœdjg¡dãdä„ ƒƒZ}ej2 Ad9e5¡dådæ„ ƒZ~dçdè„ Z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)Ú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ÚLogisticRegressionCVz6error::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>   úa/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/linear_model/tests/test_logistic.pyÚcheck_predictions4   s    



r@   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    )r@   r   r8   ÚY1ÚX_spr>   r>   r>   r?   Útest_predict_2_classesF   s    rF   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__U   s    z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__init__Nc                 S   s(   | j | jt| j ƒ  }|  jd7  _|S )Nr(   )rK   rJ   r+   )rL   Úmodelr8   r9   Úsample_weightÚscorer>   r>   r?   Ú__call__Y   s    z9test_logistic_cv_mock_scorer.<locals>.MockScorer.__call__)N)Ú__name__Ú
__module__Ú__qualname__rM   rQ   r>   r>   r>   r?   Ú
MockScorerT   s   rU   r(   r)   é   é   )ÚCsÚscoringÚcvr   r   )
r   r
   r/   ÚC_r2   rJ   r+   rP   r0   rK   )rU   Zmock_scorerrX   rZ   Úlrr8   r9   Zcustom_scorer>   r>   r?   Útest_logistic_cv_mock_scorerS   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ÚUserWarningr/   )r:   Ú
n_featuresre   r\   Úwarning_messager>   r>   r?   Útest_lr_liblinear_warningt   s    ÿrk   c                   C   s(   t tdd�ttƒ t tdd�ttƒ d S )Né
   )rB   )r@   r   r8   ÚY2rE   r>   r>   r>   r?   Útest_predict_3_classesƒ   s    rn   r7   r"   Úovr)rB   r^   Úmulti_classr!   Úmultinomialr#   r%   ç{®Gáz„?é*   )rB   r^   Útolrp   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)rb   rc   r.   rd   re   r^   ÚwarningsÚcatch_warningsÚsimplefilterr   r/   r   r,   r-   r1   r0   Úmeanr2   r3   r   r4   r5   r6   )r7   r:   ri   re   Ú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.rq   ©r^   rp   r`   )r!   r#   r$   r%   z1Solver %s supports only 'l2' or 'none' penalties,Úl1ro   )r^   Úpenaltyrp   )r!   r#   r$   r%   r&   z1Solver %s supports only dual=False, got dual=TrueT)r^   Údualrp   )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^   )	rb   rc   re   rf   ÚraisesÚ
ValueErrorr/   Úformatr   )r}   r8   r9   r^   Úmsgr\   r>   r>   r?   Útest_check_solver_option»   s8    ÿ
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-setosarq   rs   éÐ  )r^   rp   r    Úmax_iterr(   ©r(   F)r^   rp   r    rC   r*   çÍÌÌÌÌÌì?)rb   re   Úastyper,   ZintpÚarrayr   r/   rc   Úcoef_r.   r2   Ú
intercept_r   r0   r1   r6   Zpredict_log_probarz   )r^   re   r7   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   rq   r&   çü©ñÒMbP?)rp   r^   rt   r    r(   )	r
   r   r/   Údecision_functionr3   r,   ÚexpZc_r   )Zglobal_random_seedr8   r9   r7   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   )rb   rc   r.   rd   re   r   r   r/   r”   Zsparsifyr   Úissparser�   r2   Z
coo_matrixZdensifyr   )
r:   ri   re   r8   r7   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   )é   rl   r   r'   )rV   é   )r,   ÚrandomÚRandomStateZrandom_sampler5   r.   r   rf   r…   r†   r/   r8   r0   )ÚrngZX_Zy_r7   Zy_wrongr>   r>   r?   Ú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/   r8   rD   r�   r‘   r   r”   ©r7   r>   r>   r?   Útest_write_parameters>  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�   r8   Úfloat64Únanr   rf   r…   r†   r/   rD   )ZXnanZlogisticr>   r>   r?   Útest_nanG  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   rA   r)   r(   r'   rW   rl   ©r%   r&   Fçñhãˆµøä>éè  ro   )rX   rC   rt   r^   r‹   rp   r    )rB   rC   rt   r^   rp   r    r‹   zwith solver = %s)ÚdecimalÚerr_msg)r!   r#   r$   r"   r%   r&   ç     @�@ç�íµ ÷Æ°>g     ˆÃ@)rX   rt   r^   Úintercept_scalingr    rp   )rB   rt   r¯   r    rp   r^   )r,   rœ   r�   ÚconcatenateÚrandnÚlogspacer   r   Ú	enumerater   r/   r�   Úravelr   r‘   )rž   r8   r9   rX   Úfr^   ÚcoefsÚ_ÚirB   r\   Zlr_coefr>   r>   r?   Útest_consistency_pathR  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   rA   r)   r(   r'   r­   ç        )rX   rt   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±   rf   rg   r   r   r+   r2   ÚmessageÚargs)rž   r8   r9   rX   Ú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"   ro   )r    r‚   rt   r^   rp   é   z)Arrays are not almost equal to 6 decimalsr`   )r
   r   r/   r   r�   rf   r…   r2   )r8   r9   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"   ro   rV   )rX   rC   r^   rp   rZ   )rB   rC   r^   rp   r(   r'   r)   rŒ   )r(   rV   r(   )r,   rœ   r�   r±   ÚsignÚdotrz   Zstdr   r/   r   r   r�   r   r.   r1   r+   r2   ÚasarrayÚlistÚcoefs_paths_ÚvaluesÚCs_Úscores_)	r:   ri   rž   ÚX_refr9   Úlr_cvr\   Úcoefs_pathsrK   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 )NrA   r   rV   é   )r:   r    r<   Ún_informativeéP   rÆ   rq   )rB   rp   )rB   r_   Ú
warm_start)rX   rY   r)   )	r
   r,   Úaranger   Ú
get_paramsr/   r   r   r   )rY   Zmulticlass_agg_listr8   r9   Ú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š   rV   rV   r   )r:   ri   r<   r×   r    ÚbarÚbazÚfoor(   rq   ©rp   )rp   rX   r)   )rá   râ   rã   )Úclass_weightrp   )r
   r   r/   Zinverse_transformr,   r�   r   r   r   r�   Úsortedr1   r2   r-   r0   )
r:   ri   r<   rÏ   r9   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:   ri   r    rº   rÆ   )
r
   r   Ú
csr_matrixr   r/   r   r�   r‘   r[   r2   )r8   r9   Úcsrr7   Zclfsr>   r>   r?   Útest_logistic_cv_sparse<  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)   ro   )rZ   rp   r(   r   rV   rl   )rl   ©r!   r#   r%   r&   r¨   éô  é   rq   rs   r“   rr   )r^   rp   r‹   r    rt   rZ   r!   )rb   rc   re   r.   r   rÊ   Úsplitr   r/   Úcopyr   rÎ   r‘   r�   r,   Znewaxisr2   r   r1   rÉ   rË   rÌ   rÍ   r   rP   )rÜ   re   r:   ri   Zn_cvrZ   Zprecomputed_foldsr7   Úclf1Ztarget_copyrÑ   rK   r^   r‹   Ú	clf_multiZmulti_scoreZ	ovr_scorer>   r>   r?   Útest_ovr_multinomial_irisJ  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.rl   rš   r   )ri   r×   r    Frs   ro   )rC   r    rp   c                    s(   i | ] }|t f d |iˆ—Ž ˆ ˆ¡“qS ©r^   )r   r/   ©Ú.0r^   ©r8   rÞ   r9   r>   r?   Ú
<dictcomp>“  s   ÿ z4test_logistic_regression_solvers.<locals>.<dictcomp>r)   ©ÚrrV   ©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Á   rl   rV   r   ©r:   ri   r×   r<   r    çH¯¼šò×z>Frs   ro   )rC   rt   r    rp   rª   é'  r¨   c              
      s2   i | ]*}|t f |ˆ |d ¡dœˆ—Ž ˆ ˆ¡“qS )rA   )r^   r‹   )r   Úgetr/   rõ   ©r8   rÞ   Zsolver_max_iterr9   r>   r?   rø   ª  s   ý  
ÿÿ þz?test_logistic_regression_solvers_multiclass.<locals>.<dictcomp>r)   rù   rW   rû   Nrü   )rt   r  r  r  r>   r	  r?   Ú+test_logistic_regression_solvers_multiclassž  s&        ÿ

ü  ÿr
  ÚweightrG   gš™™™™™É?r¤   rI   )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î   rV   r   )r:   ri   Ú
n_repeatedr×   Ún_redundantr<   r    r(   Fro   )rX   rC   rp   rå   r^   r!   r¨   r©   r  )rt   r‹   r    r“   ©ÚrtolN)
r+   r
   rý   r   r/   Úsetrþ   Ú
set_paramsr   r�   )	r  rå   r<   r8   r9   rÞ   Z	clf_lbfgsr^   r7   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š   rV   r)   r   r  r(   rs   Fro   )r    rC   rp   )rX   rZ   )r!   r"   r^   ©rO   ç-Cëâ6?r  )r!   r&   r%   ç»½×Ùß|Û=r©   ©r^   rt   r¤   )r^   rå   r"   r€   )r^   rC   rå   r�   rt   r    rp   )r^   rC   r�   rt   r    rp   rW   rû   Úl2T)r^   rC   rå   r�   r‚   r    rp   )r^   rC   r�   r‚   r    rp   )r
   r   r   Úupdater/   r,   r5   r.   r   r�   r  rþ   r   r   )r8   r9   rO   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;   r9   )r,   r-   r   rý   Úzip)r9   r;   rå   Úclass_weight_dictr>   r>   r?   Ú _compute_class_weight_dictionary0  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#   rq   r  )r^   rp   rå   rW   rû   rA   r¨   ro   rÖ   )r   rb   rc   re   r  r   r/   r   r�   r  rþ   )ZX_irisr8   r9   Zsolversr  r^   rñ   Zclf2r>   r>   r?   Ú&test_logistic_regression_class_weights8  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Á   rV   rl   r   r  F)Z	with_meanr!   rq   r   )r^   rp   rC   )r%   r&   r#   rs   rŠ   r  )r^   rp   r    r‹   rt   )r^   rp   r    r‹   rt   rC   rr   r  rì   r®   rÆ   )r^   r‹   rt   rp   rX   g{®Gáz”?)r
   r   Zfit_transformr   r/   r�   r.   r2   r   r‘   r   )r:   ri   r<   r8   r9   r^   Zref_iZref_wZclf_iZclf_wZclf_pathr>   r>   r?   Ú$test_logistic_regression_multinomial]  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"   ro   )rC   r^   rp   )rš   rš   )r
   r   r/   r,   Úzerosr   r0   ©r8   r9   r7   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 )Nrl   rš   r   rè   r"   ro   r   ©r
   r   r/   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 )Nrl   rš   r   rè   r&   rr   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)rC   rº   )r   r/   r8   rD   r‘   r2   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 )Nrs   rÅ   rÁ   r   rè   rV   ©Úsizer)   ©r.   r(   r*   r€   rÆ   r"   Fro   r  ©r�   rB   r^   rC   rp   rt   r&   rª   ©r�   rB   r^   rC   rp   r‹   rt   éûÿÿÿrš   )r,   rœ   r�   r
   Únormalr5   r°   r   r/   r   r�   r"  )rž   r:   r8   r9   ÚX_noiseÚ
X_constantÚlr_liblinearÚlr_sagar>   r>   r?   Útest_logreg_l1Ã  s8    úù	r4  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 )Nrs   rÅ   rÁ   r   rè   rG   rV   )r   r*  r)   r+  r(   r*   r€   rÆ   r"   Fro   r  r,  r&   rª   r-  r.  rš   )r,   rœ   r�   r
   r/  r"  r°   r   ré   r   r/   r   r�   Ztoarray)	rž   r:   r8   r9   r0  r1  r2  r3  Zlr_saga_denser>   r>   r?   Útest_logreg_l1_sparse_dataé  sR    
úù	ù	r5  Ú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 )NrA   rÁ   rè   r&   rª   çê-�™—q=)r^   r�   r    r‹   rt   rÆ   T)rX   ÚrefitrB   )r
   rý   r   r/   r   r   r�   )r6  r�   r8   r9   Zcommon_paramsrÐ   r\   r>   r>   r?   Ú!test_logistic_regression_cv_refit  s    ûr9  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 )
Nrl   rÁ   r   rV   )r:   ri   r    r<   r×   rq   r!   ©rp   r^   ro   )r
   r   r/   r   r3   r2   Z_predict_proba_lr)r8   r9   rò   Zclf_multi_lossZclf_ovrZclf_ovr_lossZclf_wrong_lossr>   r>   r?   Ú%test_logreg_predict_proba_multinomial8  s"        ÿ
r;  r‹   rš   rp   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&   r<  )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~   rq   z?'multinomial' is not supported by liblinear and newton-choleskyr$   r(   z/solver newton-cholesky might converge very fastçVçž¯Ò<)r‹   rt   rp   r    r^   r`   )rb   rc   re   rð   rf   Úskipr   rg   r   r/   Ún_iter_r2   )r‹   rp   r^   r½   r8   Úy_binr\   r>   r>   r?   Útest_max_iterN  s     

ûrA  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   rV   r)   rW   rr   rÆ   rs   )rt   rB   r^   r    rŒ   )rt   r^   rX   rZ   r    r(   ro   rä   r~   rq   )rb   rc   re   r   r,   r-   r.   r2   rð   r   r/   r?  r   r  )	r^   r8   r9   r<   r@  Zn_CsZ	n_cv_foldr7   Zclf_cvr>   r>   r?   Útest_n_iterx  s>        ÿ
rB  rÙ   )TFrC   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$   rq   r  rs   )rt   rp   rÙ   r^   r    rC   )Úcategoryr(   zUWarm starting issue with %s solver in %s mode with fit_intercept=%s and warm_start=%sç       @)rb   rc   re   r   r   r   r/   r�   r‹   r,   r4   ÚabsÚstrr2   )
r^   rÙ   rC   rp   r8   r9   r7   Zcoef_1Zcum_diffrˆ   r>   r>   r?   Útest_warm_startª  s0    úþÿrG  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 )NrV   r(   r)   rÅ   rÁ   r   rè   )r€   r  r'   rÆ   r&   ro   éÈ   Fr®   )rB   r^   rp   r‹   rC   r�   r    rt   r"   )r	   rc   re   r,   r°   r
   r   ré   r.   r²   r   r/   r   r�   )rb   r8   r9   ZX_binr@  ZX_sparseZy_sparser�   r:   Úalphar&   r"   r>   r>   r?   Útest_saga_vs_liblinearÒ  sN      ÿ



ø
ørJ  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~   rq   zSolver=z' does not support multinomial logistic.r"   r¢   gü©ñÒMb@?rs   )r^   rp   r    rt   rC   g…ëQ¸…@Úntrr   ©Úatolr&   rG   )rf   r>  r,   r¥   Zfloat32r�   r8   rŽ   rD   r   ré   r   r   r/   r�   r£   r2   ÚosÚnamer   r   )r^   rp   rC   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_sparserM  r>   r>   r?   Útest_dtype_match  sJ    	û	rP  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   rA   r)   r(   r'   rq   r%   F)rp   r^   rÙ   r    Trš   r©   r  )r,   rœ   r�   r°   r±   r�   r   r   r/   r3   Úranger   )rž   r8   r9   Zlr_no_wsZlr_wsZlr_no_ws_lossr¸   Z
lr_ws_lossr>   r>   r?   Útest_warm_start_converge_LRN  s(    &   ÿ   ÿrR  c            
   
   C   s¤   t dd�\} }d}d}tƒ }dD ]2}t||dd|ddd	�}| | |¡ | |j¡ q |\}}}	tj||dd
d�rtt‚tj||	dd
d�rŠt‚tj|	|dd
d�r t‚d S )Nr   r   rD  rI   )rƒ   r€   r  r&   r“   rH  )r�   rB   r^   r    Úl1_ratiort   r‹   rG   )r  rM  )	r
   rÊ   r   r/   Úappendr�   r,   Úallcloser2   )
r8   r9   rB   rS  Zcoeffsr�   r\   Zelastic_net_coeffsZ	l1_coeffsZ	l2_coeffsr>   r>   r?   Útest_elastic_net_coeffsc  s(    ù	
rV  rB   r“   rl   rA   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&   rr   )r�   rB   rS  r^   r    rt   ©r�   rB   r^   r    rt   )r
   r   r/   r   r�   )rB   r�   rS  r8   r9   Úlr_enetZlr_expectedr>   r>   r?   Ú"test_elastic_net_l1_l2_equivalence  s&    ú    ÿrY  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   rS  r(   rš   rƒ   r&   rr   rW  T)r8  r€   r  )	r
   r   r,   Úlinspacer   r   r/   rP   r2   )rB   r8   r9   ÚX_trainÚX_testÚy_trainÚy_testÚ
param_gridZenet_clfÚgsZl1_clfZl2_clfr7   r>   r>   r?   Útest_elastic_net_vs_l1_l2—  s:        ÿ    ÿ    ÿra  éýÿÿÿrW   rS  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Á   rl   r   ©r:   r<   ri   r×   r  r  r    rƒ   r&   F)r�   r^   r    rB   rS  rC   r  )r�   r^   r    rB   rC   c                    sV   | j  ¡ }ˆ tˆ|  ˆ¡ƒ }|ˆt t |¡¡ 7 }|dˆ d t ||¡ 7 }|S )NrÆ   rI   )r�   r´   r   r3   r,   r4   rE  rÈ   )r\   ZcoefÚobj©rB   r8   rS  r9   r>   r?   Úenet_objectiveÕ  s
    
zEtest_LogisticRegression_elastic_net_objective.<locals>.enet_objective)r
   r   r   r/   r2   )rB   rS  rX  Zlr_l2rf  r>   re  r?   Ú-test_LogisticRegression_elastic_net_objective´  s:    ù
	ú    ÿrg  )ro   rq   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 )Nro   r   r   rA   rV   ©r:   r<   r×   r    rš   r(   éüÿÿÿrW   rƒ   r&   rr   ©r�   rX   r^   rZ   Ú	l1_ratiosr    rp   rt   ©rB   rS  ©r�   r^   r    rp   rt   ©rZ   rS  rB   )r
   r   r,   rZ  r²   r   r/   r   r   Zbest_params_Ú	l1_ratio_r2   r[   )
rp   r8   r9   rZ   rk  rX   Úlrcvr_  r\   r`  r>   r>   r?   Ú2test_LogisticRegressionCV_GridSearchCV_elastic_netß  sD       ÿ
ø

ûrq  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 )NrA   rV   r   rh  r   rš   r(   ri  rW   rƒ   r&   ro   rr   rj  rl  rm  rn  rH   )r
   r   r   r,   rZ  r²   r   r/   r   r   r0   rz   r2   )r8   r9   r[  r\  r]  r^  rZ   rk  rX   rp  r_  r\   r`  r>   r>   r?   Ú6test_LogisticRegressionCV_GridSearchCV_elastic_net_ovr  sB       ÿ
ø

û rr  )r  rƒ   )ro   rq   Ú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 )NrV   rÁ   rH  r   ©r:   r<   r×   ri   r    ri  rW   rƒ   r(   r)   r&   rr   F)r�   rX   r^   rk  r    rp   rt   r8  )r
   r,   r²   rZ  r   r/   r[   r.   r2   ro  r�   )	r�   rp   r<   ri   r8   r9   rX   rk  rp  r>   r>   r?   Ú"test_LogisticRegressionCV_no_refit:  s6    û
ø
ru  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 )NrV   rÁ   rH  r   rt  ri  rW   r(   r)   rƒ   r&   ro   rr   )r�   rX   r^   rZ   rk  rp   r    rt   )r
   r,   r²   rZ  r   r/   rÉ   rÊ   rË   rÌ   r.   r*  r2   rÎ   r?  )
r<   ri   r8   r9   rX   rk  Zn_foldsrp  rÑ   rK   r>   r>   r?   Ú5test_LogisticRegressionCV_elasticnet_attribute_shapes_  sD    û
ø
û
rv  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\)r`   r€   r&   rI   )r�   r^   rS  )rf   rg   rh   r   r/   r8   rD   )rˆ   r>   r>   r?   Útest_l1_ratio_non_elasticnetŠ  s    ÿrw  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(   rc  rƒ   FrŠ   rÆ   r   )r�   r    rC   rt   r‹   rS  rI  Zlossr©   rª   r&   )r�   r    rC   rt   r‹   rS  rB   r^   rû   )r
   r   r   r   r/   r   r�   )rB   rS  r:   r8   r9   ZsgdÚlogr>   r>   r?   Útest_elastic_net_versus_sgd“  sD    ù
	
ø
øry  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 )NrH  rV   r)   r   r(   )r:   r<   r×   r  Zn_clusters_per_classr    ri   r©   r  r€   r&   rq   )r�   rX   r^   r    rp   rû   )r
   r   rf   r…   r2   r   )r8   r9   rX   r¶   r·   r>   r>   r?   Ú/test_logistic_regression_path_coefs_multinomial½  s2    ù
	
ù
  rz  Úestrí   )r    r‹   rV   )r    rZ   rX   rt   r‹   c                 C   s   | j jS ©N)Ú	__class__rR   )Ú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  r/   )r8   r9   r  ©r{  r>   r?   r/   ê  s    z6test_logistic_regression_multi_class_auto.<locals>.fitrl   r(   r   rs  r:  ro   r~   rq   )
r   rb   rc   re   r   r�   r3   r,   rU  r2   )r{  r^   r/   Zscaled_datar8   ÚX2Zy_multir@  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}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Â   z&Setting penalty=None will ignore the CrW   )r�   r^   rB   r`   )r�   r^   r    r  )r�   rB   r^   r    )
r
   r   rf   rg   rh   r/   r,   Úinfr0   r   )	r^   r8   r9   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‚   rt   r‹   r7  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(   rV   r)   rW   Úfloatr¢   Úintr+  r   r   r"   rs   )r^   r    r  )r0   r3   r”   )r,   r�   r£   ZvstackZhstackr5   r+   r   r   r  r   r/   Úgetattrr   )rÞ   r8   r9   r‚  Úy2rO   Zbase_clfZclf_no_weightZclf_with_weightÚmethodZX_clf_no_weightZX_clf_with_weightr>   r>   r?   Ú/test_logisticregression_liblinear_sample_weight&  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_splitsrG   r�   r(   rl   rƒ   r&   éú   r“   )r�   r^   rk  rX   rZ   r    r‹   rt   r*   )r�   r^   rB   rS  r    r‹   rt   rn  )r
   r   r   r/   rÎ   rz   r³   r   r   rf   Úapproxr2   )r8   r9   rZ   rk  rX   rp  Zavg_scores_lrcvr¸   rB   ÚjrS  r\   Zavg_score_lrr>   r>   r?   Ú'test_scores_attribute_layout_elasticnet[  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!   rq   )rB   r^   rp   rC   r   r*   r  rL  r=  )rE  N)rb   rc   r.   rd   re   r   r+   r   r/   r   r�   r4   r‘   rf   r�  )rC   r:   ri   re   r7   ZX_scaledr>   r>   r?   Ú(test_multinomial_identifiability_on_iris‡  s    ü
r�  rs  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   rH  )r    rå   r‹   rp   r  )r	   r+   r,   r5   rð   r   r/   r   )rp   rå   r8   r9   ri   ÚWÚexpectedr7   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Á   rl   rê   )r‡   )ÚindicesZindptrZint64r)   r   r)  )r"   r%   r&   z0Only sparse matrices with 32-bit integer indicesr`   rô   )r   ZrandÚsetattrrˆ  rŽ   r,   rœ   Úrandintr.   rf   r…   r†   r   r/   )r^   r8   Úattrr9   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 )NrI   gÍÌÌÌÌÌä?gš™™™™™ñ?g      ô?rH   gHáz®Gá?rv   gffffffæ?r(   r   r#   T)r^   rC   )r,   r�   ÚTr.   r2   r   r/   )r8   r9   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`.r`   )	rb   rd   re   r   rf   rg   ÚFutureWarningr/   rc   )re   r\   rj   r>   r>   r?   Ú#test_warning_on_penalty_string_noneá  s    
ÿrœ  )�rÿ   rN  rw   Ú	functoolsr   Únumpyr,   Znumpy.testingr   r   r   r   Zscipyr   rf   Zsklearn.baser   Zsklearn.datasetsr	   r
   Zsklearn.metricsr   r   Zsklearn.model_selectionr   r   r   r   Zsklearn.preprocessingr   r   Zsklearn.utilsr   r   Zsklearn.utils._testingr   r   Zsklearn.linear_modelr   r   r   Zsklearn.exceptionsr   Zsklearn.linear_model._logisticr   r   r   ZLogisticRegressionDefaultr   ZLogisticRegressionCVDefaultÚmarkÚfilterwarningsZ
pytestmarkrþ   r8   ré   rE   rD   rm   rb   r@   rF   r]   rk   rn   Zparametrizer+   rc   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(  r4  r5  r9  r;  rÚ   rA  rB  ræ   r  rG  rJ  rP  rR  rV  rY  ra  r²   rg  rq  rr  ru  rv  rw  ry  rz  rƒ  r…  r‹  r�  r�  r“  r˜  rš  rœ  r>   r>   r>   r?   Ú<module>   sŠ  ÿ


!
  ÿ    ÿû  ÿðþ

*
	B$


öþ
)C W%?&5ôþ
1$/ 
ÿH
)
--#+	( 
þú*
ýþ
-,
*
