a
    �ù»j;Æ  ã                   @   s  d 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
mZmZmZmZ ddlmZ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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+m,Z,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Z0g d¢Z1ddgddgddggZ2g d¢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,d-„ ZFd.d/„ ZGd0d1„ ZHejI Jd2ejKejLf¡d3d4„ ƒZMd5d6„ ZNd7d8„ ZOejI Jd9ejKd:d;�e L¡ g¡d<d=„ ƒZPejI Jd9ejd:d;�ej"d:d;�g¡d>d?„ ƒZQd@dA„ ZRejIjJdBejKdCfejLdDfejdCfej"dCfej#dCfgg dE¢dF�ejIjJdGdgeSe1ƒ dHgeSe1ƒ gdIdJgdF�dKdL„ ƒƒZTejIjJdMejKdNfejLdOfgdPdQgdF�ejIjJdGg dR¢g dS¢gdTdUgdF�dVdW„ ƒƒZUejIjJdXejKdYdZgdZd[gd\œfejLd]d]gd]d]gd\œfgdPdQgdF�ejIjJd^g d_¢d`fg da¢dbfgdcddgdF�dedf„ ƒƒZVejIjJdgejKejLej"gg dh¢dF�ejIjJdGg d_¢g da¢gdcddgdF�didj„ ƒƒZWdkdl„ ZXejI Jdme-¡dndo„ ƒZYdpdq„ ZZdrds„ Z[ejI Jdte,¡dudv„ ƒZ\ejI Jdte,¡dwdx„ ƒZ]ejI Jdydzd{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jI ldž¡dŸd „ ƒZmd¡d¢„ Znd£d¤„ Zod¥d¦„ Zpd§d¨„ Zqd©dª„ Zrd«d¬„ ZsejI Jd­ejKejLg¡d®d¯„ ƒZtejI Jd­ejKejLg¡d°d±„ ƒZud²d³„ ZvejI Jd´e d}d{d�dµœfe d~d{d€dµœfe d~d{d�dµœfe d~dzd€dµœfe!d¶d€d·œfe!d¸d€d·œfe!d¸d€d·œfg¡d¹dº„ ƒZwejI Jd»e#ee"f¡d¼d½„ ƒZxejI JdgejKejg¡d¾d¿„ ƒZydÀdÁ„ ZzejI JdÂejKej{fejLej{f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 Jdyd{d¸g¡dÈdÉ„ ƒZ~dÊdË„ ZejI JdÌejKefejefg¡ejI JdÍej€e�dÎƒ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_allcloseÚassert_almost_equalÚassert_array_almost_equalÚassert_array_equal)ÚbaseÚdatasetsÚlinear_modelÚmetricsÚsvm)Ú
make_blobsÚmake_classificationÚmake_regression)ÚConvergenceWarningÚNotFittedError)Úf1_score)Ú
rbf_kernel)Útrain_test_split)ÚOneVsRestClassifier)ÚSVRÚ	LinearSVCÚ	LinearSVRÚNuSVRÚOneClassSVMÚ_libsvm)Ú_validate_dual_parameter)Úcheck_random_stateÚshuffle)Ú	_IS_32BITÚCSR_CONTAINERSÚLIL_CONTAINERS)Ú_num_sampleséþÿÿÿéÿÿÿÿé   é   )r#   r#   r#   r$   r$   r$   é   )r#   r$   r$   é*   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© r8   ú@E:\soccer\ml_env\Lib\site-packages\sklearn/svm/tests/test_svm.pyÚtest_libsvm_parameters7   s    r:   c               	   C   s¶  dD ]R} t j| d� tjtj¡}t | tj¡tjk¡dks@J ‚t	|dƒ| dkksJ ‚qt
|jt |j¡ƒ t tjtj tj¡¡\	}}}}}}}}	}
|||||||dœ}tjtjfi |¤Ž}t |tjk¡dksÖJ ‚tjtjtj tj¡dd�\	}}}}}}}}	}
|||||||dœ}tjtjfi |¤ddi¤Ž}t |tjk¡dk�sNJ ‚tjtjtj tj¡d	dd
d�}t |tjk¡dk�sˆJ ‚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Úmeanr5   Úhasattrr   Úclasses_Úsortr   ÚastypeÚfloat64Úcross_validation)Úkr7   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Úpred2r8   r8   r9   Útest_libsvm_irisA   sn     õù	õù	ÿÿrN   c                  C   sÎ  t jdd�} t tt t¡j¡}|  |t¡ t tt t¡j¡}|  	|¡}t
 t¡� |  	|j¡ W d   ƒ n1 sv0    Y  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< �qD�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©rC   ÚdotÚT©ÚxÚyr8   r8   r9   Úkfunc²   s    ztest_precomputed.<locals>.kfuncr'   g®Gáz®ï?r$   ©Údecimal)r
   r-   rC   rR   r/   ÚarrayrS   r.   r0   r5   ÚpytestÚraisesÚ
