U
    3dҹ                     @   s  d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl"m(Z( ddl)m*Z* ddl)m+Z+m,Z, ddl-m.Z. ddlm/Z/ ddgddgddgddgddgddggZ0ddddddgZ1ddgddgddggZ2dddgZ3e4 Z5e#dZ6e67e5j8j9Z:e5j;e: e5_;e5j8e: e5_8dd Z<dd Z=dd  Z>d!d" Z?d#d$ Z@d%d& ZAd'd( ZBd)d* ZCd+d, ZDd-d. ZEd/d0 ZFd1d2 ZGd3d4 ZHejIJd5ejKejLfd6d7 ZMd8d9 ZNd:d; ZOejIJd<ejKd=d>eL gd?d@ ZPejIJd<ejd=d>ejd=d>gdAdB ZQdCdD ZRejIjJdEejKdFfejLdGfejdFfejdFfejdFfgdHdIdJdKdLgdMejIjJdNdgeSe1 dOgeSe1 gdPdQgdMdRdS ZTejIjJdTejKdUfejLdVfgdHdIgdMejIjJdNddWddddgdddddXdOggdYdZgdMd[d\ ZUejIjJd]ejKd^d_gd_d`gdafejLdbdbgdbdbgdafgdHdIgdMejIjJdcddWddddgddfddddddgdefgdfdggdMdhdi ZVejIjJdjejKejLejgdHdIdKgdMejIjJdNddWddddgddddddggdfdggdMdkdl ZWe%e,dmdndo ZXdpdq ZYdrds ZZdtdu Z[dvdw Z\dxdy Z]ejIJdzd{d|gejIJd}d~dgejIJdddgdd Z^dd Z_dd Z`dd Zadd Zbdd ZcejfddZddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zke%dd Zldd Zmdd Zndd Zodd Zpdd Zqdd ZrejIJdejKejLgdd ZsejIJdejKejLgdd Ztdd ZuejIJded~d|ddfedd|ddfedd|ddfedd{ddfedddfedddfedddfgdd ZvejIJdeeefdd ZwejIJdjejKejgdd Zxdd ZyejIJdejKejzfejLejzfeje{feje{feje{fgejIJdeddddčeddddčeddddčgddǄ Z|ejIJdeeeg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OneClassSVMSVRNuSVR	LinearSVR)train_test_split)make_classification
make_blobs)f1_score)
rbf_kernel)check_random_state)ignore_warnings)_num_samples)shuffle)ConvergenceWarning)NotFittedErrorUndefinedMetricWarning)OneVsRestClassifier)_libsvm         *   c                  C   sp   t jddtt} t| jddgg t| jddg t| jtd td f t| j	dg t| 
tt d S )Nlinearkernel      п      ?r!   r#           )r   SVCfitXYr   
dual_coef_support_support_vectors_
intercept_predictclf r6   >/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/svm/tests/test_svm.pytest_libsvm_parameters/   s    r8   c               	   C   s  dD ]R} t j| dtjtj}t|tjtjkdks@t	t
|d| dkkst	qt|jt|j ttjtjtj\	}}}}}}}}	}
|||||||d}tjtjf|}t|tjkdkst	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st	tjtjtjtjd	dd
d}t|| d S )N)r%   rbfr&   ?coef_r%   )ZsupportZSVZnSVZsv_coefZ	interceptZprobAZprobBgffffff?r'      r   r'   Zrandom_seed)r   r+   r,   irisdatatargetnpmeanr3   AssertionErrorhasattrr   classes_sortr   astypefloat64cross_validation)kr5   Zlibsvm_supportZlibsvm_support_vectorsZlibsvm_n_class_SVZlibsvm_sv_coefZlibsvm_interceptZlibsvm_probAZlibsvm_probBZlibsvm_fit_statusZlibsvm_n_iterZmodel_paramspredpred2r6   r6   r7   test_libsvm_iris9   s~     		        rM   c               	   C   s  t jdd} ttttj}| |t ttttj}| 	|}t
t | 	|j W 5 Q R X t| jddgg t| jddg t| jdg t| jddg t|t t|}tttD ],}| jD ] }tt| t| |||f< qq| 	|}t|t dd	 }t j|d} | ttt | 	t}t| jddgg t| jdg t| jddg t|t t jdd} t jd
d}ttjtjj}| |tj |tjtj | 	|}t| j|j t| j|j t| j|j tt|tjkddd t|}tttjD ]4}| jD ]&}ttj| tj| |||f< q0q&| 	|}tt|tjkddd t j|d} | tjtj tt|tjkddd d S )Nprecomputedr&   r(   r)   r!   r#   r   c                 S   s   t | |jS NrA   dotTxyr6   r6   r7   kfunc   s    ztest_precomputed.<locals>.kfuncr%   gGz?r"   decimal)r   r+   rA   rQ   r-   arrayrR   r,   r.   r3   pytestraises
ValueErrorr   r/   r0   r2   r   true_resultZ
zeros_likerangelenr>   r?   r@   r   rB   )r5   KKTrK   ijrV   Zclf2r6   r6   r7   test_precomputed   sZ    



 






