U
    ½mœdÒ¹  ã                   @   s  d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% 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. ddlm/Z/ ddgddgddgddgddgddggZ0ddddddgZ1ddgddgddggZ2dddgZ3e 4¡ Z5e#dƒZ6e6 7e5j8j9¡Z:e5j;e: e5_;e5j8e: e5_8dd„ Z<dd„ Z=dd „ Z>d!d"„ Z?d#d$„ Z@d%d&„ ZAd'd(„ ZBd)d*„ ZCd+d,„ ZDd-d.„ ZEd/d0„ ZFd1d2„ ZGd3d4„ ZHejI Jd5ejKejLf¡d6d7„ ƒZMd8d9„ ZNd:d;„ ZOejI Jd<ejKd=d>�e L¡ g¡d?d@„ ƒZPejI Jd<ejd=d>�ejd=d>�g¡dAdB„ ƒZQdCdD„ ZRejIjJdEejKdFfejLdGfejdFfejdFfejdFfgdHdIdJdKdLgdM�ejIjJdNdgeSe1ƒ dOgeSe1ƒ gdPdQgdM�dRdS„ ƒƒZTejIjJdTejKdUfejLdVfgdHdIgdM�ejIjJdNddWddddgdddddXdOggdYdZgdM�d[d\„ ƒƒZUejIjJd]ejKd^d_gd_d`gdaœfejLdbdbgdbdbgdaœfgdHdIgdM�ejIjJdcddWddddgddfddddddgdefgdfdggdM�dhdi„ ƒƒZVejIjJdjejKejLejgdHdIdKgdM�ejIjJdNddWddddgddddddggdfdggdM�dkdl„ ƒƒZWe%e,dm�dndo„ ƒZXdpdq„ ZYdrds„ ZZdtdu„ Z[dvdw„ Z\dxdy„ Z]ejI Jdzd{d|g¡ejI Jd}d~dg¡ejI Jd€d�d‚g¡dƒd„„ ƒƒƒZ^d…d†„ Z_d‡dˆ„ Z`d‰dŠ„ Zad‹dŒ„ Zbd�dŽ„ Zcejfd�d�„Zdd‘d’„ Zed“d”„ Zfd•d–„ Zgd—d˜„ Zhd™dš„ Zid›dœ„ Zjd�dž„ Zke%dŸd „ ƒZld¡d¢„ Zmd£d¤„ Znd¥d¦„ Zod§d¨„ Zpd©dª„ Zqd«d¬„ ZrejI Jd­ejKejLg¡d®d¯„ ƒZsejI Jd­ejKejLg¡d°d±„ ƒZtd²d³„ ZuejI Jd´ed~d|d‚dµœfedd|d�dµœfedd|d‚dµœfedd{d�dµœfed¶d�d·œfed¸d�d·œfed¸d�d·œfg¡d¹dº„ ƒZvejI Jd»eeef¡d¼d½„ ƒZwejI JdjejKejg¡d¾d¿„ ƒZxdÀdÁ„ ZyejI JdÂejKejzfejLejzfeje{feje{feje{fg¡ejI JdÃeddddÄ�eddddÄ�edÅdÅddÄ�g¡dÆdÇ„ ƒƒZ|ejI Jd»eeeg¡dÈdÉ„ ƒZ}dS )Êzr
Testing for Support Vector Machine module (sklearn.svm)

TODO: remove hard coded numerical results when possible
é    N)Úassert_array_equalÚassert_array_almost_equal)Úassert_almost_equal)Úassert_allclose)Úsparse)ÚsvmÚlinear_modelÚdatasetsÚmetricsÚbase)Ú	LinearSVCÚOneClassSVMÚSVRÚNuSVRÚ	LinearSVR)Útrain_test_split)Úmake_classificationÚ
make_blobs)Úf1_score)Ú
rbf_kernel)Úcheck_random_state)Úignore_warnings)Ú_num_samples)Úshuffle)ÚConvergenceWarning)ÚNotFittedErrorÚUndefinedMetricWarning)ÚOneVsRestClassifier)Ú_libsvméþÿÿÿéÿÿÿÿé   é   é   é*   c                  C   sp   t jdd� tt¡} t| jddggƒ t| jddgƒ t| jtd td fƒ t| j	dgƒ t|  
t¡tƒ d S )NÚlinear©Úkernelç      Ð¿ç      Ð?r!   r#   ç        )r   ÚSVCÚfitÚXÚYr   Ú
dual_coef_Úsupport_Úsupport_vectors_Ú
intercept_Úpredict©Úclf© r6   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/svm/tests/test_svm.pyÚtest_libsvm_parameters/   s    r8   c               	   C   s®  dD ]R} t j| d� tjtj¡}t | tj¡tjk¡dks@t	‚t
|dƒ| dkkst	‚qt|jt |j¡ƒ t tjtj tj¡¡\	}}}}}}}}	}
|||||||dœ}tjtjf|Ž}t |tjk¡dksÒt	‚tjtjtj tj¡dd�\	}}}}}}}}	}
|||||||dœ}tjtjf|ddi—Ž}t |tjk¡dk�sFt	‚tjtjtj tj¡d	dd
d�}t |tjk¡dk�s€t	‚tjtjtj tj¡d	dd
d�}t||ƒ d S )N)r%   Úrbfr&   çÍÌÌÌÌÌì?Úcoef_r%   )ZsupportZSVZnSVZsv_coefZ	interceptZprobAZprobBgffffffî?r'   é   r   ©r'   Zrandom_seed)r   r+   r,   ÚirisÚdataÚtargetÚnpÚmeanr3   ÚAssertionErrorÚhasattrr   Úclasses_Úsortr   ÚastypeÚfloat64Úcross_validation)Úkr5   Zlibsvm_supportZlibsvm_support_vectorsZlibsvm_n_class_SVZlibsvm_sv_coefZlibsvm_interceptZlibsvm_probAZlibsvm_probBZlibsvm_fit_statusZlibsvm_n_iterZmodel_paramsÚpredÚpred2r6   r6   r7   Útest_libsvm_iris9   s~     õù	õù	    ÿ    ÿrM   c               	   C   sº  t jdd�} t tt t¡j¡}|  |t¡ t tt t¡j¡}|  	|¡}t
 t¡� |  	|j¡ W 5 Q R X t| jddggƒ t| jddgƒ t| jdgƒ t| jddgƒ t|tƒ t |¡}tttƒƒD ],}| jD ] }t t| t| ¡|||f< qÖqÌ|  	|¡}t|tƒ dd	„ }t j|d�} |  t t¡t¡ |  	t¡}t| jddggƒ t| jdgƒ t| jddgƒ t|tƒ t jdd�} t jd
