U
    ^»{j²À  ã                   @   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m	Z	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 ddlmZ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$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l0m1Z1 ddgddgddgddgddgddggZ2ddddddgZ3ddgddgddggZ4dddgZ5e 6¡ Z7e,dƒZ8e8 9e7j:j;¡Z<e7j=e< e7_=e7j:e< e7_:dd„ Z>dd„ Z?dd„ Z@dd„ ZAdd „ ZBd!d"„ ZCd#d$„ ZDd%d&„ ZEd'd(„ ZFd)d*„ ZGd+d,„ ZHd-d.„ ZId/d0„ ZJejK Ld1ejMejNf¡d2d3„ ƒZOd4d5„ ZPd6d7„ ZQejK Ld8ejMd9d:�e N¡ g¡d;d<„ ƒZRejK Ld8ej#d9d:�ej&d9d:�g¡d=d>„ ƒZSd?d@„ ZTejKjLdAejMdBfejNdCfej#dBfej&dBfej'dBfgdDdEdFdGdHgdI�ejKjLdJdgeUe3ƒ dKgeUe3ƒ gdLdMgdI�dNdO„ ƒƒZVejKjLdPejMdQfejNdRfgdDdEgdI�ejKjLdJddSddddgdddddTdKggdUdVgdI�dWdX„ ƒƒZWejKjLdYejMdZd[gd[d\gd]œfejNd^d^gd^d^gd]œfgdDdEgdI�ejKjLd_ddSddddgd`fddddddgdafgdbdcgdI�ddde„ ƒƒZXejKjLdfejMejNej&gdDdEdGgdI�ejKjLdJddSddddgddddddggdbdcgdI�dgdh„ ƒƒZYe/edi�djdk„ ƒZZdldm„ Z[dndo„ Z\dpdq„ Z]drds„ Z^dtdu„ Z_ejK Ldvdwdxg¡ejK Ldydzd{g¡ejK Ld|d}d~g¡dd€„ ƒƒƒZ`d�d‚„ Zadƒd„„ Zbd…d†„ Zcd‡dˆ„ Zdd‰dŠ„ Zeej$fd‹dŒ„Zfd�dŽ„ Zgd�d�„ Zhd‘d’„ Zid“d”„ Zjd•d–„ Zkd—d˜„ Zld™dš„ Zme/d›dœ„ ƒZnd�dž„ ZodŸd „ Zpd¡d¢„ Zqd£d¤„ Zrd¥d¦„ Zsd§d¨„ ZtejK Ld©ejMejNg¡dªd«„ ƒZuejK Ld©ejMejNg¡d¬d­„ ƒZvd®d¯„ ZwejK Ld°e$dzdxd~d±œfe$d{dxd}d±œfe$d{dxd~d±œfe$d{dwd}d±œfe%d²d}d³œfe%d´d}d³œfe%d´d}d³œfg¡dµd¶„ ƒZxejK Ld·e'e#e&f¡d¸d¹„ ƒZyejK LdfejMej#g¡dºd»„ ƒZzd¼d½„ Z{ejK Ld¾ejMej|fejNej|fej#e}fej&e}fej'e}fg¡ejK Ld¿eddddÀ�eddddÀ�edÁdÁddÀ�g¡dÂdÃ„ ƒƒZ~ejK Ld·e#e&e'g¡dÄdÅ„ ƒZejK Ldfe%e$g¡dÆdÇ„ ƒZ€ejK Ldvdxd´g¡dÈdÉ„ ƒZ�dÊdË„ Z‚dS )Ìzr
Testing for Support Vector Machine module (sklearn.svm)

TODO: remove hard coded numerical results when possible
é    N)Úassert_allcloseÚassert_almost_equalÚassert_array_almost_equalÚassert_array_equal)Úsparse)ÚbaseÚdatasetsÚlinear_modelÚmetricsÚsvm)Ú
make_blobsÚmake_classification)ÚConvergenceWarningÚNotFittedErrorÚUndefinedMetricWarning)Úf1_score)Ú
rbf_kernel)Útrain_test_split)ÚOneVsRestClassifier)ÚSVRÚ	LinearSVCÚ	LinearSVRÚNuSVRÚOneClassSVMÚ_libsvm)Ú_validate_dual_parameter)Úcheck_random_stateÚshuffle)Úignore_warnings)Ú_num_sampleséþÿÿÿéÿÿÿÿé   é   é   é*   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© r7   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/svm/tests/test_svm.pyÚtest_libsvm_parameters;   s    r9   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Úmeanr4   ÚAssertionErrorÚhasattrr   Úclasses_Úsortr   ÚastypeÚfloat64Úcross_validation)Úkr6   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Úpred2r7   r7   r8   Útest_libsvm_irisE   s~     õù	õù	    ÿ    ÿrN   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©rB   ÚdotÚT©ÚxÚyr7   r7   r8   Úkfunc¶   s    ztest_precomputed.<locals>.kfuncr&   g®Gáz®ï?r#   ©Údecimal)r   r,   rB   rR   r.   ÚarrayrS   r-   r/   r4   ÚpytestÚraisesÚ
ValueErrorr   r0   r1   r3   r   Útrue_resultZ
zeros_likeÚrangeÚlenr?   r@   rA   r   rC   )r6   ÚKÚKTrL   ÚiÚjrW   Zclf2r7   r7   r8   Útest_precomputed•   sZ    



 






