a
    ;Za9                     @   sl  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-g dZ.ddgddgddggZ/g d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/ ZAd0d1 ZBd2d3 ZCd4d5 ZDd6d7 ZEd8d9 ZFejGHd:ejIejJfd;d< ZKd=d> ZLd?d@ ZMejGHdAejIdBdCeJ gdDdE ZNejGHdAejOdBdCejPdBdCgdFdG ZQdHdI ZRejGjHdJejIdKfejJdLfejOdKfejPdKfejSdKfgg dMdNejGjHdOdgeTe. dPgeTe. gdQdRgdNdSdT ZUejGjHdUejIdVfejJdWfgdXdYgdNejGjHdOg dZg d[gd\d]gdNd^d_ ZVejGjHd`ejIdadbgdbdcgddfejJdedegdedegddfgdXdYgdNejGjHdfg dgdhfg didjfgdkdlgdNdmdn ZWejGjHdoejIejJejPgg dpdNejGjHdOg dgg digdkdlgdNdqdr ZXe"e)dsdtdu ZYdvdw ZZejGHdxejIej1dydzfejJej1dydzfejOej[dydzfejPej[dydzfejSej1dydzfgd{d| Z\d}d~ Z]dd Z^dd 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dddydfeddddfedddydfeddydfeddydfeddydfgddń Z{ddǄ Z|ejGHdoe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      )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 r3   9lib/python3.9/site-packages/sklearn/svm/tests/test_svm.pytest_libsvm_parameters/   s    r5   c                  C   sf  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}tjtjg|R  }t|tjkdksJ tjtjtjtjdd}tjtjg|R ddi}t|tjkdksJ tjtjtjtjddd	d
}t|tjkdks8J tjtjtjtjddd	d
}t
|| d S )N)r"   rbfr#   ?coef_r"   gffffff?r$      r   r$   Zrandom_seed)r   r(   r)   irisdatatargetnpmeanr0   hasattrr   classes_sortr   astypefloat64cross_validation)kr2   modelpredpred2r3   r3   r4   test_libsvm_iris9   s&     rJ   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< 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< 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r>   dotTxyr3   r3   r4   kfunc|   s    ztest_precomputed.<locals>.kfuncr"   gGz?r   Zdecimal)r   r(   r>   rN   r*   arrayrO   r)   r+   r0   pytestraises
ValueErrorr   r,   r-   r/   r   true_resultZ
zeros_likerangelenr;   r<   r=   r   r?   )r2   KKTrH   ijrS   Zclf2r3   r3   r4   test_precomputed[   sZ    
*


 






(
r`   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$   rd   rd   g{Gz?)r	   load_diabetesr   NuSVRSVRr   r)   r<   r=   scorer>   onesr[   )diabetesr2   r3   r3   r4   test_svr   s    

rn   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     @@rg   r"   rf   r   -C6?r   )r	   rh   r   r   r)   r<   r=   rk   rj   r   r>   linalgnormr8   r   )rm   lsvrscore1svrscore2r3   r3   r4   test_linearsvr   s    "rw   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 )Nro   -q=i'  )rd   tolmax_itersample_weightr   rp   r   r   
   Zaxis)r	   rh   r[   r=   r>   rl   r   r   r)   r<   rk   r   rq   rr   r8   r   r   randintrepeat)rm   	n_samplesunit_weightrs   rt   Zlsvr_no_weightrv   random_staterandom_weightZlsvr_unflatZscore3X_flaty_flatZ	lsvr_flatZscore4r3   r3   r4   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'   rb   g      ?c                 S   s   t dggS )Nrb   )r>   rU   rP   r3   r3   r4   <lambda>       z!test_svr_errors.<locals>.<lambda>r#   )r   rj   r)   rV   rW   rX   r0   )r*   rR   r2   r3   r3   r4   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 s0    Y  d S )	N)r   r   r   Zintpgrh|r    rT   )      ?r   r   r   c                      s    j S rL   )r8   r3   r1   r3   r4   r     r   ztest_oneclass.<locals>.<lambda>)r   OneClassSVMr)   r*   r0   rO   r   dtyper>   r   r/   r,   rV   rW   AttributeError)rH   r3   r1   r4   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sJ | |}t	|dkdksJ | 