d�}t tjtjj¡}|  |tj¡ | tjtj¡ |  	|¡}t| j|jƒ t| j|jƒ t| j|jƒ tt |tjk¡ddd� t |¡}tttjƒƒD ]4}| jD ]&}t tj| tj| ¡|||f< �q0�q&|  	|¡}tt |tjk¡ddd� t j|d�} |  tjtj¡ tt |tjk¡ddd� d S )NÚprecomputedr&   r(   r)   r!   r#   r   c                 S   s   t  | |j¡S ©N©rA   ÚdotÚT©ÚxÚyr6   r6   r7   Úkfuncª   s    ztest_precomputed.<locals>.kfuncr%   g®Gáz®ï?r"   ©Údecimal)r   r+   rA   rQ   r-   ÚarrayrR   r,   r.   r3   ÚpytestÚraisesÚ
ValueErrorr   r/   r0   r2   r   Útrue_resultZ
zeros_likeÚrangeÚlenr>   r?   r@   r   rB   )r5   ÚKÚKTrK   ÚiÚjrV   Zclf2r6   r6   r7   Útest_precomputed‰   sZ    



 






(
rd   c                  C   s¶   t  ¡ } tjdddd�tjdddd�tjddd�tjdd�tjdd�fD ],}| | j| j¡ | 	| j| j¡dksHt
‚qHt ¡  | jt t| jƒ¡¡ t ¡  | jt t| jƒ¡¡ d S )	Nr%   çš™™™™™Ù?ç      ð?)r'   ÚnuÚCç      $@©r'   rh   ©rh   g{®Gáz”?)r	   Úload_diabetesr   r   r   r   r,   r?   r@   ÚscorerC   rA   Úonesr_   )Údiabetesr5   r6   r6   r7   Útest_svrÒ   s    

ûrp   c                  C   sŒ   t  ¡ } tjdd� | j| j¡}| | j| j¡}tjddd� | j| j¡}| | j| j¡}t	t
j |j¡t
j |j¡ddƒ t||dƒ d S )Nç     @�@rk   r%   rj   r!   ç-Cëâ6?r"   )r	   rl   r   r   r,   r?   r@   rm   r   r   rA   ÚlinalgÚnormr;   r   )ro   ÚlsvrÚscore1ÚsvrÚscore2r6   r6   r7   Útest_linearsvræ   s    "ry   c                  C   sH  t  ¡ } t| jƒ}t |¡}tjdddd�j| j	| j|d�}| 
| j	| j¡}tjdddd� | j	| j¡}| 
| j	| j¡}ttj |j¡tj |j¡ddƒ t||dƒ td	ƒ}| d	d
|¡}tjdddd�j| j	| j|d�}	|	j
| j	| j|d�}
tj| j	|d	d�}tj| j|d	d�}tjdddd� ||¡}| 
||¡}t|
|dƒ d S )Nrq   çê-�™—q=i'  )rh   ÚtolÚmax_iter©Úsample_weightr!   rr   r"   r   é
   ©Zaxis)r	   rl   r_   r@   rA   rn   r   r   r,   r?   rm   r   rs   rt   r;   r   r   ÚrandintÚrepeat)ro   Ú	n_samplesÚunit_weightru   rv   Zlsvr_no_weightrx   Úrandom_stateÚrandom_weightZlsvr_unflatZscore3ÚX_flatÚy_flatZ	lsvr_flatZscore4r6   r6   r7   Útest_linearsvr_fit_sampleweightô   sL    

  ÿ ÿ   ÿ  ÿ  ÿr‰   c               	   C   sT   dgdgg} ddg}t jdd„ d�}| | |¡ t t¡� | | ¡ W 5 Q R X d S )Nr*   rf   g      à?c                 S   s   t  dgg¡S )Nrf   )rA   rY   rS   r6   r6   r7   Ú<lambda>"  ó    z!test_svr_errors.<locals>.<lambda>r&   )r   r   r,   rZ   r[   r\   r3   ©r-   rU   r5   r6   r6   r7   Útest_svr_errors  s    r�   c               	      s”   t  ¡ ‰ ˆ  t¡ ˆ  t¡} t| dddgƒ | jt d¡ks@t	‚t
ˆ jdgdd� t
ˆ jddddggdd� t t¡� ‡ fdd	„ƒ  W 5 Q R X d S )
Nr!   r    Zintpg°rh‘í|ó¿r#   rW   g      è?c                      s   ˆ j S rO   )r;   r6   r4   r6   r7   rŠ   3  r‹   ztest_oneclass.<locals>.<lambda>)r   r   r,   r-   r3   rR   r   ÚdtyperA   rC   r   r2   r/   rZ   r[   ÚAttributeError)rK   r6   r4   r7   Útest_oneclass(  s    