(
re   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d�tjddd�fD ],}| | j| j¡ | 	| j| j¡d	ksLt
‚qLt ¡  | jt t| jƒ¡¡ tjdd
� | jt t| jƒ¡¡ d S )Nr&   çš™™™™™Ù?ç      ð?)r(   ÚnuÚCç      $@©r(   ri   Úauto)Údualri   g{®Gáz”?©rm   )r   Úload_diabetesr   r   r   r   r-   r@   rA   ÚscorerD   rB   Úonesr`   )Údiabetesr6   r7   r7   r8   Útest_svrÞ   s    ûrs   c                  C   sŽ   t  ¡ } tjd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ç     @�@rl   )ri   rm   r&   rk   r"   ç-Cëâ6?r#   )r   ro   r   r   r-   r@   rA   rp   r   r   rB   ÚlinalgÚnormr<   r   )rr   ÚlsvrÚscore1ÚsvrÚscore2r7   r7   r8   Útest_linearsvrò   s    "r|   c                  C   sP  t  ¡ } t| jƒ}t |¡}tjddddd�j| j	| j|d�}| 
| j	| j¡}tjd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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d� ||¡}| 
||¡}t|
|d	ƒ d S )Nrl   rt   çê-�™—q=i'  )rm   ri   ÚtolÚmax_iter©Úsample_weightr"   ru   r#   r   é
   ©Zaxis)r   ro   r`   rA   rB   rq   r   r   r-   r@   rp   r   rv   rw   r<   r   r   ÚrandintÚrepeat)rr   Ú	n_samplesÚunit_weightrx   ry   Zlsvr_no_weightr{   Úrandom_stateÚrandom_weightZlsvr_unflatZscore3ÚX_flatÚy_flatZ	lsvr_flatZscore4r7   r7   r8   Útest_linearsvr_fit_sampleweight   sR    

  ÿ ÿ   ÿ  ÿ  ÿ ÿ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+   rg   g      à?c                 S   s   t  dgg¡S )Nrg   )rB   rZ   rT   r7   r7   r8   Ú<lambda>0  ó    z!test_svr_errors.<locals>.<lambda>r'   )r   r   r-   r[   r\   r]   r4   ©r.   rV   r6   r7   r7   r8   Ú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$   rX   g      è?c                      s   ˆ j S rP   )r<   r7   r5   r7   r8   r�   A  rŽ   ztest_oneclass.<locals>.<lambda>)r   r   r-   r.   r4   rS   r   ÚdtyperB   rD   r   r3   r0   r[   r\   ÚAttributeError)rL   r7   r5   r8   Útest_oneclass6  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çš™™™™™¹?r:   )rh   r(   Úgammar"   r;   r!   r   )r   r   r   ÚrandnrB   Zr_Úuniformr-   r4   rC   rD   Údecision_functionr   Úravel)