|}t|dk |dk | 
|}	t|	dk |dk d S )Nr   333333?d         )r   r   )ZlowZhighsize皙?r6   )rc   r$   gammar   r7   r   r   )r   r   r   randnr>   Zr_Zuniformr)   r0   r?   decision_functionr   ravel)
r2   Zrndr*   X_trainX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr3   r3   r4   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   r2   r3   r3   r4   test_oneclass_score_samples&  s    r   c                  C   sl   t  } dd d}d|  d}tjtt|d" | jt	fi | W d    n1 s^0    Y  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   r   keysrV   warnsFutureWarningreescaper)   r*   )r2   paramsmsgr3   r3   r4   &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"   rb   rf   r%   r&   皙r   r'   r   )r   r(   r)   r*   r+   r   r,   r0   r>   rU   Z_dual_coef_r1   r3   r3   r4   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sJ t| tjt	| tjd qd S )	NTr   rb   )probabilityr   rd   )r   r   r   r7      )r   r(   NuSVCr)   r;   r<   r=   predict_probar   r>   sumrl   shaper?   argmaxr0   r   ZexpZpredict_log_proba)r2   Zprob_predictr3   r3   r4   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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$   rd   decision_function_shaper   )      gQr   gQ?rb   rb   r   r6   r   )r$   r   r   r   )r   r(   r)   r;   r<   r=   r>   rN   r8   rO   r/   r   r   r*   r+   r0   r   rA   rC   intrU   r   r.   r   r,   )r2   decZ
predictionZexpectedrbfsr3   r3   r4   test_decision_functiona  s&    
r   SVMc           	      C   sJ  | 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sJ t||t	j
|dd | ddd ||}||}|jt|dfksJ tjtdd" | dd || W d    n1 s<0    Y  d S )Nr"   ovrr$   r   r    r   r~   P   r9   r   )r   centersr   r   r   r}   zmust be either 'ovr' or 'ovo'r   Zbadr   )r)   r;   r<   r=   r   r   r[   r   r0   r>   r   r   r   rV   rW   rX   )	r   r2   r   r*   rR   r   r   y_trainy_testr3   r3   r4   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   rf   r6   r   )r$   r   r   )r;   r<   r=   r   rj   r)   r>   rN   r8   rO   r/   r   r   r0   r   r.   r   r,   )r*   rR   regr   r   r3   r3   r4   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-?gK7A`?)r   
n_featuresZweightsr   r   r   )r   r   r   r   )r   r(   r)   r*   r+   r   r0   r   r   LogisticRegressionr   
set_paramsr   )r2   ZX_Zy_y_predr3   r3   r4   test_weight  s    

r   	estimator{Gz?rg   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 sJ g d}| j|t|d	 | d
dgg}|dksJ d S )Nr   r   r   r   r   r"   r#   r   r{   r   rb   re   r   r   r   r   r}   rb   r   re   re   r   r   )r   r)   r+   r   rV   approxr   r*   r|   r   r3   r3   r4   '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 sJ g d}| j|t|d	 | d
dgg}|dksJ d S )Nr   r   r   r   r   r"   r#   r   r{   r   rb   g      ?r   r   )r   r)   r+   r0   rV   r   r   r3   r3   r4   &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   rg   r   r{   )r   r(   r)   r*   r+   r,   r   r>   r   r[   r   )r2   Zdual_coef_no_weightr3   r3   r4   $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   rj   ri   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#   r   r{   rV   rW   rX   r)   r*   r+   )	Estimatorerr_msgr|   estr3   r3   r4   -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 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|   r2   r3   r3   r4   .test_negative_weights_svc_leave_just_one_label!  s    
r   zClassifier, modelg6<R?ra   gj+?)	when-left
when-rightgioT?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*   r+   r   r8   )r   rG   r|   Z	mask_sider2   r3   r3   r4   *test_negative_weights_svc_leave_two_labels7  s    
r   r   )r(   r   ri   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   )Zrel)	r)   r*   r+   r>   absr8   r   rV   r   )r   r|   r   Zcoefr3   r3   r4   !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sJ tjdd	tjdd
|  fD ]h}||| || |}|jdd ||| || |}	tj||ddtj||	ddksJ qd S )Nr   )r   )compute_class_weightr   r   Zbalanced)classesrR   r"   r#   r   r   Zmacro)Zaverage)Zsklearn.linear_modelr   sklearn.utilsr   r;   r<   r=   r>   deletearanger   whereuniquer   r   r(   r   r)   r0   r   r
   r   )
r   r   r*   rR   Z
unbalancedr   Zclass_weightsr2   r   Zy_pred_balancedr3   r3   r4   test_auto_weight\  s,    ",

r   c                  C   s  t t$ tjddtt W d    n1 s40    Y  tjdd} t t | tt W d    n1 sv0    Y  td d }t t | t| W d    n1 s0    Y  t tj	ddfD ]|} t
t}|jd rJ t
t
tdj}|d d df }|jd	 r&J |jd r6J | || t| tt qtjd
d} t t | tt W d    n1 s0    Y  t tt} t t  | tt W d    n1 s0    Y  t
tj}| t
t|t t t | t W d    n1 s00    Y  t } | tt t t | | W d    n1 sz0    Y  d S )Nr   rg   r'   )rc   r   r   ZC_CONTIGUOUS)r   r   ZF_CONTIGUOUSrK   r#   )rV   rW   rX   r   r(   r)   r*   r+   r   r   r>   ZasfortranarrayflagsZascontiguousarrayZtilerO   r   r0   rY   r   Z
lil_matrixrU   rN   )r2   ZY2ZXfZyfZXtr3   r3   r4   test_bad_input  s>    2**
,0*r   zEstimator, dataT)Z
return_X_yc                 C   sT   |\}}| dd}d}t jt|d ||| W d    n1 sF0    Y  d S )NZauto_deprecatedr   z?When 'gamma' is a string, it should be either 'scale' or 'auto'r   )rV   rW   rX   r)   )r   r<   r*   rR   r   r   r3   r3   r4   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   r9   r   r:   )r   r(   r)   r*   r+   r   rO   r   rE   r;   r<   r=   rC   r>   rD   r1   r3   r3   r4   test_unicode_kernel  s    
r   c                  C   sd   t jdd} tddgddgg}tjtdd  | |ddg W d    n1 sV0    Y  d S )NrK   r#   r   r   zSparse precomputedr   )r   r(   r   
csr_matrixrV   rW   	TypeErrorr)   )r2   Zsparse_gramr3   r3   r4   test_sparse_precomputed  s    r   c                  C   sh   t g dg dg dg dg} tg d}tjdd}|| | |jjj	rVJ |j
jj	rdJ d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   ){Gz?r   r   g{Gz?r"   r#   )r   r   r>   rU   r   rj   r)   r.   r<   r   r,   )r   r   rG   r3   r3   r4   %test_sparse_fit_support_vectors_empty  s    r   c            	   	   C   s$  g d} g dddg }}t ddd\}}t| ||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    q1 s0    Y  q8||| q8tjtdd$ tjdd|| W d    n1 s0    Y  d S )N)hingesquared_hingeZlogistic_regressionfoo)l1l2barTFr9   )r   r   penaltylossdual)r   r   )r   r   F)r   Tr   r  z<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%sr   z.*loss='l3' is not supported.*l3r  )	r   	itertoolsproductr   r   rV   rW   rX   r)   )	ZlossesZ	penaltiesZdualsr*   rR   r  r  r  r2   r3   r3   r4   test_linearsvc_parameters  s2    

,r
  c                  C   s   dgdggddg } }d}t jt|d$ tjdd| | W d    n1 sR0    Y  d	}t jt|d$ tjd
d| | W d    n1 s0    Y  d S )Nr'   rb   r   r   z%loss='SQuared_hinge' is not supportedr   ZSQuared_hinger  zIThe combination of penalty='L2' and loss='squared_hinge' is not supportedZL2)r  )rV   rW   rX   r   r   r)   )r*   rR   r   r3   r3   r4   4test_linear_svx_uppercase_loss_penality_raises_error  s    2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    rT   r   r   F)r  r  r  r   r   T)r  r  r   r   r   )r   r   r)   r*   r+   fit_interceptr   r0   rO   rY   r   r/   r   rC   r   )r2   r   resr3   r3   r4   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   r7   r   r~   )r   r   r)   r;   r<   r=   r0   r?   r8   allr   r>   r   r   rN   rO   r/   r   )Zovr_clfZcs_clfZdec_funcr3   r3   r4   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   rx     )r   ry   rz   r{   r   rp   r}   r~   )r[   r*   r>   rl   r   r   r)   r+   r   r0   rO   r   r8   r   r   r   )r   r   r2   Zclf_unitweightr   r   Zlsvc_unflatZpred1r   r   Z	lsvc_flatrI   r3   r3   r4   test_linearsvc_fit_sampleweightB  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   r7   )r   r   r   r)   rk   )r*   rR   r  Zaccr3   r3   r4   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: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_namesr=   r   r   r)   r<   setrA   r>   r?   r0   r   r   r   )r=   r2   r   rH   r3   r3   r4   test_linearsvc_irisu  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 sJ d|_ ||| |j}t||dd d S )Nr   r   r    r   r   r   r   Tr   r   Fr   gHz>r   )r  r  r  r  rd   ry   r   r9   rT   r   r   r  )intercept_scalingr  r)   r   r/   r   )Z
classifierr*   rR   r2   Z
intercept1Z
intercept2r3   r3   r4   '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;   r<   r=   r   r8   copyr/   r   r   )r2   valuesZvalues2r*   rR   r3   r3   r4   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 s0    Y  t
ttf |jdd W d    qr1 s0    Y  qrd S )Nr"   r#   r8   r    )r   r   r   )r   r(   r)   r;   r<   r=   r   rj   ri   r   rV   rW   r   __setattr__r>   r   RuntimeErrorrX   r8   __setitem__)Zsvmsr2   r3   r3   r4   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*   r+   )r$  stdoutr2   r3   r3   r4   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 rL   rM   rP   r3   r3   r4   r     r   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r   )r$   r   r   r   r"   r   rT   )r   r(   r   cloner)   r;   r<   r=   r   r,   r/   r   r0   r   r   )Zsvm_callableZ
svm_clonedZsvm_builtinr3   r3   r4   #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 rL   r3   rP   r3   r3   r4   r     r   z%test_svc_bad_kernel.<locals>.<lambda>r#   )r   r(   rV   rW   rX   r)   r*   r+   )Zsvcr3   r3   r4   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 d    n1 sP0    Y  d S )	Nc                 S   s   t | |jS rL   rM   rP   r3   r3   r4   r     r   ztest_timeout.<locals>.<lambda>Tr   r   )r$   r   r   rz   zoSolver terminated early \(max_iter=1\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.r   )
r   r(   rV   r   r   r)   r>   rU   r*   r+   )awarning_msgr3   r3   r4   test_timeout  s    r/  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(   rV   rW   	Exceptionr0   ri   )r*   r2   r3   r3   r4   test_unfitted  s    (r1  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   rz   r   )r   r(   r)   r*   r+   r   r   )r-  Zproba_1Zproba_2r3   r3   r4   test_consistent_proba  s
    r2  c                  C   s   t jddd} d}tjt|d | tt W d    n1 sB0    Y  | jdksZJ t j	ddd}tjt|d  |t
jt
j W d    n1 s0    Y  |jdksJ d S )Nr   r   )r   rz   z@Liblinear failed to converge, increase the number of iterations.r   )r   r   rV   r   r   r)   r*   r+   Zn_iter_r   r;   r<   r=   )lsvcr.  rs   r3   r3   r4   $test_linear_svm_convergence_warnings$  s    *.r4  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#   )r>   ZrandomZRandomStater   r   rj   ri   r   r)   r   r0   rN   r8   r   r/   )r*   rR   ru   r3   r3   r4   test_svr_coef_sign3  s    "r7  c               	   C   s^   dD ]T} t j| d}d|j }tjt|d |tt W d    q1 sN0    Y  q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  rV   rW   rX   r)   r*   r+   )r^   r3  r   r3   r3   r4   !test_linear_svc_intercept_scaling@  s    r8  c                  C   s*   t jdd} | tt | jdks&J d S )NF)r  r'   )r   r   r)   r*   r+   r/   )r3  r3   r3   r4    test_lsvc_intercept_scaling_zeroP  s    r9  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sJ d}tj	t
|d | tj W d    n1 s0    Y  d S )NT)r   r   FzApredict_proba is not available when fitted with probability=Falser   )r   r(   r@   r)   r;   r<   r=   r   rV   rW   r   r   )Gr   r3   r3   r4   test_hasattr_predict_probaX  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[   r0   )r  r*   rR   r   r2   r3   r3   r4   &test_decision_function_shape_two_classp  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    r9   r}   r   r   r    r"   r   r   r~   r   )r   r   r'   )r>   rU   vstackr   r(   r)   r0   r   r   r   rZ   Zreshapeminr  )	r   r   Zbase_pointsr   r   r2   r   Zdeci_valZpred_class_deci_valr3   r3   r4   test_ovr_decision_functionz  s(    "



	(


r?  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)   rV   rW   rX   r0   )r@  r*   rR   r   r3   r3   r4   !test_svc_invalid_break_ties_param  s    rB  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rJ | f ddi|||}|tj	|
 |
 f }	|tj	|
 |
 f }
t|	tj|
ddkslJ 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   r6   g    .Ar!   r   )r$   r   r   r   rA  Fr~   T)r   r>   Zlinspacer>  maxZmeshgriddictr)   r0   Zc_r   r   r  r   )r@  r*   rR   ZxsZysZxxZyyZcommon_paramsr   rH   Zdvr3   r3   r4   test_svc_ovr_tie_breaking  s6    ..rE  c                  C   s   ddgddggddg } }t d $}tjdd| | W d    n1 sN0    Y  t|rdJ t d $}tjd	d| | W d    n1 s0    Y  t|rJ d S )
Nr'   g333333?rb   g?r   r   r"   r#   rK   )rV   r   r   r(   r)   r[   )r*   rR   recordr3   r3   r4   test_gamma_auto  s    22rG  c                  C   s   dgdggddg } }t  }td }|| | W d    n1 sJ0    Y  t|r`J t|jd ddgddt	d d d ggddg } }td }|| | W d    n1 s0    Y  t|rJ d S )	Nr'   rb   r   r   r   r   r    r   )
r   r(   rV   r   r)   r[   r   Z_gammar>   Zsqrt)r*   rR   r2   rF  r3   r3   r4   test_gamma_scale  s    *,*rH  zSVM, paramsr   r   Fr  r   r   Z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!   rx   r  )ry   rz   r{   )r0   r   )r>   rU   r   r=  Zhstackrl   r[   r   r   r   r*  r)   r@   getattrr   )r   r   r*   rR   X2Zy2r|   Zbase_estimatorZest_no_weightZest_with_weightmethodZX_est_no_weightZX_est_with_weightr3   r3   r4   &test_linearsvm_liblinear_sample_weight  sP    