(
rd   c                  C   s   t  } tjddddtjddddtjdddtjddtjddfD ],}|| j| j |	| j| jdksHt
qHt | jtt| j t | jtt| j d S )	Nr%   皙?      ?)r'   nuC      $@r'   rh   rh   g{Gz?)r	   load_diabetesr   r   r   r   r,   r?   r@   scorerC   rA   onesr_   )diabetesr5   r6   r6   r7   test_svr   s    

rp   c                  C   s   t  } tjdd| j| j}|| j| j}tjddd| j| j}|| j| j}t	t
j|jt
j|jdd t||d d S )N     @@rk   r%   rj   r!   -C6?r"   )r	   rl   r   r   r,   r?   r@   rm   r   r   rA   linalgnormr;   r   )ro   lsvrscore1svrscore2r6   r6   r7   test_linearsvr   s    "ry   c                  C   sH  t  } t| j}t|}tjddddj| j	| j|d}|
| j	| j}tjdddd| j	| j}|
| j	| j}ttj|jtj|jdd t||d td	}|d	d
|}tjddddj| j	| j|d}	|	j
| j	| j|d}
tj| j	|d	d}tj| j|d	d}tjdddd||}|
||}t|
|d d S )Nrq   -q=i'  )rh   tolmax_itersample_weightr!   rr   r"   r   
   Zaxis)r	   rl   r_   r@   rA   rn   r   r   r,   r?   rm   r   rs   rt   r;   r   r   randintrepeat)ro   	n_samplesunit_weightru   rv   Zlsvr_no_weightrx   random_staterandom_weightZlsvr_unflatZscore3X_flaty_flatZ	lsvr_flatZscore4r6   r6   r7   test_linearsvr_fit_sampleweight   sL    

          r   c               	   C   sT   dgdgg} ddg}t jdd d}|| | tt ||  W 5 Q R X d S )Nr*   rf   g      ?c                 S   s   t dggS )Nrf   )rA   rY   rS   r6   r6   r7   <lambda>"      z!test_svr_errors.<locals>.<lambda>r&   )r   r   r,   rZ   r[   r\   r3   r-   rU   r5   r6   r6   r7   test_svr_errors  s    r   c               	      s   t    t  t} t| dddg | jtdks@t	t
 jdgdd t
 jddddggdd tt  fdd	  W 5 Q R X d S )
Nr!   r    Zintpgrh|r#   rW   g      ?c                      s    j S rO   )r;   r6   r4   r6   r7   r   3  r   ztest_oneclass.<locals>.<lambda>)r   r   r,   r-   r3   rR   r   dtyperA   rC   r   r2   r/   rZ   r[   AttributeError)rK   r6   r4   r7   test_oneclass(  s    

r   c            
      C   s
  t  } td}d|dd }tj|d |d f }d|dd }tj|d |d f }|jdddd}t jd	d