r6   Zrndr.   ÚX_trainÚX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr7   r7   r8   Útest_oneclass_decision_functionD  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¢   r6   r7   r7   r8   Útest_oneclass_score_samplesb  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&   rg   rk   r)   r*   çš™™™™™¹¿r"   r+   r#   )r   r,   r-   r.   r/   r   r0   r4   rB   rZ   Z_dual_coef_r5   r7   r7   r8   Útest_tweak_paramsk  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   rg   )Úprobabilityrˆ   ri   )r©   rˆ   r"   r;   é   )r   r,   ÚNuSVCr-   r?   r@   rA   Úpredict_probar   rB   Úsumrq   ÚshaperC   Úargmaxr4   rD   r   ÚexpZpredict_log_proba)r6   Zprob_predictr7   r7   r8   Útest_probabilityz  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(   ri   Údecision_function_shaper   ç      ð¿g…ëQ¸å¿g…ëQ¸å?rg   r#   r:   r"   )r(   r�   r³   r¥   )r   r,   r-   r?   r@   rA   rB   rR   r<   rS   r3   r   r    r.   r/   r4   r¡   rF   rH   ÚintrZ   r   r2   r�   r0   )r6   ÚdecZ
predictionÚexpectedÚrbfsr7   r7   r8   Ú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@   rA   r    r®   r`   rD   r   r4   rB   r¯   r   r   )	rº   r6   r¶   r.   rV   r¢   r£   Úy_trainÚy_testr7   r7   r8   Ú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œ   rk   r:   r"   )r(   r�   r¥   )r?   r@   rA   r   r   r-   rB   rR   r<   rS   r3   r   r¡   r4   r   r2   r�   r0   )r.   rV   Úregr¶   r¸   r7   r7   r8   Ú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d�t  ¡ fD ]^} | jdddœd� |  |d d… |d d… ¡ |  |dd … ¡}t|dd … |ƒdksft‚qfd S )Nr"   rœ   ©Zclass_weightr#   é   éÈ   r‚   g-²�ï§ê?gÇK7‰A`Å?)r†   Ú
n_featuresÚweightsrˆ   rl   r   ©rm   rˆ   )r   r"   r•   r”   )r   r,   r-   r.   r/   r   r4   r   r	   ÚLogisticRegressionr   Ú
set_paramsr   rD   )r6   ZX_Zy_Úy_predr7   r7   r8   Útest_weightß  s"       ÿ
ýrÎ   Ú	estimatorç{®Gáz„?©ri   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´   rg   rj   rœ   r‚   )rÌ   r-   r/   r    r[   ÚapproxrD   ©rÏ   r.   r�   rÍ   r7   r7   r8   Ú'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´   rg   g      ø?rj   rœ   r‚   )rÌ   r-   r/   r4   r[   rÒ   rD   rÓ   r7   r7   r8   Ú&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•   rÑ   rÐ   r€   )r   r,   r-   r.   r/   r0   rÌ   rB   r…   r`   r   )r6   Zdual_coef_no_weightr7   r7   r8   Ú$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€   ©r[   r\   r]   r-   r.   r/   )Ú	EstimatorÚerr_msgr�   Úestr7   r7   r8   Ú-test_negative_sample_weights_mask_all_samples4  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�   r6   r7   r7   r8   Ú.test_negative_weights_svc_leave_just_one_labelJ  s    
rà   zClassifier, modelg6<½R–Ù?rf   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_sider6   r7   r7   r8   Ú*test_negative_weights_svc_leave_two_labelsc  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/   rB   Úabsr<   r¡   r[   rÒ   rD   )rÛ   r�   rÝ   Zcoefr7   r7   r8   Ú!test_negative_weight_equal_coeffsx  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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)ÚclassesrV   r&   r'   rl   rÊ   rÅ   Úmacro)Zaverage)Zsklearn.linear_modelrË   Úsklearn.utilsrê   r?   r@   rA   rB   ÚdeleteÚaranger›   ÚwhereÚuniquer¯   rD   r   r,   r   r-   r4   rÌ   r
   r   )