r�   c            
      C   s
  t  ¡ } tdƒ}d| dd¡ }tj|d |d f }d| dd¡ }tj|d |d f }|jdddd�}t jd	d
d	d�} |  |¡ |  |¡}t 	|dk¡dks¦t
‚|  |¡}t 	|dk¡dksÆt
‚|  |¡}t|dk ¡ |dkƒ |  |¡}	t|	dk ¡ |dkƒ d S )Nr"   ç333333Ó?éd   é   éüÿÿÿé   )r“   r"   )ÚlowÚhighÚsizeçš™™™™™¹?r9   )rg   r'   Úgammar!   r:   r    r   )r   r   r   ÚrandnrA   Zr_Úuniformr,   r3   rB   rC   Údecision_functionr   Úravel)
r5   Zrndr-   ÚX_trainÚX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr6   r6   r7   Útest_oneclass_decision_function6  s"    




r¡   c                  C   sT   ddgddgddgg} t jdd� | ¡}t| ddgg¡| ddgg¡|j ƒ d S )Nr!   r"   ©rš   g       @)r   r   r,   r   Zscore_samplesr�   Zoffset_)rŸ   r5   r6   r6   r7   Útest_oneclass_score_samplesT  s    þr£   c                  C   sr   t jddd�} |  tt¡ t| jddggƒ t|  ddgg¡dgƒ t 	ddgg¡| _
t|  ddgg¡d	gƒ d S )
Nr%   rf   rj   r(   r)   çš™™™™™¹¿r!   r*   r"   )r   r+   r,   r-   r.   r   r/   r3   rA   rY   Z_dual_coef_r4   r6   r6   r7   Útest_tweak_params]  s    r¥   c                  C   s¬   t jdddd�t jddd�fD ]ˆ} |  tjtj¡ |  tj¡}tt	 
|d¡t	 tjjd ¡ƒ t	 t	 |d¡|  tj¡k¡dks„t‚t|  tj¡t	 |  tj¡¡dƒ qd S )	NTr   rf   )Úprobabilityr…   rh   )r¦   r…   r!   r:   é   )r   r+   ÚNuSVCr,   r>   r?   r@   Úpredict_probar   rA   Úsumrn   ÚshaperB   Úargmaxr3   rC   r   ÚexpZpredict_log_proba)r5   Zprob_predictr6   r6   r7   Útest_probabilityl  s    þ &
  ÿr®   c                  C   s*  t jdddd� tjtj¡} t tj| jj	¡| j
 }t||  tj¡ƒ |  tt¡ t t| jj	¡| j
 }|  t¡}t| ¡ |  t¡ƒ t|| j|  t¡dk t¡ ƒ t ddddd	d	g¡}t|  t¡|d
ƒ t jdddd�} |  tt¡ tt| j| jd�}t || jj	¡| j
 }t| ¡ |  t¡ƒ d S )Nr%   r™   Úovo)r'   rh   Údecision_function_shaper   ç      ð¿g…ëQ¸å¿g…ëQ¸å?rf   r"   r9   r!   )r'   rš   r°   r¢   )r   r+   r,   r>   r?   r@   rA   rQ   r;   rR   r2   r   r�   r-   r.   r3   rž   rE   rG   ÚintrY   r   r1   rš   r/   )r5   ÚdecZ
predictionÚexpectedÚrbfsr6   r6   r7   Útest_decision_function  s*     ÿ
 ÿr¶   ÚSVMc           	      C   s  | ddd�  tjtj¡}| tj¡}|jttjƒdfks<t‚t| 	tj¡t
j|dd�ƒ tddd	d
�\}}t||d	d�\}}}}| ddd�  ||¡}| |¡}|jt|ƒdfks´t‚t| 	|¡t
j|dd�ƒ | ddd�  ||¡}| |¡}|jt|ƒdfk�st‚d S )Nr%   Úovr©r'   r°   r#   r!   r€   éP   r<   r   )rƒ   Úcentersr…   ©r…   r¯   r   )r,   r>   r?   r@   r�   r«   r_   rC   r   r3   rA   r¬   r   r   )	r·   r5   r³   r-   rU   rŸ   r    Úy_trainÚy_testr6   r6   r7   Útest_decision_function_shape   s      ÿ

r¿   c                  C   sª   t j} t j}tjddd� | |¡}t | |jj	¡|j
 }t| ¡ | | ¡ ¡ ƒ tjddd� | |¡}t| |j|jd�}t ||jj	¡|j
 }t| ¡ | | ¡ ¡ ƒ d S )Nr%   r™   rj   r9   r!   )r'   rš   r¢   )r>   r?   r@   r   r   r,   rA   rQ   r;   rR   r2   r   rž   r3   r   r1   rš   r/   )r-   rU   Úregr³   rµ   r6   r6   r7   Útest_svr_predict»  s    rÁ   c                  C   sÈ   t jddid�} |  tt¡ t|  t¡dgd ƒ tdddd	gdd
�\}}t 	¡ t j
dd�t  ¡ fD ]^} | jdddœd� |  |d d… |d d… ¡ |  |dd … ¡}t|dd … |ƒdksdt‚qdd S )Nr!   r™   ©Zclass_weightr"   é   éÈ   r   g-²�ï§ê?gÇK7‰A`Å?)rƒ   Ú
n_featuresÚweightsr…   r   r¼   )r   r!   r’   r‘   )r   r+   r,   r-   r.   r   r3   r   r   ÚLogisticRegressionr   Ú
set_paramsr   rC   )r5   ZX_Zy_Úy_predr6   r6   r7   Útest_weightÑ  s"       ÿ