ValueErrorr   r1   r2   r4   r   Útrue_resultZ
zeros_likeÚrangeÚlenr@   rA   rB   r   rD   )r7   ÚKÚKTrL   ÚiÚjrW   Zclf2r8   r8   r9   Ú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�tjdd�fD ],}| | j| j¡ | 	| j| j¡dksHJ ‚qHt ¡  | jt
 t| jƒ¡¡ t ¡  | jt
 t| jƒ¡¡ d S )	Nr'   çš™™™™™Ù?ç      ð?)r)   ÚnuÚCç      $@©r)   ri   ©ri   g{®Gáz”?)r   Úload_diabetesr
   r   r   r   r.   rA   rB   ÚscorerC   Úonesr`   )Údiabetesr7   r8   r8   r9   Útest_svrÚ   s    

ûrq   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ç     @�@rl   r'   rk   r#   ç-Cëâ6?r$   )r   rm   r
   r   r.   rA   rB   rn   r   r   rC   ÚlinalgÚnormr=   r   )rp   ÚlsvrÚscore1ÚsvrÚscore2r8   r8   r9   Útest_linearsvrî   s    "rz   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 )Nrr   çê-�™—q=i'  )ri   ÚtolÚmax_iter©Úsample_weightr#   rs   r$   r   é
   ©Zaxis)r   rm   r`   rB   rC   ro   r
   r   r.   rA   rn   r   rt   ru   r=   r   r   ÚrandintÚrepeat)rp   Ú	n_samplesÚunit_weightrv   rw   Zlsvr_no_weightry   Úrandom_stateÚrandom_weightZlsvr_unflatZscore3ÚX_flatÚy_flatZ	lsvr_flatZscore4r8   r8   r9   Útest_linearsvr_fit_sampleweightü   s8    


ÿÿÿ
ÿ
ÿrŠ   c                  C   sh   dgdgg} ddg}t jdd„ d�}| | |¡ t t¡� | | ¡ W d   ƒ n1 sZ0    Y  d S )Nr,   rg   g      à?c                 S   s   t  dgg¡S )Nrg   )rC   rZ   rT   r8   r8   r9   Ú<lambda>*  ó    z!test_svr_errors.<locals>.<lambda>r(   )r
   r   r.   r[   r\   r]   r5   ©r/   rV   r7   r8   r8   r9   Útest_svr_errors%  s    rŽ   c                     s¢   t  ¡ ‰ ˆ  t¡ ˆ  t¡} t| g d¢ƒ | jt d¡ks>J ‚t	ˆ j
dgdd� t	ˆ jg d¢gdd� t t¡� ‡ fdd„ƒ  W d   ƒ n1 s”0    Y  d S )	N)r#   r"   r"   Zintpg°rh‘í|ó¿r%   rX   )ç      è?r�   r�   r�   c                      s   ˆ j S rP   )r=   r8   r6   r8   r9   r‹   ;  rŒ   ztest_oneclass.<locals>.<lambda>)r
   r   r.   r/   r5   rS   r   ÚdtyperC   r   r4   r1   r[   r\   ÚAttributeError)rL   r8   r6   r9   Útest_oneclass0  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¦J ‚|  |¡}t 	|dk¡dksÆJ ‚|  