rM  c                  C   s   t dgdgdgdgdgg} t }t|dr4J ||  |j|jjd ksTJ |jj	dksdJ |jdksrJ t 
| jd }t | |}|j|jjd ksJ |jj	dksJ |jdksJ d S )	Nr   g)\(?g?gq=
ףp?r   
n_support_r    r   )r>   rU   r   r   r@   r)   rN  r.   r   r   r   rj   )r*   r2   rR   r   r3   r3   r4   test_n_support_oneclass_svr)  s    
rO  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sJ ||||||ksJ 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   rP  rQ  )
isinstancestrr   r>   ZzerosrZ   count)ZX1rK  Z
n_samples1Z
n_samples2r\   ZiiZjjr3   r3   r4   string_kernelC  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr#   r"   rK   r   N)r>   rU   r   rN   rO   r)   rk   r@   r   r   r0   )	r   r<   r*   rR   rU  r\   Zsvc1Zsvc2Zsvc3r3   r3   r4   "test_custom_kernel_not_array_input<  s$    (
rV  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 )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_supportrV   rW   rX   r0   )r2   r   r3   r3   r4   -test_svc_raises_error_internal_representationb  s
    
rW  )__doc__Znumpyr>   r  rV   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+   rO   rY   Z	load_irisr;   rngZpermutationr=   r   Zpermr<   r5   rJ   r`   rn   rw   r   r   r   r   r   r   r   r   r   ZmarkZparametrizer(   r   r   r   r   r   rj   ri   r   r   r   r[   r   r   r   r   r   r   rh   r   r   r   r   r
  r  r  r  r  r  r  r  r  r"  r)  r+  r,  r/  r1  r2  r4  r7  r8  r9  r;  r<  r?  rB  rE  rG  rH  rM  rO  rV  rW  r3   r3   r3   r4   <module>   sT  (
"I)
!

 


$/


 "%!

,


/
%