ýrÊ   Ú	estimatorç{®Gáz„?rk   c                 C   sì   ddgddgddgddgddgddgg}| j dd� dgd }| j|t|d	� |  d
dgg¡}|t d¡kspt‚ddddddg}| j|t|d	� |  d
dgg¡}|dk s¬t‚ddddddg}| j|t|d	� |  d
dgg¡}|dksèt‚d S )Nr   r   r    r"   r!   r%   r&   rÃ   r}   r±   rf   ri   r™   r   )rÈ   r,   r.   r�   rZ   ÚapproxrC   ©rË   r-   r~   rÉ   r6   r6   r7   Ú'test_svm_classifier_sided_sample_weightè  s    (
rÏ   c                 C   sì   ddgddgddgddgddgddgg}| j dd� dgd }| j|t|d	� |  d
dgg¡}|t d¡kspt‚ddddddg}| j|t|d	� |  d
dgg¡}|dk s¬t‚ddddddg}| j|t|d	� |  d
dgg¡}|dksèt‚d S )Nr   r   r    r"   r!   r%   r&   rÃ   r}   r±   rf   g      ø?ri   r™   r   )rÈ   r,   r.   r3   rZ   rÍ   rC   rÎ   r6   r6   r7   Ú&test_svm_regressor_sided_sample_weight  s    (
rÐ   c                  C   sR   t  ¡ } |  tt¡ | j}| jdd� | jttt dt	tƒ¡d� t
|| jƒ d S )Nr’   rk   rÌ   r}   )r   r+   r,   r-   r.   r/   rÈ   rA   r‚   r_   r   )r5   Zdual_coef_no_weightr6   r6   r7   Ú$test_svm_equivalence_sample_weight_C  s    rÑ   zEstimator, err_msgz:Invalid input - all samples have zero or negative weights.z6(negative dimensions are not allowed|nu is infeasible)r+   r¨   r   r   r   )Zidsr~   g333333Ó¿zweights-are-zerozweights-are-negativec              	   C   s8   | dd�}t jt|d�� |jtt|d� W 5 Q R X d S ©Nr%   r&   ©Úmatchr}   ©rZ   r[   r\   r,   r-   r.   )Ú	EstimatorÚerr_msgr~   Úestr6   r6   r7   Ú-test_negative_sample_weights_mask_all_samples&  s    
rÙ   zClassifier, err_msgzJInvalid input - all samples with positive weights belong to the same classzspecified nu is infeasibleg      à¿r¤   zmask-label-1zmask-label-2c              	   C   s8   | dd�}t jt|d�� |jtt|d� W 5 Q R X d S rÒ   rÕ   )Ú
Classifierr×   r~   r5   r6   r6   r7   Ú.test_negative_weights_svc_leave_just_one_label<  s    
rÛ   zClassifier, modelg6<½R–Ù?re   gÕçj+ö—Ù?)ú	when-leftú
when-rightgioð…ÉTÕ?zsample_weight, mask_siderÜ   rÝ   zpartial-mask-label-1zpartial-mask-label-2c                 C   s4   | dd�}|j tt|d� t|j|| gdd� d S )Nr%   r&   r}   çü©ñÒMbP?)Zrtol)r,   r-   r.   r   r;   )rÚ   Úmodelr~   Z	mask_sider5   r6   r6   r7   Ú*test_negative_weights_svc_leave_two_labelsS  s    
rà   rÖ   c                 C   sL   | dd�}|j tt|d� t |j¡ ¡ }|d tj|d dd�ksHt	‚d S )Nr%   r&   r}   r   r!   rÞ   )Úrel)
r,   r-   r.   rA   Úabsr;   rž   rZ   rÍ   rC   )rÖ   r~   rØ   Zcoefr6   r6   r7   Ú!test_negative_weight_equal_coeffsh  s    

rã   )Úcategoryc            
      C   s"  ddl m}  ddlm} tjd d …d d…f tjd  }}t t 	|j
¡t |dk¡d d d d… ¡}t || ¡}|d||| d�}t |¡dks˜t‚tjdd	�tjdd
�| ƒ fD ]h}| || || ¡ |¡}|jdd� | || || ¡ |¡}	tj||dd�tj||	dd�ks´t‚q´d S )Nr   )rÇ   )Úcompute_class_weightr"   r!   Zbalanced)ÚclassesrU   r%   r&   r¼   rÂ   Úmacro)Zaverage)Zsklearn.linear_modelrÇ   Úsklearn.utilsrå   r>   r?   r@   rA   ÚdeleteÚaranger˜   ÚwhereÚuniquer¬   rC   r   r+   r   r,   r3   rÈ   r
   r   )
rÇ   rå   r-   rU   Z
unbalancedræ   Zclass_weightsr5   rÉ   Zy_pred_balancedr6   r6   r7   Útest_auto_weightx  s0    ",