|¡}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   ÚrandnrC   Zr_Úuniformr.   r5   rD   Údecision_functionr   Úravel)
r7   Zrndr/   ÚX_trainÚX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr8   r8   r9   Útest_oneclass_decision_function>  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¡   r7   r8   r8   r9   Útest_oneclass_score_samples\  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/   r0   r   r1   r5   rC   rZ   Z_dual_coef_r6   r8   r8   r9   Útest_tweak_paramse  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„J ‚t|  tj¡t	 |  tj¡¡dƒ qd S )	NTr   rg   )Úprobabilityr†   ri   )r¨   r†   r#   r<   é   )r
   r-   ÚNuSVCr.   r@   rA   rB   Úpredict_probar   rC   Úsumro   ÚshaperD   Úargmaxr5   r   ÚexpZpredict_log_proba)r7   Zprob_predictr8   r8   r9   Útest_probabilityt  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 g d¢¡}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¸å¿r³   g…ëQ¸å?rg   rg   r$   r;   r#   )r)   rœ   r²   r¤   )r
   r-   r.   r@   rA   rB   rC   rR   r=   rS   r4   r   rŸ   r/   r0   r5   r    rF   rH   ÚintrZ   r   r3   rœ   r1   )r7   ÚdecZ
predictionÚexpectedÚrbfsr8   r8   r9   Ú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<J ‚t| tj¡t	j
|dd�ƒ tddd	d
�\}}t||d	d�\}}}}| ddd�  ||¡}| |¡}|jt|ƒdfks´J ‚t| |¡t	j
|dd�ƒ | ddd�  ||¡}| |¡}|jt|ƒdfk�sJ ‚d S )Nr'   Úovr©r)   r²   r%   r#   r�   éP   r>   r   )r„   Úcentersr†   ©r†   r±   r€   )r.   r@   rA   rB   rŸ   r­   r`   r   r5   rC   r®   r   r   )	r¹   r7   rµ   r/   rV   r¡   r¢   Úy_trainÚy_testr8   r8   r9   Ú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@   rA   rB   r
   r   r.   rC   rR   r=   rS   r4   r   r    r5   r   r3   rœ   r1   )r/   rV   Úregrµ   r·   r8   r8   r9   Ú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sdJ ‚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/   r0   r   r5   r   r   ÚLogisticRegressionr   Ú
set_paramsr   )r7   ZX_Zy_Úy_predr8   r8   r9   Útest_weightÙ  s    ÿ

