B
    0d9                 @   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 dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ 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Z-ddddddgZ.ddgddgddggZ/dddgZ0e1 Z2e dZ3e34e2j5j6Z7e2j8e7 e2_8e2j5e7 e2_5dd Z9dd Z:d d! Z;d"d# Z<d$d% Z=d&d' Z>d(d) Z?d*d+ Z@d,d- ZAd.d/ ZBd0d1 ZCd2d3 ZDd4d5 ZEd6d7 ZFejGHd8ejIejJfd9d: ZKd;d< ZLd=d> ZMejGHd?ejId@dAeJ gdBdC ZNejGHd?ejOd@dAejPd@dAgdDdE ZQdFdG ZRejGjHdHejIdIfejJdJfejOdIfejPdIfejSdIfgdKdLdMdNdOgdPejGjHdQdgeTe. dRgeTe. gdSdTgdPdUdV ZUejGjHdWejIdXfejJdYfgdKdLgdPejGjHdQddZddddgddddd[dRggd\d]gdPd^d_ ZVejGjHd`ejIdadbgdbdcgddfejJdedegdedegddfgdKdLgdPejGjHdfddZddddgdgfddddddgdhfgdidjgdPdkdl ZWejGjHdmejIejJejPgdKdLdNgdPejGjHdQddZddddgddddddggdidjgdPdndo ZXe"e)dpdqdr ZYdsdt ZZejGHduejIej1dvdwfejJej1dvdwfejOej[dvdwfejPej[dvdwfejSej1dvdwfgdxdy Z\dzd{ Z]d|d} Z^d~d Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd ZfejfddZgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zne"dd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd ZvejGHdejIejJgdd ZwejGHdejIejJgdd Zxdd Zydd ZzejGHdeddddfedddvdfeddddfedddvdfeddvdfeddvdfeddvdfgdd Z{ddĄ Z|ejGHdmejIejOgddƄ Z}ddȄ 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)	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)kernelg      пg      ?r   r    g        )r   SVCfitXYr   
dual_coef_support_support_vectors_
intercept_predict)clf r.   L/var/www/html/venv/lib/python3.7/site-packages/sklearn/svm/tests/test_svm.pytest_libsvm_parameters/   s    r0   c              C   sf  xZdD ]R} t j| dtjtj}t|tjtjkdksBt	t
|d| dkkst	qW t|jt|j ttjtjtj}tjtjf| }t|tjkdkst	tjtjtjtjdd}tjtjf|ddi}t|tjkdkst	tjtjtjtjddd	d
}t|tjkdks8t	tjtjtjtjddd	d
}t|| d S )N)r"   rbf)r#   g?coef_r"   gffffff?r#      r   )r#   random_seed)r   r$   r%   irisdatatargetnpmeanr,   AssertionErrorhasattrr   classes_sortr   astypefloat64cross_validation)kr-   modelpredpred2r.   r.   r/   test_libsvm_iris9   s"    
 rE   c           	   C   s  t jdd} ttttj}| |t ttttj}| 	|}t