rË   rê   r.   rV   Z
unbalancedrë   Zclass_weightsr6   rÍ   Zy_pred_balancedr7   r7   r8   Útest_auto_weightˆ  s0    ",
ýþý  ÿrò   c               	   C   sž  t d d… } t t¡� t ¡  t| ¡ W 5 Q R X t ¡ tjddd�fD ]x}t	 
t¡}|jd rdt‚t	 t	 t d¡j¡}|d d …df }|jd r–t‚|jd r¤t‚| ||¡ t| t¡tƒ qHt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!   rl   r   rÊ   ZC_CONTIGUOUS)r#   r"   ZF_CONTIGUOUSrO   r'   )r/   r[   r\   r]   r   r,   r-   r.   r   rB   ZasfortranarrayÚflagsrD   ZascontiguousarrayZtilerS   r   r4   r^   r   Z
lil_matrixrZ   rR   )ZY2r6   ZXfZyfZXtr7   r7   r8   Ú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Ø   )rB   ÚrandomÚRandomStateZfinforI   ÚmaxrŸ   r„   r   r,   r[   r\   r]   r-   )Úrngr†   Zfmaxr.   rV   r6   Úmsgr7   r7   r8   Ú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¬   rS   r   rJ   r?   r@   rA   rH   rB   rI   r5   r7   r7   r8   Ú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 )NrO   r'   r"   r   zSparse precomputedrØ   )r   r,   r   Ú
csr_matrixr[   r\   Ú	TypeErrorr-   )r6   Zsparse_gramr7   r7   r8   Ú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ü   rB   rZ   r   r   r-   r2   r@   r›   rD   r0   )r¢   rÀ   rä   r7   r7   r8   Ú%test_sparse_fit_support_vectors_emptyò  s    *ÿrÿ   ÚlossÚhingeÚsquared_hingeÚpenaltyÚl1Úl2rm   TFc              	   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   rm   rˆ   )r  r  )r  r  F)r  Tz<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%srØ   )r   r   r   r[   r\   r]   r-   )r   r  rm   r.   rV   r6   r7   r7   r8   Útest_linearsvc_parametersþ  s     
ÿþ
ýÿþr  c                  C   sì   t jd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 )Nrl   r   rÊ   r$   rX   r  r  Fr  r  T)r  rm   rˆ   r  r"   )r   r   r-   r.   r/   Úfit_interceptrD   r   r4   rS   r^   r   r3   r    rH   rµ   )r6   r¶   Úresr7   r7   r8   Útest_linearsvc  s,    
   ÿ þ
r
  c                  C   sÄ   t jddd� tjtj¡} t jdddd�}| tjtj¡ |  tj¡| tj¡k ¡ dks^t‚| j	|j	k 
¡ srt‚t| tj¡tj| tj¡dd�ƒ t tj|j	j¡|j }t|| tj¡ƒ d S )	Nrl   r   rÊ   Úcrammer_singer)rm   Úmulti_classrˆ   r;   r"   rƒ   )r   r   r-   r?   r@   rA   r4   rC   rD   r<   Úallr   rB   r¯   r    rR   rS   r3   r   )Zovr_clfZcs_clfZdec_funcr7   r7   r8   Útest_linearsvc_crammer_singer5  s    $
þr  c                  C   s  t tƒ} t | ¡}tjddd� tt¡}tjd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d�jtt|d�}| 	t
¡}tjt|dd�}tjt|dd�}	tjddddd� ||	¡}
|
 	t
¡}t||ƒ t|j|
jdd	ƒ d S )Nrl   r   rÊ   r}   éè  )rm   rˆ   r~   r   r€   r"   ru   r‚   rƒ   )r`   r.   rB   rq   r   r   r-   r/   r   r4   rS   r   r<   r   r„   r…   )r†   r‡   r6   Zclf_unitweightrˆ   r‰   Zlsvc_unflatZpred1rŠ   r‹   Z	lsvc_flatrM   r7   r7   r8   Útest_linearsvc_fit_sampleweightJ  sT    
   ÿ  þ   ÿ  þ
   ÿ þ

r  c                  C   sL   t ddd�\} }dD ]2}tjd|ddd� | |¡ | |¡}|dkst‚qd S )	Nr#   r   )Ú	n_classesrˆ   )TFrl   r  )rm   r  r  rˆ   r;   )r   r   r   r-   rp   rD   )r.   rV   r  Úaccr7   r7   r8   Útest_crammer_singer_binarym  s     ü ú ùÿ
r  c                  C   sŽ   t jt j } tjddd� t j| ¡}t|jƒtt jƒks<t	‚t
 | t j¡| k¡dksZt	‚| t j¡}t jt
 |d¡ }t|| t j¡ƒ d S )Nrl   r   rÊ   gš™™™™™é?r"   )r?   Ztarget_namesrA   r   r   r-   r@   ÚsetrF   rD   rB   rC   r4   r    r¯   r   )rA   r6   r¶   rL   r7   r7   r8   Útest_linearsvc_iris  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   rm   ri   r~   rˆ   r=   rX   r•   r!   r  )Zintercept_scalingrD   r  r-   r   r3   r   )Ú