d	d} | | | |}t	|dkdkst
| |}t	|dkdkst
| |}t|dk |dk | |}	t|	dk |dk d S )Nr"   333333?d         )r   r"   )lowhighsize皙?r9   )rg   r'   gammar!   r:   r    r   )r   r   r   randnrA   Zr_uniformr,   r3   rB   rC   decision_functionr   ravel)
r5   Zrndr-   X_trainX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr6   r6   r7   test_oneclass_decision_function6  s"    




r   c                  C   sT   ddgddgddgg} t jdd| }t|ddgg|ddgg|j  d S )Nr!   r"   r   g       @)r   r   r,   r   Zscore_samplesr   Zoffset_)r   r5   r6   r6   r7   test_oneclass_score_samplesT  s    r   c                  C   sr   t jddd} | tt t| jddgg t| ddggdg t	ddgg| _
t| ddggd	g d S )
Nr%   rf   rj   r(   r)   皙r!   r*   r"   )r   r+   r,   r-   r.   r   r/   r3   rA   rY   Z_dual_coef_r4   r6   r6   r7   test_tweak_params]  s    r   c                  C   s   t jddddt jdddfD ]} | tjtj | tj}tt	
|dt	tjjd  t	t	|d| tjkdkstt| tjt	| tjd qd S )	NTr   rf   )probabilityr   rh   )r   r   r!   r:      )r   r+   NuSVCr,   r>   r?   r@   predict_probar   rA   sumrn   shaperB   argmaxr3   rC   r   expZpredict_log_proba)r5   Zprob_predictr6   r6   r7   test_probabilityl  s     &
  r   c                  C   s*  t jddddtjtj} ttj| jj	| j
 }t|| tj | tt tt| jj	| j
 }| t}t| | t t|| j| tdkt  tddddd	d	g}t| t|d
 t jdddd} | tt tt| j| jd}t|| jj	| j
 }t| | t d S )Nr%   r   ovo)r'   rh   decision_function_shaper         gQgQ?rf   r"   r9   r!   )r'   r   r   r   )r   r+   r,   r>   r?   r@   rA   rQ   r;   rR   r2   r   r   r-   r.   r3   r   rE   rG   intrY   r   r1   r   r/   )r5   decZ
predictionexpectedrbfsr6   r6   r7   test_decision_function  s*     
 r   SVMc           	      C   s  | ddd tjtj}|tj}|jttjdfks<tt|	tjt
j|dd tddd	d
\}}t||d	d\}}}}| ddd ||}||}|jt|dfkstt|	|t
j|dd | ddd ||}||}|jt|dfkstd S )Nr%   ovrr'   r   r#   r!   r   P   r<   r   )r   centersr   r   r   r   )r,   r>   r?   r@   r   r   r_   rC   r   r3   rA   r   r   r   )	r   r5   r   r-   rU   r   r   y_trainy_testr6   r6   r7   test_decision_function_shape  s      

r   c                  C   s   t j} t j}tjddd| |}t| |jj	|j
 }t| ||   tjddd| |}t| |j|jd}t||jj	|j
 }t| ||   d S )Nr%   r   rj   r9   r!   )r'   r   r   )r>   r?   r@   r   r   r,   rA   rQ   r;   rR   r2   r   r   r3   r   r1   r   r/   )r-   rU   regr   r   r6   r6   r7   test_svr_predict  s    r   c                  C   s   t jddid} | tt t| tdgd  tdddd	gdd
\}}t	 t j
ddt  fD ]^} | jdddd | |d d |d d  | |dd  }t|dd  |dksdtqdd S )Nr!   r   Zclass_weightr"         r   g-?gK7A`?)r   
n_featuresweightsr   r   r   )r   r!   r   r   )r   r+   r,   r-   r.   r   r3   r   r   LogisticRegressionr   
set_paramsr   rC   )r5   ZX_Zy_y_predr6   r6   r7   test_weight  s"       