t | 	|j W d 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|}x@tttD ]0}x*| jD ] }tt| t| |||f< qW qW | 	|}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|}xJtttjD ]8}x0| jD ]&}ttj| tj| |||f< q<W q0W | 	|}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precomputed)r#   g      пg      ?r   r    r   c             S   s   t | |jS )N)r8   dotT)xyr.   r.   r/   kfunc|   s    ztest_precomputed.<locals>.kfuncr"   gGz?r   )decimal)r   r$   r8   rG   r&   arrayrH   r%   r'   r,   pytestraises
ValueErrorr   r(   r)   r+   r   true_resultZ
zeros_likerangelenr5   r6   r7   r   r9   )r-   KKTrC   ijrK   Zclf2r.   r.   r/   test_precomputed[   sZ    


$





,
rX   c              C   s   t  } xpt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sJt
qJW t | jtt| j t | jtt| j d S )	Nr"   g?g      ?)r#   nuCg      $@)r#   rZ   )rZ   g{Gz?)r	   load_diabetesr   NuSVRSVRr   r%   r6   r7   scorer:   r8   onesrS   )diabetesr-   r.   r.   r/   test_svr   s    
ra   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 )Ng     @@)rZ   r"   )r#   rZ   r   g-C6?r   )r	   r[   r   r   r%   r6   r7   r^   r]   r   r8   linalgnormr2   r   )r`   lsvrscore1svrscore2r.   r.   r/   test_linearsvr   s    "rh   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 )Ng     @@g-q=i'  )rZ   tolmax_iter)sample_weightr   g-C6?r   r   
   )axis)r	   r[   rS   r7   r8   r_   r   r   r%   r6   r^   r   rb   rc   r2   r   r   randintrepeat)r`   	n_samplesunit_weightrd   re   Zlsvr_no_weightrg   random_staterandom_weightZlsvr_unflatZscore3X_flaty_flatZ	lsvr_flatZscore4r.   r.   r/   test_linearsvr_fit_sampleweight   s.    

 rv   c           	   C   sT   dgdgg} ddg}t jdd d}|| | tt ||  W d Q R X d S )Ng        g      ?g      ?c             S   s   t dggS )Ng      ?)r8   rM   )rI   rJ   r.   r.   r/   <lambda>       z!test_svr_errors.<locals>.<lambda>)r#   )r   r]   r%   rN   rO   rP   r,   )r&   rJ   r-   r.   r.   r/   test_svr_errors   s    ry   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 d Q R X d S )
Nr   r   Zintpgrh|r    )rL   g      ?c                  s    j S )N)r2   r.   )r-   r.   r/   rw     rx   ztest_oneclass.<locals>.<lambda>)r   OneClassSVMr%   r&   r,   rH   r   dtyper8   r:   r   r+   r(   rN   rO   AttributeError)rC   r.   )r-   r/   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st
| |}t	|dkdkst
| |}t|dk |dk | |}	t|	dk |dk d S )Nr   g333333?d         )r   r   )lowhighsizeg?r1   )rY   r#   gammar   g?r   r   )r   rz   r   randnr8   Zr_uniformr%   r,   r9   r:   decision_functionr   ravel)
r-   Zrndr&   X_trainX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr.   r.   r/   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   rz   r%   r   Zscore_samplesr   Zoffset_)r   r-   r.   r.   r/   test_oneclass_score_samples&  s
    r   c           	   C   sT   t  } dd d}d|  d}tjtt|d | jt	f| W d Q R X d S )N )Zunused_paramZextra_paramzPassing additional keyword parameters has no effect and is deprecated in 1.0. An error will be raised from 1.2 and beyond. The ignored keyword parameter(s) are: .)match)
r   rz   keysrN   warnsFutureWarningreescaper%   r&   )r-   paramsmsgr.   r.   r/   &test_oneclass_fit_params_is_deprecated0  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"   g      ?)r#   rZ   g      пg      ?gr   g        r   )r   r$   r%   r&   r'   r   r(   r,   r8   rM   Z_dual_coef_)r-   r.   r.   r/   test_tweak_params?  s    r   c              C   s   xt 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stt| tjt	| tjd q W d S )	NTr   g      ?)probabilityrr   rZ   )r   rr   r   g?   )r   r$   NuSVCr%   r5   r6   r7   predict_probar   r8   sumr_   shaper9   argmaxr,   r:   r   expZpredict_log_proba)r-   Zprob_predictr.   r.   r/   test_probabilityN  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"   g?ovo)r#   rZ   decision_function_shaper   g      gQgQ?g      ?r   r1   r   )r#   r   r   )r   )r   r$   r%   r5   r6   r7   r8   rG   r2   rH   r+   r   r   r&   r'   r,   r   r<   r>   intrM   r   r*   r   r(   )r-   decZ
predictionexpectedrbfsr.   r.   r/   test_decision_functiona  s"    
r   SVMc       	   	   C   s4  | 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stt|	|t
j|dd | ddd ||}||}|jt|dfksttjtdd | dd || W d Q R X d S )Nr"   ovr)r#   r   r    r   )rm   P   r3   r   )rp   centersrr   )rr   r   rl   zmust be either 'ovr' or 'ovo')r   bad)r   )r%   r5   r6   r7   r   r   rS   r:   r   r,   r8   r   r   r   rN   rO   rP   )	r   r-   r   r&   rJ   r   r   y_trainy_testr.   r.   r/   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"   g?)r#   rZ   r1   r   )r#   r   )r   )r5   r6   r7   r   r]   r%   r8   rG   r2   rH   r+   r   r   r,   r   r*   r   r(   )r&   rJ   regr   r   r.   r.   r/   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
\}}x|t	 t j
ddt  fD ]^} | jdddd | |d d |d d  | |dd  }t|dd  |dksftqfW d S )Nr   g?)class_weightr         rl   g-?gK7A`?)rp   
n_featuresweightsrr   r   )rr   )r   r   r~   g333333?)r   r$   r%   r&   r'   r   r,   r   r   LogisticRegressionr   
set_paramsr   r:   )r-   ZX_Zy_y_predr.   r.   r/   test_weight  s    
r   	estimatorg{Gz?)rZ   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 stddddddg}| j|t|d	 | d
dgg}|dkstd S )Nr   r   r   r   r   r"   )r#   r   )rk   g      g      ?g      $@g?rl   )r   r%   r'   r   rN   approxr:   )r   r&   rk   r   r.   r.   r/   '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 stddddddg}| j|t|d	 | d
dgg}|dkstd S )Nr   r   r   r   r   r"   )r#   r   )rk   g      g      ?g      ?g      $@g?rl   )r   r%   r'   r,   rN   r   r:   )r   r&   rk   r   r.   r.   r/   &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~   )rZ   g{Gz?)rk   )r   r$   r%   r&   r'   r(   r   r8   ro   rS   r   )r-   Zdual_coef_no_weightr.   r.   r/   $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\   rz   )Zidsrk   g333333ӿzweights-are-zerozweights-are-negativec          	   C   s8   | dd}t jt|d |jtt|d W d Q R X d S )Nr"   )r#   )r   )rk   )rN   rO   rP   r%   r&   r'   )	Estimatorerr_msgrk   estr.   r.   r/   -test_negative_sample_weights_mask_all_samples  s    
r   zClassifier, err_msgzEInvalid input - all samples with positive weights have the same labelzspecified nu is infeasibleg      gzmask-label-1zmask-label-2c          	   C   s8   | dd}t jt|d |jtt|d W d Q R X d S )Nr"   )r#   )r   )rk   )rN   rO   rP   r%   r&   r'   )
Classifierr   rk   r-   r.   r.   r/   .test_negative_weights_svc_leave_just_one_label!  s    
r   zClassifier, modelg6<R?g?gj+?)z	when-leftz
when-rightgioT?zsample_weight, mask_sidez	when-leftz
when-rightz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#   )rk   gMbP?)Zrtol)r%   r&   r'   r   r2   )r   rB   rk   Z	mask_sider-   r.   r.   r/   *test_negative_weights_svc_leave_two_labels7  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#   )rk   r   r   gMbP?)rel)
r%   r&   r'   r8   absr2   r   rN   r   r:   )r   rk   r   Zcoefr.   r.   r/   !test_negative_weight_equal_coeffsL  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stxtjdd	tjdd
|  fD ]h}||| || |}|jdd ||| || |}	tj||ddtj||	ddkstqW d S )Nr   )r   )compute_class_weightr   r   Zbalanced)classesrJ   r"   )r#   )rr   )r   macro)Zaverage)Zsklearn.linear_modelr   sklearn.utilsr   r5   r6   r7   r8   deletearanger   whereuniquer   r:   r   r$   r   r%   r,   r   r
   r   )