ýrÌ   Ú	estimatorç{®Gáz„?rl   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spJ ‚g d¢}| j|t|d	� |  d
dgg¡}|dk s¤J ‚g d¢}| j|t|d	� |  d
dgg¡}|dksØJ ‚d S )Nr!   r   r"   r$   r#   r'   r(   rÅ   r~   r³   rg   ©rj   r›   r›   r›   r›   r€   ©rg   r›   rj   rj   r›   r›   )rÊ   r.   r0   rŸ   r[   Úapprox©rÍ   r/   r   rË   r8   r8   r9   Ú'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spJ ‚g d¢}| j|t|d	� |  d
dgg¡}|dk s¤J ‚g d¢}| j|t|d	� |  d
dgg¡}|dksØJ ‚d S )Nr!   r   r"   r$   r#   r'   r(   rÅ   r~   r³   rg   g      ø?rÏ   rÐ   )rÊ   r.   r0   r5   r[   rÑ   rÒ   r8   r8   r9   Ú&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”   rl   rÎ   r~   )r
   r-   r.   r/   r0   r1   rÊ   rC   rƒ   r`   r   )r7   Zdual_coef_no_weightr8   r8   r9   Ú$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   ç333333Ó¿zweights-are-zerozweights-are-negativec                 C   sL   | dd�}t jt|d��  |jtt|d� W d   ƒ n1 s>0    Y  d S ©Nr'   r(   ©Úmatchr~   ©r[   r\   r]   r.   r/   r0   )Ú	EstimatorÚerr_msgr   Úestr8   r8   r9   Ú-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 infeasibler-   rª   )r   ç      à¿r   r#   r#   r#   )r#   r#   r#   r   r¦   rÖ   zmask-label-1zmask-label-2c                 C   sL   | dd�}t jt|d��  |jtt|d� W d   ƒ n1 s>0    Y  d S r×   rÚ   )Ú
ClassifierrÜ   r   r7   r8   r8   r9   Ú.test_negative_weights_svc_leave_just_one_labelD  s    
rá   zClassifier, modelg6<½R–Ù?rf   gÕçj+ö—Ù?)ú	when-leftú
when-rightgioð…ÉTÕ?zsample_weight, mask_side)r#   rß   r#   r#   r#   r#   râ   )r#   r#   r#   r   r#   r#   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/   r0   r   r=   )rà   Úmodelr   Z	mask_sider7   r8   r8   r9   Ú*test_negative_weights_svc_leave_two_labels]  s    
ræ   rÛ   )r-   rª   r   c                 C   sL   | dd�}|j tt|d� t |j¡ ¡ }|d tj|d dd�ksHJ ‚d S )Nr'   r(   r~   r   r#   rä   )Úrel)	r.   r/   r0   rC   Úabsr=   r    r[   rÑ   )rÛ   r   rÝ   Zcoefr8   r8   r9   Ú!test_negative_weight_equal_coeffsr  s    

ré   c            
      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˜J ‚tjdd	�tjdd
�| ƒ fD ]h}| || || ¡ |¡}|jdd� | || || ¡ |¡}	tj||dd�tj||	dd�ks´J ‚q´d S )Nr   )rÉ   )Úcompute_class_weightr$   r#   Zbalanced)ÚclassesrV   r'   r(   r¾   rÄ   Úmacro)Zaverage)Zsklearn.linear_modelrÉ   Úsklearn.utilsrê   r@   rA   rB   rC   ÚdeleteÚarangerš   ÚwhereÚuniquer®   r
   r-   r   r.   r5   rÊ   r	   r   )
rÉ   rê   r/   rV   Z
unbalancedrë   Zclass_weightsr7   rË   Zy_pred_balancedr8   r8   r9   Útest_auto_weight‚  s,    ",

ýþýÿrò   Úlil_containerc                 C   s  t d d… }t t¡�  t ¡  t|¡ W d   ƒ n1 s<0    Y  t ¡ tjdd�fD ]x}t	 
t¡}|jd rvJ ‚t	 t	 t d¡j¡}|d d …df }|jd r¨J ‚|jd r¶J ‚| ||¡ t| t¡tƒ qZtjdd�}t t¡� | tt ¡ W d   ƒ n1 �s0    Y  t ¡  tt ¡}t t¡� | | tƒ¡ W d   ƒ n1 �sX0    Y  t	 t¡j}| t	 t|¡t ¡ t t¡� | t¡ W d   ƒ n1 �s®0    Y  t ¡ }| tt ¡ t t¡� | |¡ W d   ƒ n1 �sø0    Y  d S )	Nr"   r   r¾   ZC_CONTIGUOUS)r$   r#   ZF_CONTIGUOUSrO   r(   )r0   r[   r\   r]   r
   r-   r.   r/   r   rC   ZasfortranarrayÚflagsZascontiguousarrayZtilerS   r   r5   r^   rZ   rR   )ró   ZY2r7   ZXfZyfZXtr8   r8   r9   Útest_bad_input¦  s4    .
,.*rõ   c                  C   sŒ   t j d¡} d}t  t j¡j}|| j|dfd� }| jdd|d�}t 	¡ }d}t
jt|d�� | ||¡ W d   ƒ n1 s~0    Y  d S )Nr   r€   r$   )rš   z2The dual coefficients or intercepts are not finiterØ   )rC   ÚrandomÚRandomStateZfinforI   Úmaxrž   r‚   r
   r-   r[   r\   r]   r.   )Úrngr„   Zfmaxr/   rV   r7   Úmsgr8   r8   r9   Ú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/   r0   r«   rS   r   rJ   r@   rA   rB   rH   rC   rI   r6   r8   r8   r9   Útest_unicode_kernelÛ  s    
ÿrü   Úcsr_containerc                 C   sb   t jdd�}| ddgddggƒ}tjtdd��  | |ddg¡ W d   ƒ n1 sT0    Y  d S )NrO   r(   r#   r   zSparse precomputedrØ   )r
   r-   r[   r\   Ú	TypeErrorr.   )rý   r7   Zsparse_gramr8   r8   r9   Útest_sparse_precomputedå  s    rÿ   c                 C   sf   | g d¢g d¢g d¢g d¢gƒ}t  g d¢¡}tjdd�}| ||¡ |jjjrTJ ‚|jjjrbJ ‚d S )N)r   r#   r   r   )r   r   r   r#   )r   r   r#   r   )ç{®Gáz¤?r   r›   g{®GázÄ?r'   r(   )	rC   rZ   r
   r   r.   r3   rA   rš   r1   )rý   r¡   r¿   rå   r8   r8   r9   Ú%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 d   ƒ qœ1 s„0    Y  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   r[   r\   r]   r.   )r  r  r  r/   rV   r7   r8   r8   r9   Útest_linearsvc_parametersø  s     
ÿþ
ýÿþ,r
  c                  C   sê   t jdd� tt¡} | jsJ ‚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%   rX   r  r  Fr	  r  T)r  r  r†   r  r#   )r
   r   r.   r/   r0   Úfit_interceptr   r5   rS   r^   r   r4   rŸ   rH   r´   )r7   rµ   Úresr8   r8   r9   Ú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sZJ ‚| j|jk 	¡ snJ ‚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@   rA   rB   r5   rD   r=   Úallr   rC   r®   rŸ   rR   rS   r4   r   )Zovr_clfZcs_clfZdec_funcr8   r8   r9   Ú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¾   r{   éè  )r†   r|   r}   r~   r#   rs   r€   r�   )r`   r/   rC   ro   r
   r   r.   r0   r   r5   rS   r   r=   r   r‚   rƒ   )r„   r…   r7   Zclf_unitweightr†   r‡   Zlsvc_unflatZpred1rˆ   r‰   Z	lsvc_flatrM   r8   r8   r9   Útest_linearsvc_fit_sampleweightD  s,    