r   	estimator{Gz?rk   c                 C   s   ddgddgddgddgddgddgg}| j dd dgd }| j|t|d	 | d
dgg}|tdksptddddddg}| j|t|d	 | d
dgg}|dk 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   r}   r   rf   ri   r   r   )r   r,   r.   r   rZ   approxrC   r   r-   r~   r   r6   r6   r7   'test_svm_classifier_sided_sample_weight  s    (
r   c                 C   s   ddgddgddgddgddgddgg}| j dd dgd }| j|t|d	 | d
dgg}|tdksptddddddg}| j|t|d	 | d
dgg}|dk 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   r}   r   rf   g      ?ri   r   r   )r   r,   r.   r3   rZ   r   rC   r   r6   r6   r7   &test_svm_regressor_sided_sample_weight  s    (
r   c                  C   sR   t  } | tt | j}| jdd | jtttdt	td t
|| j d S )Nr   rk   r   r}   )r   r+   r,   r-   r.   r/   r   rA   r   r_   r   )r5   Zdual_coef_no_weightr6   r6   r7   $test_svm_equivalence_sample_weight_C  s    r   zEstimator, err_msgz:Invalid input - all samples have zero or negative weights.z6(negative dimensions are not allowed|nu is infeasible)r+   r   r   r   r   )idsr~   g333333ӿzweights-are-zerozweights-are-negativec              	   C   s8   | dd}t jt|d |jtt|d W 5 Q R X d S Nr%   r&   matchr}   rZ   r[   r\   r,   r-   r.   )	Estimatorerr_msgr~   estr6   r6   r7   -test_negative_sample_weights_mask_all_samples&  s    
r   zClassifier, err_msgzJInvalid input - all samples with positive weights belong to the same classzspecified nu is infeasibleg      r   zmask-label-1zmask-label-2c              	   C   s8   | dd}t jt|d |jtt|d W 5 Q R X d S r   r   )
Classifierr   r~   r5   r6   r6   r7   .test_negative_weights_svc_leave_just_one_label<  s    
r   zClassifier, modelg6<R?re   gj+?)	when-left
when-rightgioT?zsample_weight, mask_sider   r   zpartial-mask-label-1zpartial-mask-label-2c                 C   s4   | dd}|j tt|d t|j|| gdd d S )Nr%   r&   r}   MbP?)Zrtol)r,   r-   r.   r   r;   )r   modelr~   Z	mask_sider5   r6   r6   r7   *test_negative_weights_svc_leave_two_labelsS  s    
r   r   c                 C   sL   | dd}|j tt|d t|j }|d tj|d ddksHt	d S )Nr%   r&   r}   r   r!   r   )rel)
r,   r-   r.   rA   absr;   r   rZ   r   rC   )r   r~   r   Zcoefr6   r6   r7   !test_negative_weight_equal_coeffsh  s    

r   )categoryc            
      C   s"  ddl m}  ddlm} tjd d d df tjd  }}tt	|j
t|dkd d d d }t|| }|d||| d}t|dksttjdd	tjdd
|  fD ]h}||| || |}|jdd ||| || |}	tj||ddtj||	ddkstqd S )Nr   )r   )compute_class_weightr"   r!   Zbalanced)classesrU   r%   r&   r   r   macro)Zaverage)Zsklearn.linear_modelr   sklearn.utilsr   r>   r?   r@   rA   deletearanger   whereuniquer   rC   r   r+   r   r,   r3   r   r
   r   )
r   r   r-   rU   Z
unbalancedr   Zclass_weightsr5   r   Zy_pred_balancedr6   r6   r7   test_auto_weightx  s0    ",

  r   c               	   C   s  t d d } tt t t|  W 5 Q R X t tjddfD ]x}t	