r   r   r&   rJ   Z
unbalancedr   Zclass_weightsr-   r   Zy_pred_balancedr.   r.   r/   test_auto_weight\  s&    ",


r   c           	   C   s  t t tjddtt W d Q R X tjdd} t t | tt W d Q R X td d }t t | t| W d Q R X xt tj	ddfD ]x} t
t}|jd rtt
t
tdj}|d d df }|jd	 rt|jd rt| || t| tt qW tjd
d} t t | tt W d Q R X t tt} t t | tt W d Q R X t
tj}| t
t|t t t | t W d Q R X t } | tt t t | | W d Q R X d S )Nr   )rZ   g        )rY   r   )rr   ZC_CONTIGUOUS)r   r   ZF_CONTIGUOUSrF   )r#   )rN   rO   rP   r   r$   r%   r&   r'   r   r   r8   Zasfortranarrayflagsr:   ZascontiguousarrayZtilerH   r   r,   rQ   r   Z
lil_matrixrM   rG   )r-   ZY2ZXfZyfZXtr.   r.   r/   test_bad_input  s>    
r   zEstimator, dataT)Z
return_X_yc          	   C   s@   |\}}| dd}d}t jt|d ||| W d Q R X d S )NZauto_deprecated)r   z?When 'gamma' is a string, it should be either 'scale' or 'auto')r   )rN   rO   rP   r%   )r   r6   r&   rJ   r   r   r.   r.   r/   test_svm_gamma_error  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   r3   r   )r#   r4   )r   r$   r%   r&   r'   r   rH   r   r@   r5   r6   r7   r>   r8   r?   )r-   r.   r.   r/   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 d Q R X d S )NrF   )r#   r   r   zSparse precomputed)r   )r   r$   r   
csr_matrixrN   rO   	TypeErrorr%   )r-   Zsparse_gramr.   r.   r/   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{Gz?g?g{Gz?r"   )r#   )r   r   r8   rM   r   r]   r%   r*   r6   r   r:   r(   )r   r   rB   r.   r.   r/   %test_sparse_fit_support_vectors_empty  s    .r   c        	   
   C   s  ddddg} dddgdd	g }}t d