ÿÿ
ÿ

r  c                  C   sJ   t ddd�\} }dD ]0}tj|ddd� | |¡ | |¡}|dksJ ‚qd S )Nr$   r   )Ú	n_classesr†   )TFr  )r  r  r†   r<   )r   r
   r   r.   rn   )r/   rV   r  Úaccr8   r8   r9   Útest_crammer_singer_binaryg  s    ýûúÿ	r  c                  C   sŒ   t jt j } tjdd� t j| ¡}t|jƒtt jƒks:J ‚t	 
| t j¡| k¡dksXJ ‚| t j¡}t jt	 |d¡ }t|| t j¡ƒ d S )Nr   r¾   gš™™™™™é?r#   )r@   Ztarget_namesrB   r
   r   r.   rA   ÚsetrF   rC   rD   r5   rŸ   r®   r   )rB   r7   rµ   rL   r8   r8   r9   Útest_linearsvc_irisx  s    r  c              	   C   sÈ   ddgddgddgddgg}g d¢}| ddddd	d
dd�}|j dksNJ |j ƒ‚|jsXJ ‚d|_ | ||¡ t|jddd� d|_ | ||¡ |j}|dk sžJ ‚d|_ | ||¡ |j}t||dd� d S )Nr$   r#   r%   ©r   r   r#   r#   Tr  r  Fr—   gH¯¼šò×z>r   )r  r  r  r  ri   r|   r†   r>   rX   r”   r"   r  )Zintercept_scalingr  r.   r   r4   r   )Ú
classifierr/   rV   r7   Z
intercept1Z
intercept2r8   r8   r9   Ú'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}g d¢}t  ¡  ||¡} |  |¡}| j ¡ | _| j	 ¡ | _	|  |¡}t||ƒ d S )Nr$   r#   r%   r  )r
   r   r.   r@   rA   rB   rŸ   r=   Úcopyr4   r   r   )r7   ÚvaluesZvalues2r/   rV   r8   r8   r9   Ú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¡�" | dt d¡¡ W d   ƒ n1 s¨0    Y  t
 ttf¡� |j dd¡ W d   ƒ qr1 sä0    Y  qrd S )Nr'   r(   r=   r%   )r   r   r   )r
   r-   r.   r@   rA   rB   rª   r   r   r   r[   r\   r‘   Ú__setattr__rC   rï   ÚRuntimeErrorr]   r=   Ú__setitem__)Zsvmsr7   r8   r8   r9   Útest_immutable_coef_property¿  s    û0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/   r0   )r$  Ústdoutr7   r8   r8   r9   Ú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   r8   r8   r9   r‹   â  rŒ   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   rº   )r)   r¨   r†   r²   r'   r—   rX   )r
   r-   r   Úcloner.   r@   rA   rB   r   r1   r4   r   r5   r«   rŸ   )Zsvm_callableZ