classifierr.   rV   r6   Z
intercept1Z
intercept2r7   r7   r8   Ú'test_dense_liblinear_intercept_handlingŒ  s0    ù	
r  c                  C   sÈ   t jdd� 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dd� ||¡} |  |¡}| j ¡ | _| j	 ¡ | _	|  |¡}t||ƒ d S )Nrl   rn   r#   r"   r$   r   )r   r   r-   r?   r@   rA   r    r<   Úcopyr3   r   r   )r6   ÚvaluesZvalues2r.   rV   r7   r7   r8   Ú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@   rA   r«   r   r   r   r[   r\   r’   Ú__setattr__rB   rï   ÚRuntimeErrorr]   r<   Ú__setitem__)Zsvmsr6   r7   r7   r8   Útest_immutable_coef_propertyÆ  s    ûr  c                  C   sP   dd l } |  d¡}|  |  ¡ d d¡ tjddd�}| tt¡ |  |d¡ d S )Nr   r"   rl   )rm   Úverbose)	ÚosÚdupÚdup2Úpiper   r   r-   r.   r/   )r   Ústdoutr6   r7   r7   r8   Ú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 rP   rQ   rT   r7   r7   r8   r�   é  rŽ   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r»   )r(   r©   rˆ   r³   r&   r˜   rX   )r   r,   r   Úcloner-   r?   r@   rA   r   r0   r3   r   r4   r¬   r    )Zsvm_callableZ
svm_clonedZsvm_builtinr7   r7   r8   Ú#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 rP   r7   rT   r7   r7   r8   r�     rŽ   z%test_svc_bad_kernel.<locals>.<lambda>r'   )r   r,   r[   r\   r]   r-   r.   r/   )Zsvcr7   r7   r8   Ú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 rP   rQ   rT   r7   r7   r8   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,   r[   Úwarnsr   r-   rB   rZ   r.   r/   r  Ún_iter_rD   )ÚaÚwarning_msgr7   r7   r8   Ú 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,   r[   r\   Ú	Exceptionr4   r   )r.   r6   r7   r7   r8   Ú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_2r7   r7   r8   Útest_consistent_proba&  s
    r0  c               	   C   s´   t jdddd�} d}tjt|d�� |  tt¡ W 5 Q R X t| j	t
ƒsJt‚| j	dksXt‚t jd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 )Nrl   r   r#   )rm   rˆ   r   z@Liblinear failed to converge, increase the number of iterations.rØ   )r   r   r[   r)  r   r-   r.   r/   Ú
isinstancer*  rµ   rD   r   r?   r@   rA   )Úlsvcr,  rx   r7   r7   r8   Ú$test_linear_svm_convergence_warnings/  s    r3  c                  C   s‚   t j d¡ dd¡} t j d¡ d¡}tjdd�tjdd�tjdd�fD ]4}| | |¡ t	| 
| ¡t  | |j ¡ ¡|j ƒ qHd S )	Né   r‚   r$   é   r&   r'   rl   rn   )rB   rõ   rö   rž   r   r   r   r   r-   r   r4   rR   r<   r¡   r3   )r.   rV   rz   r7   r7   r8   Útest_svr_coef_signB  s    


ý ÿr6  c                  C   s,   t jddd�} |  tt¡ | jdks(t‚d S )Nrl   F)rm   r  r+   )r   r   r-   r.   r/   r3   rD   )r2  r7   r7   r8   Ú test_lsvc_intercept_scaling_zeroS  s    r7  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,   rE   rD   r-   r?   r@   rA   r©   r[   r\   r   r¬   )ÚGrù   r7   r7   r8   Útest_hasattr_predict_proba[  s    r9  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`   r4   rD   )r  r.   rV   rÏ   r6   r7   r7   r8   Ú&test_decision_function_shape_two_classs  s     ÿr:  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+   )rB   rZ   Úvstackr   r,   r-   r4   r   r    r¯   r_   ZreshapeÚminrD   r  )	r¢   rÀ   Zbase_pointsr£   rÁ   r6   rÍ   Zdeci_valZpred_class_deci_valr7   r7   r8   Útest_ovr_decision_function}  s(    "



üÿ	(


r=  Ú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-   r[   r\   r]   r4   )r>  r.   rV   r   r7   r7   r8   Ú!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"   r:   g    €„.Ar%   r»   )r(   r�   rˆ   r³   r?  Frƒ   T)r   rB   Zlinspacer<  r÷   ZmeshgridÚdictr-   r4   Zc_r¡   r    r  r¯   rD   )r>  r.   rV   ZxsZysZxxÚyyZcommon_paramsr   rL   Zdvr7   r7   r8   Útest_svc_ovr_tie_breakingµ  s@    ..   ÿÿþ ýÿþ ýrC  c                  C   s:   dgdggddg } }t  ¡ }| | |¡ t|jdƒ d S )Nr+   rg   r   r"   r˜   )r   r,   r-   r   Z_gammar�   r7   r7   r8   Útest_gamma_scaleÔ  s    rD  zSVM, params)r  r   rm   Úepsilon_insensitive©r   rm   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%   r}   r  )r~   r   r€   )r4   r    )rB   rZ   r‘   r;  Zhstackrq   r`   r   rÌ   r   r&  r-   rE   Úgetattrr   )rº   Úparamsr.   rV   ÚX2Úy2r�   Zbase_estimatorZest_no_weightZest_with_weightÚmethodZX_est_no_weightZX_est_with_weightr7   r7   r8   Ú&test_linearsvm_liblinear_sample_weightÜ  sV    ðí" ÿ

  ÿrM  Ú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_)