d
d\}}xt| ||D ]\}}}tj|||d}||fdks|||fdks||fdks|dks|dkrtjtd|||f d ||| W d Q R X q@||| q@W tjtdd tjdd|| W d Q R X d S )Nhingesquared_hingeZlogistic_regressionZfool1l2barTFr3   )rp   r   )penaltylossdual)r   r   )r   r   F)r   Tz<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%s)r   z.*loss='l3' is not supported.*l3)r   )	r   	itertoolsproductr   r   rN   rO   rP   r%   )	ZlossesZ	penaltiesZdualsr&   rJ   r   r   r   r-   r.   r.   r/   test_linearsvc_parameters  s$    r   c           	   C   s~   dgdggddg } }d}t jt|d tjdd| | W d Q R X d	}t jt|d tjd
d| | W d Q R X d S )Ng        g      ?r   r   z%loss='SQuared_hinge' is not supported)r   ZSQuared_hinge)r   zIThe combination of penalty='L2' and loss='squared_hinge' is not supportedZL2)r   )rN   rO   rP   r   r   r%   )r&   rJ   r   r.   r.   r/   4test_linear_svx_uppercase_loss_penality_raises_error  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   )rr   r    )rL   r   r   F)r   r   r   rr   r   T)r   r   rr   r   r   )r   r   r%   r&   r'   fit_interceptr:   r   r,   rH   rQ   r   r+   r   r>   r   )r-   r   resr.   r.   r/   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   )rr   crammer_singer)multi_classrr   g?r   )rm   )r   r   r%   r5   r6   r7   r,   r9   r:   r2   allr   r8   r   r   rG   rH   r+   r   )Zovr_clfZcs_clfZdec_funcr.   r.   r/   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   )rr   g-q=i  )rr   ri   rj   )rk   r   g-C6?rl   )rm   )rS   r&   r8   r_   r   r   r%   r'   r   r,   rH   r   r2   r   rn   ro   )rp   rq   r-   Zclf_unitweightrr   rs   Zlsvc_unflatZpred1rt   ru   Z	lsvc_flatrD   r.   r.   r/   test_linearsvc_fit_sampleweightB  s&    



r   c              C   sN   t ddd\} }x8dD ]0}tj|ddd| || |}|dkstqW d S )Nr   r   )	n_classesrr   )TFr   )r   r   rr   g?)r   r   r   r%   r^   r:   )r&   rJ   r   accr.   r.   r/   test_crammer_singer_binaryd  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   )rr   g?r   )r5   Ztarget_namesr7   r   r   r%   r6   setr<   r:   r8   r9   r,   r   r   r   )r7   r-   r   rC   r.   r.   r/   test_linearsvc_irisu  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 std|_ ||| |j}t||dd d S )Nr   r   r    r   Tr   r   Fr   gHz>)r   r   r   r   rZ   ri   rr   r3   )rL   r~   r   i  )intercept_scalingr:   r   r%   r   r+   r   )
classifierr&   rJ   r-   Z
intercept1Z
intercept2r.   r.   r/   'test_dense_liblinear_intercept_handling  s.    
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%   r5   r6   r7   r   r2   copyr+   r   r   )r-   valuesZvalues2r&   rJ   r.   r.   r/   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} x\| D ]T}t
t |dtd W d Q R X t
ttf |jdd W d Q R X qtW d S )Nr"   )r#   r2   r    )r   r   r   )r   r$   r%   r5   r6   r7   r   r]   r\   rz   rN   rO   r|   __setattr__r8   r   RuntimeErrorrP   r2   __setitem__)Zsvmsr-   r.   r.   r/   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  stdoutr-   r.   r.   r/   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 )N)r8   rG   rH   )rI   rJ   r.   r.   r/   rw     rx   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r   )r#   r   rr   r   r"   r   )rL   )r   r$   r   cloner%   r5   r6   r7   r   r(   r+   r   r,   r   r   )Zsvm_callableZ
svm_clonedZsvm_builtinr.   r.   r/   #test_svc_clone_with_callable_kernel  s(    