svm_clonedZsvm_builtinr8   r8   r9   Ú#test_svc_clone_with_callable_kernelÞ  s0    ü
ÿ

ý

þr+  c                  C   sJ   t jdd„ d�} t t¡� |  tt¡ W d   ƒ n1 s<0    Y  d S )Nc                 S   s   | S rP   r8   rT   r8   r8   r9   r‹      rŒ   z%test_svc_bad_kernel.<locals>.<lambda>r(   )r
   r-   r[   r\   r]   r.   r/   r0   )Zsvcr8   r8   r9   Útest_svc_bad_kernelÿ  s    r,  c                  C   sr   t jdd„ dddd�} d}tjt|d��" |  t t¡t	¡ W d   ƒ n1 sP0    Y  t 
| jdk¡snJ ‚d S )	Nc                 S   s   t  | |j¡S rP   rQ   rT   r8   r8   r9   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.   rC   rZ   r/   r0   r  Ún_iter_)ÚaÚwarning_msgr8   r8   r9   Ú test_libsvm_convergence_warnings  s    ÿÿ0r1  c                  C   sˆ   d} t  ¡ }tjtdd�� | | ¡ W d   ƒ n1 s:0    Y  t  ¡ }tjtdd�� | | ¡ W d   ƒ n1 sz0    Y  d S )Nzfoo!z.*\bSVC\b.*\bnot\b.*\bfitted\brØ   z .*\bNuSVR\b.*\bnot\b.*\bfitted\b)r
   r-   r[   r\   Ú	Exceptionr5   r   )r/   r7   r8   r8   r9   Útest_unfitted  s    (r3  z-ignore::sklearn.exceptions.ConvergenceWarningc                  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/   r0   r«   r   )r/  Zproba_1Zproba_2r8   r8   r9   Útest_consistent_proba  s
    r4  c                  C   sØ   t jddd�} d}tjt|d�� |  tt¡ W d   ƒ n1 sB0    Y  t| j	t
ƒs\J ‚| j	dksjJ ‚t jddd�}tjt|d��  | tjtj¡ W d   ƒ n1 s¬0    Y  t|j	t
ƒsÆJ ‚|j	dksÔJ ‚d S )Nr   r$   )r†   r}   z@Liblinear failed to converge, increase the number of iterations.rØ   )r
   r   r[   r-  r   r.   r/   r0   Ú
isinstancer.  r´   r   r@   rA   rB   )Úlsvcr0  rv   r8   r8   r9   Ú$test_linear_svm_convergence_warnings(  s    *.r7  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(   )rC   rö   r÷   r�   r
   r   r   r   r.   r   r5   rR   r=   r    r4   )r/   rV   rx   r8   r8   r9   Útest_svr_coef_sign;  s    

ýÿr:  c                  C   s*   t jdd�} |  tt¡ | jdks&J ‚d S )NF)r  r,   )r
   r   r.   r/   r0   r4   )r6  r8   r8   r9   Ú test_lsvc_intercept_scaling_zeroL  s    r;  c                  C   sÆ   t jdd�} t| dƒsJ ‚|  tjtj¡ t| dƒs8J ‚t jdd�} t| dƒrRJ ‚|  tjtj¡ t| dƒrpJ ‚d| _t| dƒs„J ‚d}tj	t