t}|jd rbtt	t	t dj}|d d df }|jd rt|jd rt||| t|tt qFtjdd}tt |tt  W 5 Q R X t tt }tt |tt W 5 Q R X t	tj}|t	t|t  tt |t W 5 Q R X t }|tt  tt || W 5 Q R X d S )	Nr    r   r   ZC_CONTIGUOUS)r"   r!   ZF_CONTIGUOUSrN   r&   )r.   rZ   r[   r\   r   r+   r,   r-   r   rA   ZasfortranarrayflagsrC   ZascontiguousarrayZtilerR   r   r3   r]   r   Z
lil_matrixrY   rQ   )ZY2r5   ZXfZyfZXtr6   r6   r7   test_bad_input  s4    
r   c               	   C   sx   t jd} d}t t jj}|| j|dfd }| jdd|d}t	 }d}t
jt|d ||| W 5 Q R X d S )Nr   r   r"   )r   z2The dual coefficients or intercepts are not finiter   )rA   randomRandomStateZfinforH   maxr   r   r   r+   rZ   r[   r\   r,   )rngr   Zfmaxr-   rU   r5   msgr6   r6   r7   test_svc_nonfinite_params  s    r   c                  C   sH   t jddd} | tt | t tjt	j
t	jtjdddd d S )Nr%   T)r'   r   r<   r   r=   )r   r+   r,   r-   r.   r   rR   r   rI   r>   r?   r@   rG   rA   rH   r4   r6   r6   r7   test_unicode_kernel  s    
    r   c               	   C   sP   t jdd} tddgddgg}tjtdd | |ddg W 5 Q R X d S )NrN   r&   r!   r   zSparse precomputedr   )r   r+   r   
csr_matrixrZ   r[   	TypeErrorr,   )r5   Zsparse_gramr6   r6   r7   test_sparse_precomputed  s    r   c               	   C   s|   t ddddgddddgddddgddddgg} tddddg}tjdd}|| | |jjj	rjt
|jjj	rxt
d S )Nr   r!   g{Gz?r   g{Gz?r%   r&   )r   r   rA   rY   r   r   r,   r1   r?   r   rC   r/   )r   r   r   r6   r6   r7   %test_sparse_fit_support_vectors_empty  s    *r   losshingesquared_hingepenaltyl1l2dualTFc              	   C   s   t dddd\}}tj|| |dd}| |fdksJ| ||fdksJ||fdkr|tjtd|| |f d	 ||| W 5 Q R X n||| d S )
Nr<   r   )r   r   r   r   r   r  r   )r   r   )r   r  F)r   Tz<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%sr   )r   r   r   rZ   r[   r\   r,   )r   r   r  r-   rU   r5   r6   r6   r7   test_linearsvc_parameters  s     

r  c                  C   s   t jddtt} | jstt| t	t
 t| jdgdd t jdddddtt} t| t	t
 t jd	d
ddtt} t| t	t
 t jd	dd
dd} | tt t| t	t
 | t	}|dktd }t|t
 d S )Nr   r   r#   rW   r   r   Fr  r  T)r   r  r   r   r!   )r   r   r,   r-   r.   fit_interceptrC   r   r3   rR   r]   r   r2   r   rG   r   )r5   r   resr6   r6   r7   test_linearsvc  s,    
    
r  c                  C   s   t jddtjtj} t jddd}|tjtj | tj|tjk dksZt| j	|j	k
 sntt|tjtj|tjdd ttj|j	j|j }t||tj d S )Nr   r   crammer_singer)multi_classr   r:   r!   r   )r   r   r,   r>   r?   r@   r3   rB   rC   r;   allr   rA   r   r   rQ   rR   r2   r   )Zovr_clfZcs_clfZdec_funcr6   r6   r7   test_linearsvc_crammer_singer&  s    $
r  c                  C   s  t t} t| }tjddtt}tjddddjtt|d}t|	t
|	t
 t|j|jdd td}|dd	| }tjddddjtt|d}|	t
}tjt|dd
}tjt|dd
}	tjdddd||	}
|
	t
}t|| t|j|
jdd d S )Nr   r   rz     )r   r{   r|   r}   r!   rr   r   r   )r_   r-   rA   rn   r   r   r,   r.   r   r3   rR   r   r;   r   r   r   )r   r   r5   Zclf_unitweightr   r   Zlsvc_unflatZpred1r   r   Z	lsvc_flatrL   r6   r6   r7   test_linearsvc_fit_sampleweight;  s6    
    
 