r
  c           	   C   s6   t jdd d} tt | tt W d Q R X d S )Nc             S   s   | S )Nr.   )rI   rJ   r.   r.   r/   rw     rx   z%test_svc_bad_kernel.<locals>.<lambda>)r#   )r   r$   rN   rO   rP   r%   r&   r'   )Zsvcr.   r.   r/   test_svc_bad_kernel  s    r  c           	   C   sJ   t jdd dddd} d}tjt|d | ttt	 W d Q R X d S )	Nc             S   s   t | |jS )N)r8   rG   rH   )rI   rJ   r.   r.   r/   rw     rx   ztest_timeout.<locals>.<lambda>Tr   r   )r#   r   rr   rj   zoSolver terminated early \(max_iter=1\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.)r   )
r   r$   rN   r   r   r%   r8   rM   r&   r'   )awarning_msgr.   r.   r/   test_timeout  s
    r  c           	   C   s`   d} t  }tjtdd ||  W d Q R X t  }tjtdd ||  W d Q R X d S )Nzfoo!z.*\bSVC\b.*\bnot\b.*\bfitted\b)r   z .*\bNuSVR\b.*\bnot\b.*\bfitted\b)r   r$   rN   rO   	Exceptionr,   r\   )r&   r-   r.   r.   r/   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   rj   rr   )r   r$   r%   r&   r'   r   r   )r  Zproba_1Zproba_2r.   r.   r/   test_consistent_proba  s
    r  c           	   C   s   t jddd} d}tjt|d | tt W d Q R X | jdksFt	t j
ddd}tjt|d |tjtj W d Q R X |jdkst	d S )Nr   r   )rr   rj   z@Liblinear failed to converge, increase the number of iterations.)r   )r   r   rN   r   r   r%   r&   r'   Zn_iter_r:   r   r5   r6   r7   )lsvcr  rd   r.   r.   r/   $test_linear_svm_convergence_warnings$  s    r  c              C   s   t jddd} t jdd}xVtjddtjddt gD ]4}|| | t	|
| t | |j |j  qFW d S )N   rl   r       r"   )r#   )r8   randomZRandomStater   r   r]   r\   r   r%   r   r,   rG   r2   r   r+   )r&   rJ   rf   r.   r.   r/   test_svr_coef_sign3  s    $r  c           
   C   sN   xHdD ]@} t j| d}d|j }tjt|d |tt W d Q R X qW d S )N)r   r   )r   zqIntercept scaling is %r but needs to be greater than 0. To disable fitting an intercept, set fit_intercept=False.)r   )	r   r   r   rN   rO   rP   r%   r&   r'   )rV   r  r   r.   r.   r/   !test_linear_svc_intercept_scaling@  s    
r  c              C   s*   t jdd} | tt | jdks&td S )NF)r   g        )r   r   r%   r&   r'   r+   r:   )r  r.   r.   r/    test_lsvc_intercept_scaling_zeroP  s    r  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std}t	j
t|d | tj W d Q R X d S )NT)r   r   FzApredict_proba is not available when fitted with probability=False)r   )r   r$   r;   r:   r%   r5   r6   r7   r   rN   rO   r   r   )Gr   r.   r.   r/   test_hasattr_predict_probaX  s    r  c              C   sh   xbdD ]Z} t | dd\}}xDtjtjgD ]4}t|dd||}t||t|ks(tq(W qW d S )N)r   r    r   )r   rr   r   )r   )	r   r   r$   r   r   r%   rS   r,   r:   )r   r&   rJ   r   r-   r.   r.   r/   &test_decision_function_shape_two_classp  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    r3   rl   r"   r   )r#   r   )rm   r   )r   r   g        )r8   rM   vstackr   r$   r%   r,   r   r   r   rR   Zreshapeminr:   r   )	r   r   Zbase_pointsr   r   r-   r   Zdeci_valZpred_class_deci_valr.   r.   r/   test_ovr_decision_functionz  s$    "


(


r  SVCClassc          	   C   sN   t dd\}}| ddddd||}tjtdd || W d Q R X d S )	Nr!   )rr   r"   r   T)r#   r   
break_tiesrr   zbreak_ties must be False)r   )r   r%   rN   rO   rP   r,   )r   r&   rJ   r   r.   r.   r/   !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rt| 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   )rr   rp   r   Nr~   r   r1   g    .Ar!   r   )r#   r   rr   r   r!  F)rm   T)r   r8   Zlinspacer  maxZmeshgriddictr%   r,   Zc_r   r   r   r   r:   )r   r&   rJ   ZxsZysZxxyyZcommon_paramsr   rC   Zdvr.   r.   r/   test_svc_ovr_tie_breaking  s(    ..r&  c           	   C   s   ddgddggddg } }t d }tjdd| | W d Q R X t|rPtt d }tjd	d| | W d Q R X t|rtd S )
Ng        g333333?g      ?g?r   r   r"   )r#   rF   )rN   r   r   r$   r%   rS   r:   )r&   rJ   recordr.   r.   r/   test_gamma_auto  s    r(  c           	   C   s   dgdggddg } }t  }td }|| | W d Q R X t|rLtt|jd ddgddt	
d d d ggddg } }td }|| | W d Q R X t|rtd S )	Ng        g      ?r   r   r   r   r    r   )r   r$   rN   r   r%   rS   r:   r   Z_gammar8   sqrt)r&   rJ   r-   r'  r.   r.   r/   test_gamma_scale  s    ,r*  zSVM, paramsr   r   F)r   r   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}	x@dD ]8}
t||
rTt||
|}t|	|
|}t|| qTW d S )Nr   r    r   r   float)r{   r   )r   r   )rr   r!   g-q=i  )ri   rj   )rk   )r,   r   )r8   rM   r{   r  Zhstackr_   rS   r   r   r   r	  r%   r;   getattrr   )r   r   r&   rJ   X2y2rk   Zbase_estimatorZest_no_weightZest_with_weightmethodZX_est_no_weightZX_est_with_weightr.   r.   r/   &test_linearsvm_liblinear_sample_weight  sH    0


r0  c              C   s   t dgdgdgdgdgg} t }t|dr4t||  |j|jj	d ksTt|jj
dksdt|jdksrtt | j	d }t | |}|j|jj	d kst|jj
dkst|jdkstd S )	Nr   g)\(?g?gq=
ףp?r   
n_support_r    r   )r8   rM   r   rz   r;   r:   r%   r1  r*   r   r   r   r]   )r&   r-   rJ   r   r.   r.   r/   test_n_support_oneclass_svr)  s    
r2  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st||||||kst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}xt|D ]|}xvt||D ]h}| | d|| d |||f< |||f  | | d|| d 7  < |||f |||f< qJW q:W |S )Nr   r3  r4  )
isinstancestrr:   r   r8   ZzerosrR   count)ZX1r-  Z
n_samples1Z
n_samples2rT   iiZjjr.   r.   r/   string_kernelC  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernel)r#   r"   rF   r   N)r8   rM   r   rG   rH   r%   r^   r:   r;   r   r   r,   )	r   r6   r&   rJ   r9  rT   Zsvc1Zsvc2Zsvc3r.   r.   r/   "test_custom_kernel_not_array_input<  s$    (
r:  c           	   C   sJ   t jddtt} d| jd< d}tjt|d | 	t W dQ R X dS )zCheck 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 altered)r   N)
r   r$   r%   r&   r'   Z
_n_supportrN   rO   rP   r,   )r-   r   r.   r.   r/   -test_svc_raises_error_internal_representationb  s
    
r;  )__doc__numpyr8   r   rN   r   Znumpy.testingr   r   r   r   Zscipyr   Zsklearnr   r   r	   r
   r   Zsklearn.svmr   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'   rH   rQ   Z	load_irisr5   rngZpermutationr7   r   Zpermr6   r0   rE   rX   ra   rh   rv   ry   r}   r   r   r   r   r   r   markZparametrizer$   r   r   r   r   r   r]   r\   r   r   rz   rS   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  r"  r&  r(  r*  r0  r2  r:  r;  r.   r.   r.   r/   <module>   s  (

"I)
!&*




&

%/
 "%!	
,2&