ýþý  ÿrí   c               	   C   sœ  t d d… } t t¡� t ¡  t| ¡ W 5 Q R X t ¡ tjdd�fD ]x}t	 
t¡}|jd rbt‚t	 t	 t d¡j¡}|d d …df }|jd r”t‚|jd r¢t‚| ||¡ t| t¡tƒ qFtjdd�}t t¡� | tt ¡ W 5 Q R X t ¡  tt ¡}t t¡� | t t¡¡ W 5 Q R X t	 t¡j}| t	 t|¡t ¡ t t¡� | t¡ W 5 Q R X t ¡ }| tt ¡ t t¡� | |¡ W 5 Q R X d S )	Nr    r   r¼   ZC_CONTIGUOUS)r"   r!   ZF_CONTIGUOUSrN   r&   )r.   rZ   r[   r\   r   r+   r,   r-   r   rA   ZasfortranarrayÚflagsrC   ZascontiguousarrayZtilerR   r   r3   r]   r   Z
lil_matrixrY   rQ   )ZY2r5   ZXfZyfZXtr6   r6   r7   Útest_bad_input�  s4    
rï   c               	   C   sx   t j d¡} d}t  t j¡j}|| j|dfd� }| jdd|d�}t 	¡ }d}t
jt|d�� | ||¡ W 5 Q R X d S )Nr   r   r"   )r˜   z2The dual coefficients or intercepts are not finiterÓ   )rA   ÚrandomÚRandomStateZfinforH   Úmaxrœ   r�   r   r+   rZ   r[   r\   r,   )Úrngrƒ   Zfmaxr-   rU   r5   Úmsgr6   r6   r7   Útest_svc_nonfinite_paramsÃ  s    rõ   c                  C   sH   t jddd�} |  tt¡ |  t¡ tjt	j
t	j tj¡dddd� d S )Nr%   T)r'   r¦   r<   r   r=   )r   r+   r,   r-   r.   r©   rR   r   rI   r>   r?   r@   rG   rA   rH   r4   r6   r6   r7   Útest_unicode_kernelÑ  s    
    ÿrö   c               	   C   sP   t jdd�} t ddgddgg¡}tjtdd�� |  |ddg¡ W 5 Q R X d S )NrN   r&   r!   r   zSparse precomputedrÓ   )r   r+   r   Ú
csr_matrixrZ   r[   Ú	TypeErrorr,   )r5   Zsparse_gramr6   r6   r7   Útest_sparse_precomputedÛ  s    rù   c               	   C   s|   t  ddddgddddgddddgddddgg¡} t ddddg¡}tjdd�}| | |¡ |jjj	rjt
‚|jjj	rxt
‚d S )Nr   r!   g{®Gáz¤?r™   g{®GázÄ?r%   r&   )r   r÷   rA   rY   r   r   r,   r1   r?   r˜   rC   r/   )rŸ   r½   rß   r6   r6   r7   Ú%test_sparse_fit_support_vectors_emptyâ  s    *ÿrú   ÚlossÚhingeÚsquared_hingeÚpenaltyÚl1Úl2ÚdualTFc              	   C   sŒ   t dddd�\}}tj|| |dd�}| |fdksJ| ||fdksJ||fdkr|tjtd|| |f d	�� | ||¡ W 5 Q R X n| ||¡ d S )
Nr<   r   )rƒ   rÅ   r…   ©rþ   rû   r  r…   )rü   rÿ   )rü   r   F)rÿ   Tz<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%srÓ   )r   r   r   rZ   r[   r\   r,   )rû   rþ   r  r-   rU   r5   r6   r6   r7   Útest_linearsvc_parametersî  s     
ÿþ
ýÿþr  c                  C   sê   t jdd� tt¡} | jst‚t|  t	¡t
ƒ t| jdgdd� t jddddd� tt¡} t|  t	¡t
ƒ t jd	d
dd� tt¡} t|  t	¡t
ƒ t jd	dd
dd�} |  tt¡ t|  t	¡t
ƒ |  t	¡}|dk t¡d }t|t
ƒ d S )Nr   r¼   r#   rW   rÿ   rý   Fr  r   T)rþ   r  r…   rü   r!   )r   r   r,   r-   r.   Úfit_interceptrC   r   r3   rR   r]   r   r2   r�   rG   r²   )r5   r³   Úresr6   r6   r7   Útest_linearsvc  s,    
   ÿ þ
r  c                  C   sÀ   t jdd� tjtj¡} t jddd�}| tjtj¡ |  tj¡| tj¡k ¡ dksZt‚| j	|j	k 
¡ snt‚t| tj¡tj| tj¡dd�ƒ t tj|j	j¡|j }t|| tj¡ƒ d S )Nr   r¼   Úcrammer_singer)Úmulti_classr…   r:   r!   r€   )r   r   r,   r>   r?   r@   r3   rB   rC   r;   Úallr   rA   r¬   r�   rQ   rR   r2   r   )Zovr_clfZcs_clfZdec_funcr6   r6   r7   Útest_linearsvc_crammer_singer&  s    $
þr
  c                  C   s  t tƒ} t | ¡}tjdd� tt¡}tjdddd�jtt|d�}t| 	t
¡| 	t
¡ƒ t|j|jddƒ tdƒ}| dd	| ¡}tjdddd�jtt|d�}| 	t
¡}tjt|dd
�}tjt|dd
�}	tjdddd� ||	¡}
|
 	t
¡}t||ƒ t|j|
jddƒ d S )Nr   r¼   rz   éè  )r…   r{   r|   r}   r!   rr   r   r€   )r_   r-   rA   rn   r   r   r,   r.   r   r3   rR   r   r;   r   r�   r‚   )rƒ   r„   r5   Zclf_unitweightr…   r†   Zlsvc_unflatZpred1r‡   rˆ   Z	lsvc_flatrL   r6   r6   r7   Útest_linearsvc_fit_sampleweight;  s6    
  ÿ  ÿ
 ÿ