r  c                  C   sJ   t ddd\} }dD ]0}tj|ddd| || |}|dkstqd S )Nr"   r   )	n_classesr   )TFr  )r  r	  r   r:   )r   r   r   r,   rm   rC   )r-   rU   r  accr6   r6   r7   test_crammer_singer_binary]  s      	r  c                  C   s   t jt j } tjddt j| }t|jtt jks:t	t
|t j| kdksXt	|t j}t jt
|d }t||t j d S )Nr   r   g?r!   )r>   Ztarget_namesr@   r   r   r,   r?   setrE   rC   rA   rB   r3   r   r   r   )r@   r5   r   rK   r6   r6   r7   test_linearsvc_irisn  s    r  c              	   C   s   ddgddgddgddgg}ddddg}| ddddd	d
dd}|j dksRt|j |js\td|_ ||| t|jddd d|_ ||| |j}|dk std|_ ||| |j}t||dd d S )Nr"   r!   r#   r   Tr   r   Fr   gHz>)r  r   r   r  rh   r{   r   r<   rW   r   r    r  )Zintercept_scalingrC   r  r,   r   r2   r   )
classifierr-   rU   r5   Z
intercept1Z
intercept2r6   r6   r7   'test_dense_liblinear_intercept_handling{  s0    	
r  c                  C   s   t  tjtj} | tj}| j | _| j	 | _	| tj}t
|| ddgddgddgddgg}ddddg}t  ||} | |}| j | _| j	 | _	| |}t|| d S )Nr"   r!   r#   r   )r   r   r,   r>   r?   r@   r   r;   copyr2   r   r   )r5   valuesZvalues2r-   rU   r6   r6   r7   test_liblinear_set_coef  s    


r  c               
   C   s   t jddtjtjt jddtjtjt jddtjtjt jddtjtjt j	ddtjg} | D ]T}t
t |dtd W 5 Q R X t
ttf |jdd W 5 Q R X qrd S )Nr%   r&   r;   r#   )r   r   r   )r   r+   r,   r>   r?   r@   r   r   r   r   rZ   r[   r   __setattr__rA   r   RuntimeErrorr\   r;   __setitem__)Zsvmsr5   r6   r6   r7   test_immutable_coef_property  s    r  c                  C   sN   dd l } | d}| |  d d tjdd}|tt | |d d S )Nr   r!   )verbose)	osdupdup2piper   r   r,   r-   r.   )r  stdoutr5   r6   r6   r7   test_linearsvc_verbose  s    
r"  c                  C   s   t jdd dddd} t| }|tjtj t jddddd}|tjtj t|j	|j	 t|j
|j
 t|tj|tj t|tj|tjdd	 t|tj|tj d S )
Nc                 S   s   t | |jS rO   rP   rS   r6   r6   r7   r     r   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r   )r'   r   r   r   r%   r   rW   )r   r+   r   cloner,   r>   r?   r@   r   r/   r2   r   r3   r   r   )Zsvm_callableZ
svm_clonedZsvm_builtinr6   r6   r7   #test_svc_clone_with_callable_kernel  s6    
   