|d�� |  tj¡ W d   ƒ n1 s¸0    Y  d S )NT)r¨   r«   FzApredict_proba is not available when fitted with probability=FalserØ   )r
   r-   rE   r.   r@   rA   rB   r¨   r[   r\   r   r«   )ÚGrú   r8   r8   r9   Útest_hasattr_predict_probaT  s    r=  c                  C   s`   dD ]V} t | dd�\}}tjtjfD ]4}t|dd�ƒ ||¡}t| |¡ƒt|ƒks$J ‚q$qd S )N)r$   r%   r   )r½   r†   rº   )r²   )r   r
   r-   rª   r   r.   r`   r5   )r  r/   rV   rÍ   r7   r8   r8   r9   Ú&test_decision_function_shape_two_classl  s    ÿr>  c            	      C   s@  t  ddgddgddgddgg¡} g d¢}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J ‚t  |d d …df |d d …df k ¡�s<J ‚d S )Nr#   r"   )r   r#   r$   r%   r>   r€   r   r$   r%   r'   rº   r»   r�   r©   )r—   r$   r,   )rC   rZ   Úvstackr
   r-   r.   r5   r   rŸ   r®   r_   ZreshapeÚminr  )	r¡   r¿   Zbase_pointsr¢   rÀ   r7   rË   Zdeci_valZpred_class_deci_valr8   r8   r9   Útest_ovr_decision_functionv  s(    "



üÿ	(


rA  ÚSVCClassc                 C   sb   t dd�\}}| ddddd� ||¡}tjtdd�� | |¡ W d   ƒ n1 sT0    Y  d S )	Nr&   r¾   r'   r±   T)r)   r²   Ú
break_tiesr†   zbreak_ties must be FalserØ   )r   r.   r[   r\   r]   r5   )rB  r/   rV   r
   r8   r8   r9   Ú!test_svc_invalid_break_ties_param¢  s    ÿþrD  c                 C   sŠ  | j dkrtrt d¡ 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J ‚| f ddi|¤Ž ||¡}| tj| ¡ | ¡ f ¡}	| tj| ¡ | ¡ f ¡}
t |	tj|
d	d�k¡�s†J ‚dS )zyTest if predict breaks ties in OVR mode.
    Related issue: https://github.com/scikit-learn/scikit-learn/issues/8277
    rª   zFailing test on 32bit OSr   r•   r$   )r†   r„   rÇ   Nr”   r#   r;   g    €„.Ar&   rº   )r)   rœ   r†   r²   rC  Fr�   T)Ú__name__r   r[   Zxfailr   rC   Zlinspacer@  rø   ZmeshgridÚdictr.   r5   Zc_r    rŸ   r  r®   )rB  r/   rV   ZxsZysÚxxÚyyZcommon_paramsr
   rL   Zdvr8   r8   r9   Útest_svc_ovr_tie_breaking®  s:    
..ÿÿþýÿþýrI  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�   r8   r8   r9   Útest_gamma_scaleÔ  s    rJ  zSVM, params)r  r  r  Úepsilon_insensitive©r  r  Zsquared_epsilon_insensitivec                 C   sx  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g d¢t  d¡d�}t  ||g¡}t  |d| g¡}t jt|ƒd d	�}d
|t|ƒd …< t|||d
d�\}}}| dd�}|jf i |¤Ž |jddd� t	 
|¡ ||¡}t	 
|¡j|||d�}	dD ]8}
t||
ƒ�r:t||
ƒ|ƒ}t|	|
ƒ|ƒ}t||ƒ �q:d S )Nr#   r%   r$   r—   Úfloat)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~   )r5   rŸ   )rC   rZ   r�   r?  Zhstackro   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_weightr8   r8   r9   Ú&test_linearsvm_liblinear_sample_weightÜ  sP    ðíÿ