r  c                  C   sJ   t ddd�\} }dD ]0}tj|ddd� | |¡ | |¡}|dkst‚qd S )Nr"   r   )Ú	n_classesr…   )TFr  )r  r  r…   r:   )r   r   r   r,   rm   rC   )r-   rU   r  Úaccr6   r6   r7   Útest_crammer_singer_binary]  s    ý û úÿ	r  c                  C   sŒ   t jt j } tjdd� t j| ¡}t|jƒtt jƒks:t	‚t
 | t j¡| k¡dksXt	‚| t j¡}t jt
 |d¡ }t|| t j¡ƒ d S )Nr   r¼   gš™™™™™é?r!   )r>   Ztarget_namesr@   r   r   r,   r?   ÚsetrE   rC   rA   rB   r3   r�   r¬   r   )r@   r5   r³   rK   r6   r6   r7   Útest_linearsvc_irisn  s    r  c              	   C   sÌ   ddgddgddgddgg}ddddg}| ddddd	d
dd�}|j dksRt|j ƒ‚|js\t‚d|_ | ||¡ t|jddd� d|_ | ||¡ |j}|dk s¢t‚d|_ | ||¡ |j}t||dd� d S )Nr"   r!   r#   r   Trÿ   rý   Fr•   gH¯¼šò×z>)r  rþ   rû   r  rh   r{   r…   r<   rW   r’   r    r  )Zintercept_scalingrC   r  r,   r   r2   r   )Ú
classifierr-   rU   r5   Z
intercept1Z
intercept2r6   r6   r7   Ú'test_dense_liblinear_intercept_handling{  s0    ù	
r  c                  C   sÀ   t  ¡  tjtj¡} |  tj¡}| j ¡ | _| j	 ¡ | _	|  tj¡}t
||ƒ ddgddgddgddgg}ddddg}t  ¡  ||¡} |  |¡}| j ¡ | _| j	 ¡ | _	|  |¡}t||ƒ d S )Nr"   r!   r#   r   )r   r   r,   r>   r?   r@   r�   r;   Úcopyr2   r   r   )r5   ÚvaluesZvalues2r-   rU   r6   r6   r7   Útest_liblinear_set_coef   s    


r  c               
   C   sÌ   t jdd� tjtj¡t jdd� tjtj¡t jdd� tjtj¡t jdd� tjtj¡t j	dd� tj¡g} | D ]T}t
 t¡� | dt d¡¡ W 5 Q R X t
 ttf¡� |j dd¡ W 5 Q R X qrd S )Nr%   r&   r;   r#   )r   r   r   )r   r+   r,   r>   r?   r@   r¨   r   r   r   rZ   r[   r�   Ú__setattr__rA   rê   ÚRuntimeErrorr\   r;   Ú__setitem__)Zsvmsr5   r6   r6   r7   Útest_immutable_coef_propertyµ  s    ûr  c                  C   sN   dd l } |  d¡}|  |  ¡ d d¡ tjdd�}| tt¡ |  |d¡ d S )Nr   r!   )Úverbose)	ÚosÚdupÚdup2Úpiper   r   r,   r-   r.   )r  Ústdoutr5   r6   r6   r7   Útest_linearsvc_verboseÅ  s    
r!  c                  C   sÄ   t jdd„ dddd�} t | ¡}| tjtj¡ t jddddd�}| tjtj¡ t|j	|j	ƒ t|j
|j
ƒ t| tj¡| tj¡ƒ t| tj¡| tj¡dd	� t| tj¡| tj¡ƒ d S )
Nc                 S   s   t  | |j¡S rO   rP   rS   r6   r6   r7   rŠ   Ø  r‹   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r¸   )r'   r¦   r…   r°   r%   r•   rW   )r   r+   r   Úcloner,   r>   r?   r@   r   r/   r2   r   r3   r©   r�   )Zsvm_callableZ
svm_clonedZsvm_builtinr6   r6   r7   Ú#test_svc_clone_with_callable_kernelÔ  s6    ü
   ÿ

ý

þr#  c               	   C   s6   t jdd„ d�} t t¡� |  tt¡ W 5 Q R X d S )Nc                 S   s   | S rO   r6   rS   r6   r6   r7   rŠ   ö  r‹   z%test_svc_bad_kernel.<locals>.<lambda>r&   )r   r+   rZ   r[   r\   r,   r-   r.   )Zsvcr6   r6   r7   Útest_svc_bad_kernelõ  s    r$  c               	   C   s^   t jdd„ dddd�} d}tjt|d�� |  t t¡t	¡ W 5 Q R X t 
| jdk¡sZt‚d S )	Nc                 S   s   t  | |j¡S rO   rP   rS   r6   r6   r7   rŠ   ý  r‹   z2test_libsvm_convergence_warnings.<locals>.<lambda>Tr   r"   )r'   r¦   r…   r|   zoSolver terminated early \(max_iter=2\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.rÓ   )r   r+   rZ   Úwarnsr   r,   rA   rY   r-   r.   r	  Ún_iter_rC   )ÚaÚwarning_msgr6   r6   r7   Ú test_libsvm_convergence_warningsû  s       ÿÿr)  c               	   C   s`   d} t  ¡ }tjtdd�� | | ¡ W 5 Q R X t  ¡ }tjtdd�� | | ¡ W 5 Q R X d S )Nzfoo!z.*\bSVC\b.*\bnot\b.*\bfitted\brÓ   z .*\bNuSVR\b.*\bnot\b.*\bfitted\b)r   r+   rZ   r[   Ú	Exceptionr3   r   )r-   r5   r6   r6   r7   Útest_unfitted  s    r+  c                  C   sR   t jdddd�} |  tt¡ t¡}t jdddd�} |  tt¡ t¡}t||ƒ d S )NTr!   r   )r¦   r|   r…   )r   r+   r,   r-   r.   r©   r   )r'  Zproba_1Zproba_2r6   r6   r7   Útest_consistent_proba  s
    r,  c               	   C   s°   t jddd�} d}tjt|d�� |  tt¡ W 5 Q R X t| j	t