r$  c               	   C   s6   t jdd d} tt | tt W 5 Q R X d S )Nc                 S   s   | S rO   r6   rS   r6   r6   r7   r     r   z%test_svc_bad_kernel.<locals>.<lambda>r&   )r   r+   rZ   r[   r\   r,   r-   r.   )Zsvcr6   r6   r7   test_svc_bad_kernel  s    r%  c               	   C   s^   t jdd dddd} d}tjt|d | ttt	 W 5 Q R X t
| jdksZtd S )	Nc                 S   s   t | |jS rO   rP   rS   r6   r6   r7   r     r   z2test_libsvm_convergence_warnings.<locals>.<lambda>Tr   r"   )r'   r   r   r|   zoSolver terminated early \(max_iter=2\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.r   )r   r+   rZ   warnsr   r,   rA   rY   r-   r.   r
  n_iter_rC   )awarning_msgr6   r6   r7    test_libsvm_convergence_warnings  s       r*  c               	   C   s`   d} t  }tjtdd ||  W 5 Q R X t  }tjtdd ||  W 5 Q R X d S )Nzfoo!z.*\bSVC\b.*\bnot\b.*\bfitted\br   z .*\bNuSVR\b.*\bnot\b.*\bfitted\b)r   r+   rZ   r[   	Exceptionr3   r   )r-   r5   r6   r6   r7   test_unfitted  s    r,  c                  C   sR   t jdddd} | ttt}t jdddd} | ttt}t|| d S )NTr!   r   )r   r|   r   )r   r+   r,   r-   r.   r   r   )r(  Zproba_1Zproba_2r6   r6   r7   test_consistent_proba  s
    r-  c               	   C   s   t jddd} d}tjt|d | tt W 5 Q R X t| j	t
sHt| j	dksVtt jddd}tjt|d |tjtj W 5 Q R X t|j	t
st|j	dkstd S )Nr   r"   )r   r|   z@Liblinear failed to converge, increase the number of iterations.r   )r   r   rZ   r&  r   r,   r-   r.   
isinstancer'  r   rC   r   r>   r?   r@   )lsvcr)  ru   r6   r6   r7   $test_linear_svm_convergence_warnings  s    r0  c                  C   s~   t jddd} t jdd}tjddtjddt fD ]4}|| | t	|
| t | |j |j  qDd S )N   r   r#      r%   r&   )rA   r   r   r   r   r   r   r   r,   r   r3   rQ   r;   r   r2   )r-   rU   rw   r6   r6   r7   test_svr_coef_sign1  s    " r3  c                  C   s*   t jdd} | tt | jdks&td S )NF)r  r*   )r   r   r,   r-   r.   r2   rC   )r/  r6   r6   r7    test_lsvc_intercept_scaling_zero>  s    r4  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 5 Q R X d S )NT)r   r   FzApredict_proba is not available when fitted with probability=Falser   )r   r+   rD   rC   r,   r>   r?   r@   r   rZ   r[   r   r   )Gr   r6   r6   r7   test_hasattr_predict_probaF  s    r6  c                  C   s`   dD ]V} t | dd\}}tjtjfD ]4}t|dd||}t||t|ks$tq$qd S )N)r"   r#   r   )r   r   r   )r   )	r   r   r+   r   r   r,   r_   r3   rC   )r  r-   rU   r   r5   r6   r6   r7   &test_decision_function_shape_two_class^  s     r7  c            	      C   sD  t ddgddgddgddgg} ddddg}t ddgddgg}t |ddg |ddg |ddg |ddg f}dgd dgd  dgd  dgd  }tjdd	d
}|| | ||}t|| ||}tt j	|dd| |t
d|f d}t |dkstt |d d df |d d df k s@td S )Nr!   r    r   r"   r#   r<   r   r%   r   r   r   r   )r   r"   r*   )rA   rY   vstackr   r+   r,   r3   r   r   r   r^   ZreshapeminrC   r
  )	r   r   Zbase_pointsr   r   r5   r   Zdeci_valZpred_class_deci_valr6   r6   r7   test_ovr_decision_functionh  s(    "



	(


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,   rZ   r[   r\   r3   )r;  r-   rU   r   r6   r6   r7   !test_svc_invalid_break_ties_param  s        r=  c                 C   sp  t dddd\}}t|dddf  |dddf  d}t|dddf  |dddf  d}t||\}}tdd	d
dd}| f ddi|||}|tj	|
 |
 f }	|tj	|
 |
 f }
t|	tj|
ddk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"   )r   r   r   Nr   r!   r9   g    .Ar$   r   )r'   r   r   r   r<  Fr   T)r   rA   Zlinspacer9  r   Zmeshgriddictr,   r3   Zc_r   r   r
  r   rC   )r;  r-   rU   xsZysZxxyyZcommon_paramsr   rK   Zdvr6   r6   r7   test_svc_ovr_tie_breaking  s@    ..     rA  c                  C   s:   dgdggddg } }t  }|| | t|jd d S )Nr*   rf   r   r!   r   )r   r+   r,   r   Z_gammar   r6   r6   r7   test_gamma_scale  s    rB  zSVM, params)r   r   r  Zepsilon_insensitive)r   r  Zsquared_epsilon_insensitivec                 C   s  t jddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddggt dd}t jddddddddddddddddgt dd}t ||g}t |d| g}t jt|d d}d	|t|d < t|||d	d