ÿrS  ÚKlassc                 C   s|   t  dgdgdgdgdgg¡}t  |jd ¡}| ƒ }t|dƒrBJ ‚| ||¡ |jd |jjd kshJ ‚|jjdksxJ ‚d S )Nr   g)\�Âõ(Ü?gÍÌÌÌÌÌÜ?gq=
×£pÝ?r#   Ú
n_support_)	rC   rZ   rï   r­   rE   r.   rU  r3   rš   )rT  r/   rV   rÝ   r8   r8   r9   Útest_n_support  s    rV  c           	      C   sh  g d¢}t  ddgddgddgddgddgg¡}t  g d¢¡}dd„ }|||ƒ}tt  ||j¡|ƒ | |d� ||¡}| d	d� ||¡}| d
d� ||¡}| ||¡| ||¡ks¶J ‚| ||¡| ||¡ksÒJ ‚t|dƒ�r8t| 	|¡| 	|¡ƒ t| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ t| 
|¡| 
|¡ƒ n,t| 
|¡| 
|¡ƒ t| 
|¡| 
|¡ƒ dS )zETest using a custom kernel that is not fed with array-like for floats)zA AÚAÚBzB BzA Br$   r   r#   )r#   r#   r$   r$   r#   c              	   S   s¶   t | d tƒsJ ‚t| ƒ}t|ƒ}t ||f¡}t|ƒD ]x}t||ƒD ]h}| |  d¡||  d¡ |||f< |||f  | |  d¡||  d¡ 7  < |||f |||f< qFq8|S )Nr   rW  rX  )r5  Ústrr    rC   Zzerosr_   Úcount)ZX1rP  Z
n_samples1Z
n_samples2ra   ÚiiZjjr8   r8   r9   Ústring_kernel,  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr(   r'   rO   rŸ   N)rC   rZ   r   rR   rS   r.   rn   rE   r   rŸ   r5   )	rÛ   rA   r/   rV   r\  ra   Zsvc1Zsvc2Zsvc3r8   r8   r9   Ú"test_custom_kernel_not_array_input%  s$    (
r]  c                  C   s^   t jdd� tt¡} d| jd< d}tjt|d�� |  	t¡ W d  ƒ n1 sP0    Y  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/   r0   Z
_n_supportr[   r\   r]   r5   )r7   rú   r8   r8   r9   Ú-test_svc_raises_error_internal_representationK  s
    
r^  zestimator, expected_n_iter_typeÚdataset)r  Zn_informativer†   r—   c                 C   sj   |\}}| dd�  ||¡j}t|ƒ|ks,J ‚| tjtjfv rftt |¡ƒ}|j	||d  d fksfJ ‚d S )Nr'   r(   r#   r$   )
r.   r.  Útyper
   r-   rª   r`   rC   rñ   r­   )rÍ   Zexpected_n_iter_typer_  r/   rV   Zn_iterr  r8   r8   r9   Útest_n_iter_libsvmX  s    ra  c                 C   sJ   t d| ddt t¡ƒ}|du s"J ‚t d| ddt t¡jƒ}|du sFJ ‚d S )NÚautor  rº   FT©r   rC   Zasarrayr/   rS   rL  r8   r8   r9   Útest_dual_autox  s    rd  c                  C   sl   t ddddt t¡ƒ} | du s"J ‚t ddddt t¡ƒ} | du sDJ ‚t ddddt t¡jƒ} | d	u shJ ‚d S )
Nrb  r  r  rº   TrK  r  r  Frc  )r  r8   r8   r9   Útest_dual_auto_edge_cases‚  s    ÿÿre  zEstimator, make_datasetÚC_infÚinfc                 C   sL   ||d�\}}| |d�  ||¡}| dd�  ||¡}t| |¡| |¡ƒ dS )zªCheck that we can pass `C=inf` that is equivalent to a very large C value.

    Non-regression test for
    https://github.com/scikit-learn/scikit-learn/issues/29772
    r¾   rl   g    _ BN)r.   r   r5   )rÛ   Zmake_datasetrf  Zglobal_random_seedr/   rV   Zestimator_C_infZestimator_C_larger8   r8   r9   Útest_svm_with_infinite_C‘  s    rh  )ƒÚ__doc__ÚnumpyrC   r[   Znumpy.testingr   r   r   r   Zsklearnr   r   r   r	   r
   Zsklearn.datasetsr   r   r   Zsklearn.exceptionsr   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.fixesr   r   r   Zsklearn.utils.validationr    r/   r0   rS   r^   Z	load_irisr@   rù   ZpermutationrB   rš   ÚpermrA   r:   rN   re   rq   rz   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,  r1  r3  Úfilterwarningsr4  r7  r:  r;  r=  r>  rA  rD  rI  rJ  rS  rV  r]  r^  Zndarrayr´   ra  rd  re  rg  rM  rh  r8   r8   r8   r9   Ú<module>   sj   (
PI)	!

 

û÷ýýø
ôýþúýÿý$
&



#%!


,

%ùþ
/

%

ûþ
ýþ
	þ