ƒsHt‚| j	dksVt‚t jddd�}tjt|d�� | tjtj¡ W 5 Q R X t|j	t
ƒsžt‚|j	dks¬t‚d S )Nr   r"   )r…   r|   z@Liblinear failed to converge, increase the number of iterations.rÓ   )r   r   rZ   r%  r   r,   r-   r.   Ú
isinstancer&  r²   rC   r   r>   r?   r@   )Úlsvcr(  ru   r6   r6   r7   Ú$test_linear_svm_convergence_warnings  s    r/  c                  C   s~   t j d¡ dd¡} t j d¡ d¡}tjdd�tjdd�t ¡ fD ]4}| | |¡ t	| 
| ¡t  | |j ¡ ¡|j ƒ qDd S )Né   r   r#   é   r%   r&   )rA   rð   rñ   r›   r   r   r   r   r,   r   r3   rQ   r;   rž   r2   )r-   rU   rw   r6   r6   r7   Útest_svr_coef_sign1  s    " ÿr2  c                  C   s*   t jdd�} |  tt¡ | jdks&t‚d S )NF)r  r*   )r   r   r,   r-   r.   r2   rC   )r.  r6   r6   r7   Ú test_lsvc_intercept_scaling_zero>  s    r3  c               	   C   s²   t jdd�} t| dƒst‚|  tjtj¡ t| dƒs8t‚t jdd�} t| dƒrRt‚|  tjtj¡ t| dƒrpt‚d| _t| dƒs„t‚d}t	j
t|d�� |  tj¡ W 5 Q R X d S )NT)r¦   r©   FzApredict_proba is not available when fitted with probability=FalserÓ   )r   r+   rD   rC   r,   r>   r?   r@   r¦   rZ   r[   r   r©   )ÚGrô   r6   r6   r7   Útest_hasattr_predict_probaF  s    r5  c                  C   s`   dD ]V} t | dd�\}}tjtjfD ]4}t|dd�ƒ ||¡}t| |¡ƒt|ƒks$t‚q$qd S )N)r"   r#   r   )r»   r…   r¸   )r°   )	r   r   r+   r¨   r   r,   r_   r3   rC   )r  r-   rU   rË   r5   r6   r6   r7   Ú&test_decision_function_shape_two_class^  s     ÿr6  c            	      C   sD  t  ddgddgddgddgg¡} ddddg}t  ddgddgg¡}t  |ddg |ddg |ddg |ddg f¡}dgd dgd  dgd  dgd  }tjdd	d
�}| | |¡ | |¡}t||ƒ | |¡}tt j	|dd�|ƒ |t
dƒ|f  d¡}t  |¡dk�st‚t  |d d …df |d d …df k ¡�s@t‚d S )Nr!   r    r   r"   r#   r<   r   r%   r¸   r¹   r€   r§   )r•   r"   r*   )rA   rY   Úvstackr   r+   r,   r3   r   r�   r¬   r^   ZreshapeÚminrC   r	  )	rŸ   r½   Zbase_pointsr    r¾   r5   rÉ   Zdeci_valZpred_class_deci_valr6   r6   r7   Útest_ovr_decision_functionh  s(    "



üÿ	(


r9  ÚSVCClassc              	   C   sN   t dd�\}}| ddddd� ||¡}tjtdd�� | |¡ W 5 Q R X d S )	Nr$   r¼   r%   r¯   T)r'   r°   Ú
break_tiesr…   zbreak_ties must be FalserÓ   )r   r,   rZ   r[   r\   r3   )r:  r-   rU   r   r6   r6   r7   Ú!test_svc_invalid_break_ties_param”  s       ÿ þr<  c                 C   sp  t dddd�\}}t |dd…df  ¡ |dd…df  ¡ d¡}t |dd…df  ¡ |dd…df  ¡ d¡}t ||¡\}}tdd	d
dd�}| f ddi|—Ž ||¡}| tj	| 
¡ | 
¡ f ¡}	| tj	| 
¡ | 
¡ f ¡}
t |	tj|
dd�k¡rüt‚| f ddi|—Ž ||¡}| tj	| 
¡ | 
¡ f ¡}	| tj	| 
¡ | 
¡ f ¡}
t |	tj|
dd�k¡�slt‚dS )zyTest if predict breaks ties in OVR mode.
    Related issue: https://github.com/scikit-learn/scikit-learn/issues/8277
    r   r“   r"   )r…   rƒ   rÅ   Nr’   r!   r9   g    €„.Ar$   r¸   )r'   rš   r…   r°   r;  Fr€   T)r   rA   Zlinspacer8  rò   ZmeshgridÚdictr,   r3   Zc_rž   r�   r	  r¬   rC   )r:  r-   rU   ZxsZysZxxÚyyZcommon_paramsr   rK   Zdvr6   r6   r7   Útest_svc_ovr_tie_breaking   s@    ..   ÿÿþ ýÿþ ýr?  c                  C   s:   dgdggddg } }t  ¡ }| | |¡ t|jdƒ d S )Nr*   rf   r   r!   r•   )r   r+   r,   r   Z_gammarŒ   r6   r6   r7   Útest_gamma_scale¿  s    r@  zSVM, params)rþ   rû   r  Zepsilon_insensitive)rû   r  Zsquared_epsilon_insensitivec                 C   s�  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
�\}}}| dd
�}|jf |Ž |jddd� t	 
|¡ ||¡}t	 
|¡j|||d�}	dD ]8}
t||
ƒ�rRt||
ƒ|ƒ}t|	|
ƒ|ƒ}t||ƒ �qRd S )Nr!   r#   r"   r•   Úfloat)rŽ   r²   )r«   r   r¼   r$   rz   r  )r{   r|   r}   )r3   r�   )rA   rY   rŽ   r7  Zhstackrn   r_   r   rÈ   r   r"  r,   rD   Úgetattrr   )r·   Úparamsr-   rU   ÚX2Úy2r~   Zbase_estimatorZest_no_weightZest_with_weightÚmethodZX_est_no_weightZX_est_with_weightr6   r6   r7   Ú&test_linearsvm_liblinear_sample_weightÇ  sV    ðí" ÿ

  ÿrG  ÚKlassc                 C   s|   t  dgdgdgdgdgg¡}t  |jd ¡}| ƒ }t|dƒrBt‚| ||¡ |jd |jjd ksht‚|jj	dksxt‚d S )Nr   g)\�Âõ(Ü?gÍÌÌÌÌÌÜ?gq=
×£pÝ?r!   Ú
n_support_)
rA   rY   rê   r«   rD   rC   r,   rI  r1   r˜   )rH  r-   rU   rØ   r6   r6   r7   Útest_n_support  s    rJ  c           	      C   st  dddddg}t  ddgddgddgddgddgg¡}t  dddddg¡}d	d
„ }|||ƒ}tt  ||j¡|ƒ | |d� ||¡}| dd� ||¡}| dd� ||¡}| ||¡| ||¡ksÂt‚| ||¡| ||¡ksÞt‚t|dƒ�rDt	| 
|¡| 
|¡ƒ t	| 
|¡| 
|¡ƒ t| |¡| |¡ƒ t| |¡| |¡ƒ n,t	| |¡| |¡ƒ t	| |¡| |¡ƒ dS )zETest using a custom kernel that is not fed with array-like for floatszA AÚAÚBzB BzA Br"   r   r!   c              	   S   s¶   t | d tƒst‚t| ƒ}t|ƒ}t ||f¡}t|ƒD ]x}t||ƒD ]h}| |  d¡||  d¡ |||f< |||f  | |  d¡||  d¡ 7  < |||f |||f< qFq8|S )Nr   rK  rL  )r-  ÚstrrC   r   rA   Zzerosr^   Úcount)ZX1rD  Z
n_samples1Z
n_samples2r`   ÚiiZjjr6   r6   r7   Ústring_kernel  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr&   r%   rN   r�   N)rA   rY   r   rQ   rR   r,   rm   rC   rD   r   r�   r3   )	rÖ   r?   r-   rU   rP  r`   Zsvc1Zsvc2Zsvc3r6   r6   r7   Ú"test_custom_kernel_not_array_input  s$    (
rQ  c               	   C   sJ   t jdd� tt¡} d| jd< d}tjt|d�� |  	t¡ W 5 Q R X dS )z¡Check that SVC raises error when internal representation is altered.

    Non-regression test for #18891 and https://nvd.nist.gov/vuln/detail/CVE-2020-28975
    r%   r&   i@B r   z.The internal representation of SVC was alteredrÓ   N)
r   r+   r,   r-   r.   Z
_n_supportrZ   r[   r\   r3   )r5   rô   r6   r6   r7   Ú-test_svc_raises_error_internal_representation6  s
    
rR  zestimator, expected_n_iter_typeÚdataset)r  Zn_informativer…   r•   c                 C   sj   |\}}| dd�  ||¡j}t|ƒ|ks,t‚| tjtjfkrftt 	|¡ƒ}|j
||d  d fksft‚d S )Nr%   r&   r!   r"   )r,   r&  ÚtyperC   r   r+   r¨   r_   rA   rì   r«   )rË   Zexpected_n_iter_typerS  r-   rU   Zn_iterr  r6   r6   r7   Útest_n_iter_libsvmC  s    rU  c              	   C   sd   | ƒ }t  ¡ � t  dt¡ | tt¡ W 5 Q R X d}tjtt	 
|¡d�� t|dƒ W 5 Q R X d S )NÚerrorzRAttribute `class_weight_` was deprecated in version 1.2 and will be removed in 1.4rÓ   Zclass_weight_)ÚwarningsÚcatch_warningsÚsimplefilterÚFutureWarningr,   r-   r.   rZ   r%  ÚreÚescaperB  )rH  r5   rô   r6   r6   r7   Ú"test_svm_class_weights_deprecationd  s    
ÿr]  )~Ú__doc__rW  r[  ÚnumpyrA   rZ   Znumpy.testingr   r   r   r   Zscipyr   Zsklearnr   r   r	   r
   r   Zsklearn.svmr   r   r   r   r   Zsklearn.model_selectionr   Zsklearn.datasetsr   r   Zsklearn.metricsr   Zsklearn.metrics.pairwiser   rè   r   Zsklearn.utils._testingr   Zsklearn.utils.validationr   r   Zsklearn.exceptionsr   r   r   Zsklearn.multiclassr   r   r-   r.   rR   r]   Z	load_irisr>   ró   Zpermutationr@   r˜   Úpermr?   r8   rM   rd   rp   ry   r‰   r�   r�   r¡   r£   r¥   r®   r¶   ÚmarkZparametrizer+   r¨   r¿   rÁ   rÊ   rÏ   rÐ   rÑ   r_   rÙ   rÛ   rà   rã   rí   rï   rõ   rö   rù   rú   r  r  r
  r  r  r  r  r  r  r!  r#  r$  r)  r+  r,  r/  r2  r3  r5  r6  r9  r<  r?  r@  rG  rJ  rQ  rR  Zndarrayr²   rU  r]  r6   r6   r6   r7   Ú<module>   sj  (

PI)	!

 

û÷ýþúöýþú&ý  ÿý
$&
"%!

,

ùþ
/

%

ûþ
ýþ