\}}}| dd
}|jf | |jddd t	
|||}t	
|j|||d}	dD ]8}
t||
rRt||
|}t|	|
|}t|| qRd S )Nr!   r#   r"   r   float)r   r   )r   r   r   r$   rz   r  )r{   r|   r}   )r3   r   )rA   rY   r   r8  Zhstackrn   r_   r   r   r   r#  r,   rD   getattrr   )r   paramsr-   rU   X2y2r~   Zbase_estimatorZest_no_weightZest_with_weightmethodZX_est_no_weightZX_est_with_weightr6   r6   r7   &test_linearsvm_liblinear_sample_weight  sV    " 

  rI  Klassc                 C   s|   t dgdgdgdgdgg}t |jd }|  }t|drBt||| |jd |jjd ksht|jj	dksxtd S )Nr   g)\(?g?gq=
ףp?r!   
n_support_)
rA   rY   r   r   rD   rC   r,   rK  r1   r   )rJ  r-   rU   r   r6   r6   r7   test_n_support  s    rL  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}t|D ]x}t||D ]h}| | d|| d |||f< |||f  | | d|| d 7  < |||f |||f< qFq8|S )Nr   rM  rN  )r.  strrC   r   rA   zerosr^   count)ZX1rF  Z
n_samples1Z
n_samples2r`   iiZjjr6   r6   r7   string_kernel  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr&   r%   rN   r   N)rA   rY   r   rQ   rR   r,   rm   rC   rD   r   r   r3   )	r   r?   r-   rU   rS  r`   Zsvc1Zsvc2Zsvc3r6   r6   r7   "test_custom_kernel_not_array_input  s$    (
rT  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 )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 alteredr   N)
r   r+   r,   r-   r.   Z
_n_supportrZ   r[   r\   r3   )r5   r   r6   r6   r7   -test_svc_raises_error_internal_representation6  s
    
rU  zestimator, expected_n_iter_typedataset)r  Zn_informativer   r   c                 C   sj   |\}}| dd ||j}t||ks,t| tjtjfkrftt	|}|j
||d  d fksftd S )Nr%   r&   r!   r"   )r,   r'  typerC   r   r+   r   r_   rA   r   r   )r   Zexpected_n_iter_typerV  r-   rU   Zn_iterr  r6   r6   r7   test_n_iter_libsvmC  s    rX  c              	   C   sd   |  }t   t dt |tt W 5 Q R X d}tjtt	
|d t|d W 5 Q R X d S )NerrorzRAttribute `class_weight_` was deprecated in version 1.2 and will be removed in 1.4r   Zclass_weight_)warningscatch_warningssimplefilterFutureWarningr,   r-   r.   rZ   r&  reescaperD  )rJ  r5   r   r6   r6   r7   "test_svm_class_weights_deprecationd  s    
r`  )~__doc__rZ  r^  ZnumpyrA   rZ   Znumpy.testingr   r   r   r   Zscipyr   Zsklearnr   r   r	   r
   r   Zsklearn.svmr   r   r   r   r   Zsklearn.model_selectionr   Zsklearn.datasetsr   r   Zsklearn.metricsr   Zsklearn.metrics.pairwiser   r   r   Zsklearn.utils._testingr   Zsklearn.utils.validationr   r   Zsklearn.exceptionsr   r   r   Zsklearn.multiclassr   r   r-   r.   rR   r]   Z	load_irisr>   r   Zpermutationr@   r   permr?   r8   rM   rd   rp   ry   r   r   r   r   r   r   r   r   markZparametrizer+   r   r   r   r   r   r   r   r_   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r"  r$  r%  r*  r,  r-  r0  r3  r4  r6  r7  r:  r=  rA  rB  rI  rL  rT  rU  Zndarrayr   rX  r`  r6   r6   r6   r7   <module>   sj  (

PI)	!

 

&  
$&
"%!

,


/

%