rB   rZ   rï   r®   rE   rD   r-   rO  r2   r›   )rN  r.   rV   rÝ   r7   r7   r8   Útest_n_support  s    rP  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   rQ  rR  )r1  ÚstrrD   r   rB   Zzerosr_   Úcount)ZX1rJ  Z
n_samples1Z
n_samples2ra   ÚiiZjjr7   r7   r8   Ústring_kernel,  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr'   r&   rO   r    N)rB   rZ   r   rR   rS   r-   rp   rD   rE   r   r    r4   )	rÛ   r@   r.   rV   rV  ra   Zsvc1Zsvc2Zsvc3r7   r7   r8   Ú"test_custom_kernel_not_array_input%  s$    (
rW  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_supportr[   r\   r]   r4   )r6   rù   r7   r7   r8   Ú-test_svc_raises_error_internal_representationK  s
    
rX  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*  ÚtyperD   r   r,   r«   r`   rB   rñ   r®   )rÏ   Zexpected_n_iter_typerY  r.   rV   Zn_iterr  r7   r7   r8   Útest_n_iter_libsvmX  s    r[  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/   r[   r)  ÚreÚescaperH  )rN  r6   rù   r7   r7   r8   Ú"test_svm_class_weights_deprecationy  s    
ÿrc  c              	   C   s:   | ƒ }d}t jtt |¡d�� | tt¡ W 5 Q R X d S )NzƒThe default value of `dual` will change from `True` to `'auto'` in 1.5. Set the value of `dual` explicitly to suppress the warning.rØ   )r[   r)  r`  ra  rb  r-   r.   r/   )rÛ   r   rù   r7   r7   r8   Ú"test_dual_auto_deprecation_warningˆ  s
    ÿrd  c                 C   sJ   t d| ddt t¡ƒ}|dks"t‚t d| ddt t¡jƒ}|dksFt‚d S )Nrl   r  r»   FT©r   rB   Zasarrayr.   rD   rS   rF  r7   r7   r8   Útest_dual_auto“  s    rf  c                  C   sl   t ddddt t¡ƒ} | dks"t‚t ddddt t¡ƒ} | dksDt‚t ddddt t¡jƒ} | d	ksht‚d S )
Nrl   r  r  r»   TrE  r  r  Fre  rn   r7   r7   r8   Útest_dual_auto_edge_cases�  s$        ÿ    
ÿrg  )ƒÚ__doc__ra  r]  ÚnumpyrB   r[   Znumpy.testingr   r   r   r   Zscipyr   Zsklearnr   r   r	   r
   r   Zsklearn.datasetsr   r   Zsklearn.exceptionsr   r   r   Zsklearn.metricsr   Zsklearn.metrics.pairwiser   Zsklearn.model_selectionr   Zsklearn.multiclassr   Zsklearn.svmr   r   r   r   r   r   Zsklearn.svm._classesr   rí   r   r   Zsklearn.utils._testingr   Zsklearn.utils.validationr   r.   r/   rS   r^   Z	load_irisr?   rø   ZpermutationrA   r›   Úpermr@   r9   rN   re   rs   r|   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/  r0  r3  r6  r7  r9  r:  r=  r@  rC  rD  rM  rP  rW  rX  Zndarrayrµ   r[  rc  rd  rf  rg  r7   r7   r7   r8   Ú<module>   sl   (

PI+	!

 

û÷ýýø
ôýþú&ý  ÿý
$&
#%!

,

ùþ
/

%

ûþ
ýþ



	