o
    `^h                     @   s  d Z ddlZddlZddlmZmZmZmZ ddl	m
Z
mZmZmZmZ ddlmZmZmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/ ddgddgddgddgddgddggZ0g dZ1ddgddgddggZ2g dZ3e4 Z5e(d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,d- ZFd.d/ ZGd0d1 ZHejIJd2ejKejLfd3d4 ZMd5d6 ZNd7d8 ZOejIJd9ejKd:d;eL gd<d= ZPejIJd9ejd:d;ej"d:d;gd>d? ZQd@dA ZRejIjJdBejKdCfejLdDfejdCfej"dCfej#dCfgg dEdFejIjJdGdgeSe1 dHgeSe1 gdIdJgdFdKdL ZTejIjJdMejKdNfejLdOfgdPdQgdFejIjJdGg dRg dSgdTdUgdFdVdW ZUejIjJdXejKdYdZgdZd[gd\fejLd]d]gd]d]gd\fgdPdQgdFejIjJd^g d_d`fg dadbfgdcddgdFdedf ZVejIjJdgejKejLej"gg dhdFejIjJdGg d_g dagdcddgdFdidj ZWdkdl ZXejIJdme-dndo ZYdpdq ZZdrds Z[ejIJdte,dudv Z\ejIJdte,dwdx Z]ejIJdydzd{gejIJd|d}d~gejIJdddgdd Z^dd Z_dd Z`dd Zadd Zbdd Zcej fddZddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd ZkejIlddd Zmdd Zndd Zodd Zpdd Zqdd Zrdd ZsejIJdejKejLgdd ZtejIJdejKejLgdd Zudd ZvejIJde d}d{ddfe d~d{ddfe d~d{ddfe d~dzddfe!dddfe!dddfe!dddfgdd ZwejIJde#ee"fdd ZxejIJdgejKejgdd Zydd ZzejIJdejKej{fejLej{f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jIJdyd{dgddɄ Z~dd˄ ZejIJdejKefejefgejIJdejed΃gddЄ ZdS )zr
Testing for Support Vector Machine module (sklearn.svm)

TODO: remove hard coded numerical results when possible
    N)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)basedatasetslinear_modelmetricssvm)
make_blobsmake_classificationmake_regression)ConvergenceWarningNotFittedError)f1_score)
rbf_kernel)train_test_split)OneVsRestClassifier)SVR	LinearSVC	LinearSVRNuSVROneClassSVM_libsvm)_validate_dual_parameter)check_random_stateshuffle)	_IS_32BITCSR_CONTAINERSLIL_CONTAINERS)_num_samples      )r#   r#   r#   r$   r$   r$      )r#   r$   r$   *   c                  C   sp   t jddtt} t| jddgg t| jddg t| jtd td f t| j	dg t| 
tt d S )Nlinearkernel      п      ?r#   r%           )r
   SVCfitXYr   
dual_coef_support_support_vectors_
intercept_predictclf r8   X/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/sklearn/svm/tests/test_svm.pytest_libsvm_parameters7   s   r:   c               	   C   s  dD ])} t j| dtjtj}t|tjtjkdks J t	|d| dkks+J qt
|jt|j ttjtjtj\	}}}}}}}}	}
|||||||d}tjtjfi |}t|tjkdkskJ tjtjtjtjdd\	}}}}}}}}	}
|||||||d}tjtjfi |ddi}t|tjkdksJ tjtjtjtjd	dd
d}t|tjkdksJ tjtjtjtjd	dd
d}t
|| d S )N)r'   rbfr(   ?coef_r'   )supportSVnSVsv_coef	interceptprobAprobBgffffff?r)      r   r)   random_seed)r
   r-   r.   irisdatatargetnpmeanr5   hasattrr   classes_sortr   astypefloat64cross_validation)kr7   libsvm_supportlibsvm_support_vectorslibsvm_n_class_SVlibsvm_sv_coeflibsvm_interceptlibsvm_probAlibsvm_probBlibsvm_fit_statuslibsvm_n_itermodel_paramspredpred2r8   r8   r9   test_libsvm_irisA   sn    		r`   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 s;w   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< quqp| 	|}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 ]}| jD ]}ttj| tj| |||f< q"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      t | |jS NrK   dotTxyr8   r8   r9   kfunc   s   ztest_precomputed.<locals>.kfuncr'   gGz?r$   decimal)r
   r-   rK   re   r/   arrayrf   r.   r0   r5   pytestraises
ValueErrorr   r1   r2   r4   r   true_result
zeros_likerangelenrH   rI   rJ   r   rL   )r7   KKTr^   ijrj   clf2r8   r8   r9   test_precomputed   s`   










$
rz   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s:J q$t | jt
t| j t | jt
t| j d S )	Nr'   皙?      ?)r)   nuC      $@r)   r~   r~   g{Gz?)r   load_diabetesr
   r   r   r   r.   rI   rJ   scorerK   onesrt   )diabetesr7   r8   r8   r9   test_svr   s   

"r   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     @@r   r'   r   r#   -C6?r$   )r   r   r
   r   r.   rI   rJ   r   r   r   rK   linalgnormr=   r   )r   lsvrscore1svrscore2r8   r8   r9   test_linearsvr   s   "r   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 )Nr   -q=i'  )r~   tolmax_itersample_weightr#   r   r$   r   
   axis)r   r   rt   rJ   rK   r   r
   r   r.   rI   r   r   r   r   r=   r   r   randintrepeat)r   	n_samplesunit_weightr   r   lsvr_no_weightr   random_staterandom_weightlsvr_unflatscore3X_flaty_flat	lsvr_flatscore4r8   r8   r9   test_linearsvr_fit_sampleweight   s8   




r   c                  C   sj   dgdgg} ddg}t jdd d}|| | tt ||  W d    d S 1 s.w   Y  d S )Nr,   r|   g      ?c                 S   s   t dggS )Nr|   )rK   rm   rg   r8   r8   r9   <lambda>*      z!test_svr_errors.<locals>.<lambda>r(   )r
   r   r.   rn   ro   rp   r5   r/   ri   r7   r8   r8   r9   test_svr_errors%  s   "r   c                     s   t    t  t} t| g d | jtdksJ t	 j
dgdd t	 jg dgdd tt  fdd  W d    d S 1 sKw   Y  d S )	N)r#   r"   r"   intpgrh|r%   rk   )      ?r   r   r   c                      s    j S rc   )r=   r8   r6   r8   r9   r   ;  s    ztest_oneclass.<locals>.<lambda>)r
   r   r.   r/   r5   rf   r   dtyperK   r   r4   r1   rn   ro   AttributeError)r^   r8   r6   r9   test_oneclass0  s   

"r   c            
      C   s
  t  } td}d|dd }tj|d |d f }d|dd }tj|d |d f }|jdddd}t jd	d
d	d} | | | |}t	|dkdksSJ | |}t	|dkdkscJ | 
|}t|dk |dk | 
|}	t|	dk |dk d S )Nr$   333333?d         )r   r$   )lowhighsize皙?r;   )r}   r)   gammar#   r<   r"   r   )r
   r   r   randnrK   r_uniformr.   r5   rL   decision_functionr   ravel)
r7   rndr/   X_trainX_test
X_outliersy_pred_testy_pred_outliersdec_func_testdec_func_outliersr8   r8   r9   test_oneclass_decision_function>  s"   




r   c                  C   sT   ddgddgddgg} t jdd| }t|ddgg|ddgg|j  d S )Nr#   r$   r   g       @)r
   r   r.   r   score_samplesr   offset_)r   r7   r8   r8   r9   test_oneclass_score_samples\  s   r   c                  C   sr   t jddd} | tt t| jddgg t| ddggdg t	ddgg| _
t| ddggd	g d S )
Nr'   r|   r   r*   r+   皙r#   r,   r$   )r
   r-   r.   r/   r0   r   r1   r5   rK   rm   _dual_coef_r6   r8   r8   r9   test_tweak_paramse  s   r   c                  C   s   t jddddt jdddfD ]D} | tjtj | tj}tt	
|dt	tjjd  t	t	|d| tjkdksBJ t| tjt	| tjd qd S )	NTr   r|   )probabilityr   r~   )r   r   r#   r<      )r
   r-   NuSVCr.   rH   rI   rJ   predict_probar   rK   sumr   shaperL   argmaxr5   r   exppredict_log_proba)r7   prob_predictr8   r8   r9   test_probabilityt  s    &r   c                  C   s"  t jddddtjtj} ttj| jj	| j
 }t|| tj | tt tt| jj	| j
 }| t}t| | t t|| j| tdkt  tg d}t| t|d t jdd	dd
} | tt tt| j| jd}t|| jj	| j
 }t| | t d S )Nr'   r   ovo)r)   r~   decision_function_shaper   )      gQr   gQ?r|   r|   r$   r;   r#   )r)   r   r   r   )r
   r-   r.   rH   rI   rJ   rK   re   r=   rf   r4   r   r   r/   r0   r5   r   rN   rP   intrm   r   r3   r   r1   )r7   dec
predictionexpectedrbfsr8   r8   r9   test_decision_function  s&   
r   SVMc           	      C   s  | ddd tjtj}|tj}|jttjdfksJ t|tjt	j
|dd tddd	d
\}}t||d	d\}}}}| ddd ||}||}|jt|dfksZJ t||t	j
|dd | ddd ||}||}|jt|dfksJ d S )Nr'   ovrr)   r   r%   r#   r   P   rE   r   )r   centersr   r   r   r   )r.   rH   rI   rJ   r   r   rt   r   r5   rK   r   r   r   )	r   r7   r   r/   ri   r   r   y_trainy_testr8   r8   r9   test_decision_function_shape  s   

r   c                  C   s   t j} t j}tjddd| |}t| |jj	|j
 }t| ||   tjddd| |}t| |j|jd}t||jj	|j
 }t| ||   d S )Nr'   r   r   r;   r#   )r)   r   r   )rH   rI   rJ   r
   r   r.   rK   re   r=   rf   r4   r   r   r5   r   r3   r   r1   )r/   ri   regr   r   r8   r8   r9   test_svr_predict  s   r   c                  C   s   t jddid} | tt t| tdgd  tdddd	gdd
\}}t	 t j
ddt  fD ]/} | jdddd | |d d |d d  | |dd  }t|dd  |dksaJ q2d S )Nr#   r   class_weightr$         r   g-?gK7A`?)r   
n_featuresweightsr   r   r   )r   r#   r   r   )r
   r-   r.   r/   r0   r   r5   r   r   LogisticRegressionr   
set_paramsr   )r7   X_y_y_predr8   r8   r9   test_weight  s   

r   	estimator{Gz?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s8J g d}| j|t|d	 | d
dgg}|dk sRJ g d}| j|t|d	 | d
dgg}|dkslJ d S )Nr!   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   r   rn   approxr   r/   r   r   r8   r8   r9   'test_svm_classifier_sided_sample_weight     (
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s8J g d}| j|t|d	 | d
dgg}|dk sRJ g d}| j|t|d	 | d
dgg}|dkslJ d S )Nr!   r   r"   r$   r#   r'   r(   r   r   r   r|   g      ?r   r   )r   r.   r0   r5   rn   r   r   r8   r8   r9   &test_svm_regressor_sided_sample_weight
  r   r  c                  C   sR   t  } | tt | j}| jdd | jtttdt	td t
|| j d S )Nr   r   r   r   )r
   r-   r.   r/   r0   r1   r   rK   r   rt   r   )r7   dual_coef_no_weightr8   r8   r9   $test_svm_equivalence_sample_weight_C$  s   r  zEstimator, err_msgz:Invalid input - all samples have zero or negative weights.z6(negative dimensions are not allowed|nu is infeasible))r-   r   r   r   r   )idsr   333333ӿzweights-are-zerozweights-are-negativec                 C   N   | dd}t jt|d |jtt|d W d    d S 1 s w   Y  d S Nr'   r(   matchr   rn   ro   rp   r.   r/   r0   )	Estimatorerr_msgr   estr8   r8   r9   -test_negative_sample_weights_mask_all_samples.  s   
"r  zClassifier, err_msgzJInvalid input - all samples with positive weights belong to the same classzspecified nu is infeasibler-   r   )r         r   r#   r#   r#   )r#   r#   r#   r   r   r  zmask-label-1zmask-label-2c                 C   r  r  r
  )
Classifierr  r   r7   r8   r8   r9   .test_negative_weights_svc_leave_just_one_labelD  s   
"r  zClassifier, modelg6<R?r{   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?)rtol)r.   r/   r0   r   r=   )r  modelr   	mask_sider7   r8   r8   r9   *test_negative_weights_svc_leave_two_labels]  s   
r  r  )r-   r   r   c                 C   sL   | dd}|j tt|d t|j }|d tj|d ddks$J d S )Nr'   r(   r   r   r#   r  )rel)	r.   r/   r0   rK   absr=   r   rn   r   )r  r   r  coefr8   r8   r9   !test_negative_weight_equal_coeffsr  s   

"r  c            
      C   s"  ddl m}  ddlm} tjd d d df tjd }}tt	|j
t|dkd d d d }t|| }|d||| d}t|dksLJ tjdd	tjdd
|  fD ]4}||| || |}|jdd ||| || |}	tj||ddtj||	ddksJ qZd S )Nr   )r   )compute_class_weightr$   r#   balanced)classesri   r'   r(   r   r   macro)average)sklearn.linear_modelr   sklearn.utilsr  rH   rI   rJ   rK   deletearanger   whereuniquer   r
   r-   r   r.   r5   r   r	   r   )
r   r  r/   ri   
unbalancedr  class_weightsr7   r   y_pred_balancedr8   r8   r9   test_auto_weight  s.   ",

r+  lil_containerc                 C   s   t d d }tt t t| W d    n1 sw   Y  t tjddfD ]<}t	
t}|jd r;J t	t	t dj}|d d df }|jd rTJ |jd r[J ||| t|tt q-tjdd}tt |tt  W d    n1 sw   Y  t tt }tt || t W d    n1 sw   Y  t	tj}|t	t|t  tt |t W d    n1 sw   Y  t }|tt  tt || W d    d S 1 sw   Y  d S )	Nr"   r   r   C_CONTIGUOUS)r$   r#   F_CONTIGUOUSra   r(   )r0   rn   ro   rp   r
   r-   r.   r/   r   rK   asfortranarrayflagsascontiguousarraytilerf   r   r5   rq   rm   re   )r,  Y2r7   XfyfXtr8   r8   r9   test_bad_input  s>   
"r7  c                  C   s   t jd} d}t t jj}|| j|dfd }| jdd|d}t	 }d}t
jt|d ||| W d    d S 1 s@w   Y  d S )Nr   r   r$   )r   z2The dual coefficients or intercepts are not finiter  )rK   randomRandomStatefinforQ   maxr   r   r
   r-   rn   ro   rp   r.   )rngr   fmaxr/   ri   r7   msgr8   r8   r9   test_svc_nonfinite_params  s   "r?  c                  C   sH   t jddd} | tt | t tjt	j
t	jtjdddd d S )Nr'   T)r)   r   rE   r   rF   )r
   r-   r.   r/   r0   r   rf   r   rR   rH   rI   rJ   rP   rK   rQ   r6   r8   r8   r9   test_unicode_kernel  s   

r@  csr_containerc                 C   sd   t jdd}| ddgddgg}tjtdd ||ddg W d    d S 1 s+w   Y  d S )Nra   r(   r#   r   zSparse precomputedr  )r
   r-   rn   ro   	TypeErrorr.   )rA  r7   sparse_gramr8   r8   r9   test_sparse_precomputed  s
   "rD  c                 C   sf   | g dg dg dg dg}t g d}tjdd}||| |jjjr*J |jjjr1J d S )N)r   r#   r   r   )r   r   r   r#   )r   r   r#   r   ){Gz?rE  r   g{Gz?r'   r(   )	rK   rm   r
   r   r.   r3   rI   r   r1   )rA  r   r   r  r8   r8   r9   %test_sparse_fit_support_vectors_empty  s    rF  losshingesquared_hingepenaltyl1l2dualTFc                 C   s   t dddd\}}tj|| |dd}| |fdks%| ||fdks%||fdkrJtjtd|| |f d	 ||| W d    d S 1 sCw   Y  d S ||| d S )
NrE   r   )r   r   r   rJ  rG  rM  r   )rH  rK  )rH  rL  F)rK  Tz<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%sr  )r   r
   r   rn   ro   rp   r.   )rG  rJ  rM  r/   ri   r7   r8   r8   r9   test_linearsvc_parameters  s   "rO  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%   rk   rK  rI  FrN  rL  T)rJ  rM  r   rH  r#   )r
   r   r.   r/   r0   fit_interceptr   r5   rf   rq   r   r4   r   rP   r   )r7   r   resr8   r8   r9   test_linearsvc  s$   

rR  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s-J | j|jk	 s7J 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.   rH   rI   rJ   r5   rL   r=   allr   rK   r   r   re   rf   r4   r   )ovr_clfcs_clfdec_funcr8   r8   r9   test_linearsvc_crammer_singer/  s   $
rY  c                  C   s  t t} t| }tjddtt}tjddddjtt|d}t|	t
|	t
 t|j|jdd td}|dd	| }tjddddjtt|d}|	t
}tjt|dd
}tjt|dd
}	tjdddd||	}
|
	t
}t|| t|j|
jdd d S )Nr   r   r     )r   r   r   r   r#   r   r   r   )rt   r/   rK   r   r
   r   r.   r0   r   r5   rf   r   r=   r   r   r   )r   r   r7   clf_unitweightr   r   lsvc_unflatpred1r   r   	lsvc_flatr_   r8   r8   r9   test_linearsvc_fit_sampleweightD  s,   



r_  c                  C   sJ   t ddd\} }dD ]}tj|ddd| || |}|dks"J q
d S )Nr$   r   )	n_classesr   )TFrS  )rP  rT  r   r<   )r   r
   r   r.   r   )r/   ri   rP  accr8   r8   r9   test_crammer_singer_binaryg  s   	rb  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s,J |t j}t jt	|d }t||t j d S )Nr   r   g?r#   )rH   target_namesrJ   r
   r   r.   rI   setrN   rK   rL   r5   r   r   r   )rJ   r7   r   r^   r8   r8   r9   test_linearsvc_irisx  s   re  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s'J |j |js,J d|_ ||| t|jddd d|_ ||| |j}|dk sOJ d|_ ||| |j}t||dd d S )Nr$   r#   r%   r   r   r#   r#   TrK  rI  Fr   gHz>r   )rP  rJ  rG  rM  r~   r   r   rE   rk   r   r"   rZ  )intercept_scalingrP  r.   r   r4   r   )
classifierr/   ri   r7   
intercept1
intercept2r8   r8   r9   'test_dense_liblinear_intercept_handling  s0   	
rk  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%   rf  )r
   r   r.   rH   rI   rJ   r   r=   copyr4   r   r   )r7   valuesvalues2r/   ri   r8   r8   r9   test_liblinear_set_coef  s   


ro  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 sTw   Y  t
ttf |jdd W d    n1 srw   Y  q9d S )Nr'   r(   r=   r%   )r   r   r   )r
   r-   r.   rH   rI   rJ   r   r   r   r   rn   ro   r   __setattr__rK   r%  RuntimeErrorrp   r=   __setitem__)svmsr7   r8   r8   r9   test_immutable_coef_property  s   rt  c                  C   sN   dd l } | d}| |  d d tjdd}|tt | |d d S )Nr   r#   )verbose)	osdupdup2piper
   r   r.   r/   r0   )rv  stdoutr7   r8   r8   r9   test_linearsvc_verbose  s   
r{  c                  C   s   t jdd dddd} t| }|tjtj t jddddd}|tjtj t|j	|j	 t|j
|j
 t|tj|tj t|tj|tjdd	 t|tj|tj d S )
Nc                 S   rb   rc   rd   rg   r8   r8   r9   r     r   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r   )r)   r   r   r   r'   r   rk   )r
   r-   r   cloner.   rH   rI   rJ   r   r1   r4   r   r5   r   r   )svm_callable
svm_clonedsvm_builtinr8   r8   r9   #test_svc_clone_with_callable_kernel  s0   




r  c                  C   sL   t jdd d} tt | tt W d    d S 1 sw   Y  d S )Nc                 S   s   | S rc   r8   rg   r8   r8   r9   r      s    z%test_svc_bad_kernel.<locals>.<lambda>r(   )r
   r-   rn   ro   rp   r.   r/   r0   )svcr8   r8   r9   test_svc_bad_kernel  s   "r  c                  C   sr   t jdd dddd} d}tjt|d | ttt	 W d    n1 s(w   Y  t
| jdks7J d S )	Nc                 S   rb   rc   rd   rg   r8   r8   r9   r     r   z2test_libsvm_convergence_warnings.<locals>.<lambda>Tr   r$   )r)   r   r   r   zoSolver terminated early \(max_iter=2\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.r  )r
   r-   rn   warnsr   r.   rK   rm   r/   r0   rU  n_iter_)awarning_msgr8   r8   r9    test_libsvm_convergence_warnings  s   r  c                  C   s   d} t  }tjtdd ||  W d    n1 sw   Y  t  }tjtdd ||  W d    d S 1 s>w   Y  d S )Nzfoo!z.*\bSVC\b.*\bnot\b.*\bfitted\br  z .*\bNuSVR\b.*\bnot\b.*\bfitted\b)r
   r-   rn   ro   	Exceptionr5   r   )r/   r7   r8   r8   r9   test_unfitted  s   "r  z-ignore::sklearn.exceptions.ConvergenceWarningc                  C   sR   t jdddd} | ttt}t jdddd} | ttt}t|| d S )NTr#   r   )r   r   r   )r
   r-   r.   r/   r0   r   r   )r  proba_1proba_2r8   r8   r9   test_consistent_proba  s
   r  c                  C   s   t jddd} d}tjt|d | tt W d    n1 s!w   Y  t| j	t
s.J | j	dks5J t jddd}tjt|d |tjtj W d    n1 sVw   Y  t|j	t
scJ |j	dksjJ d S )Nr   r$   )r   r   z@Liblinear failed to converge, increase the number of iterations.r  )r
   r   rn   r  r   r.   r/   r0   
isinstancer  r   r   rH   rI   rJ   )lsvcr  r   r8   r8   r9   $test_linear_svm_convergence_warnings(  s   r  c                  C   s~   t jddd} t jdd}tjddtjddt fD ]}|| | t	|
| t | |j |j  q"d S )N   r   r%      r'   r(   )rK   r8  r9  r   r
   r   r   r   r.   r   r5   re   r=   r   r4   )r/   ri   r   r8   r8   r9   test_svr_coef_sign;  s   

r  c                  C   s*   t jdd} | tt | jdksJ d S )NF)rP  r,   )r
   r   r.   r/   r0   r4   )r  r8   r8   r9    test_lsvc_intercept_scaling_zeroL  s   r  c                  C   s   t jdd} t| dsJ | tjtj t| dsJ t jdd} t| dr)J | tjtj t| dr8J d| _t| dsBJ d}tj	t
|d | tj W d    d S 1 s]w   Y  d S )NT)r   r   FzApredict_proba is not available when fitted with probability=Falser  )r
   r-   rM   r.   rH   rI   rJ   r   rn   ro   r   r   )Gr>  r8   r8   r9   test_hasattr_predict_probaT  s   "r  c                  C   s`   dD ]+} t | dd\}}tjtjfD ]}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.   rt   r5   )r`  r/   ri   r   r7   r8   r8   r9   &test_decision_function_shape_two_classl  s   r  c            	      C   s<  t ddgddgddgddgg} g d}t ddgddgg}t |ddg |ddg |ddg |ddg f}dgd dgd  dgd  dgd  }tjd	d
d}|| | ||}t|| ||}tt j	|dd| |t
d|f d}t |dksJ t |d d df |d d df k sJ d S )Nr#   r"   )r   r#   r$   r%   rE   r   r   r$   r%   r'   r   r   r   r   )r   r$   r,   )rK   rm   vstackr
   r-   r.   r5   r   r   r   rs   reshapeminrU  )	r   r   base_pointsr   r   r7   r   deci_valpred_class_deci_valr8   r8   r9   test_ovr_decision_functionv  s(   "



(	


.r  SVCClassc                 C   sd   t dd\}}| ddddd||}tjtdd || W d    d S 1 s+w   Y  d S )	Nr&   r   r'   r   T)r)   r   
break_tiesr   zbreak_ties must be Falser  )r   r.   rn   ro   rp   r5   )r  r/   ri   r
   r8   r8   r9   !test_svc_invalid_break_ties_param  s   "r  c                 C   s  | j dkrtrtd tdddd\}}t|dddf  |dddf  d}t|ddd	f  |ddd	f  d}t	||\}}t
d
dddd}| dddi|||}|tj| | f }	|tj| | f }
t|	tj|
d	dkrJ | dddi|||}|tj| | f }	|tj| | f }
t|	tj|
d	dksJ dS )zyTest if predict breaks ties in OVR mode.
    Related issue: https://github.com/scikit-learn/scikit-learn/issues/8277
    r   zFailing test on 32bit OSr   r   r$   )r   r   r   Nr   r#   r;   g    .Ar&   r   )r)   r   r   r   r  Fr   Tr8   )__name__r   rn   xfailr   rK   linspacer  r;  meshgriddictr.   r5   c_r   r   rU  r   )r  r/   ri   xsysxxyycommon_paramsr
   r^   dvr8   r8   r9   test_svc_ovr_tie_breaking  s:   
.. r  c                  C   s:   dgdggddg} }t  }|| | t|jd d S )Nr,   r|   r   r#   r   )r
   r-   r.   r   _gammar   r8   r8   r9   test_gamma_scale  s   r  zSVM, params)rJ  rG  rM  epsilon_insensitiverG  rM  squared_epsilon_insensitivec                 C   st  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di | |jddd t	
|||}t	
|j|||d}	dD ]}
t||
rt||
|}t|	|
|}t|| qd S )Nr#   r%   r$   r   float)r   )r#   r#   r#   r#   r$   r$   r$   r$   r#   r#   r#   r#   r$   r$   r$   r$   r   )r   r   r   r&   r   rZ  )r   r   r   )r5   r   r8   )rK   rm   r   r  hstackr   rt   r   r   r   r|  r.   rM   getattrr   )r   paramsr/   ri   X2y2r   base_estimatorest_no_weightest_with_weightmethodX_est_no_weightX_est_with_weightr8   r8   r9   &test_linearsvm_liblinear_sample_weight  sT   



r  Klassc                 C   s|   t dgdgdgdgdgg}t |jd }|  }t|dr!J ||| |jd |jjd ks4J |jjdks<J d S )Nr   g)\(?g?gq=
ףp?r#   
n_support_)	rK   rm   r%  r   rM   r.   r  r3   r   )r  r/   ri   r  r8   r8   r9   test_n_support  s   r  c           	      C   sh  g d}t ddgddgddgddgddgg}t g d}dd }|||}tt ||j| | |d||}| d	d||}| d
d||}||||||ks[J ||||||ksiJ t|drt|	||	| t|	||	| t|
||
| t|
||
| dS 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 ]<}t||D ]4}| | d|| d |||f< |||f  | | d|| d 7  < |||f |||f< q#q|S )Nr   r  r  )r  strr    rK   zerosrs   count)X1r  
n_samples1
n_samples2ru   iijjr8   r8   r9   string_kernel,  s   $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr(   r'   ra   r   N)rK   rm   r   re   rf   r.   r   rM   r   r   r5   )	r  rI   r/   ri   r  ru   svc1svc2svc3r8   r8   r9   "test_custom_kernel_not_array_input%  s$   (

r  c                  C   s`   t jddtt} d| jd< d}tjt|d | 	t W d   dS 1 s)w   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/   r0   
_n_supportrn   ro   rp   r5   )r7   r>  r8   r8   r9   -test_svc_raises_error_internal_representationK  s   
"r  zestimator, expected_n_iter_typedataset)r`  n_informativer   r   c                 C   sn   |\}}| dd ||j}t||ksJ | tjtjfv r3tt|}|j	||d  d fks5J d S d S )Nr'   r(   r#   r$   )
r.   r  typer
   r-   r   rt   rK   r'  r   )r   expected_n_iter_typer  r/   ri   n_iterr`  r8   r8   r9   test_n_iter_libsvmX  s   r  c                 C   sJ   t d| ddtt}|du sJ t d| ddttj}|du s#J d S )NautorL  r   FTr   rK   asarrayr/   rf   r  r8   r8   r9   test_dual_autox  s   r  c                  C   sl   t ddddtt} | du sJ t ddddtt} | du s"J t ddddttj} | d	u s4J d S )
Nr  rH  rL  r   Tr  rI  rK  Fr  )rM  r8   r8   r9   test_dual_auto_edge_cases  s   r  zEstimator, make_datasetC_infinfc                 C   sL   ||d\}}| |d ||}| dd ||}t|||| dS )zCheck that we can pass `C=inf` that is equivalent to a very large C value.

    Non-regression test for
    https://github.com/scikit-learn/scikit-learn/issues/29772
    r   r   g    _BN)r.   r   r5   )r  make_datasetr  global_random_seedr/   ri   estimator_C_infestimator_C_larger8   r8   r9   test_svm_with_infinite_C  s   r  )__doc__numpyrK   rn   numpy.testingr   r   r   r   sklearnr   r   r   r	   r
   sklearn.datasetsr   r   r   sklearn.exceptionsr   r   sklearn.metricsr   sklearn.metrics.pairwiser   sklearn.model_selectionr   sklearn.multiclassr   sklearn.svmr   r   r   r   r   r   sklearn.svm._classesr   r#  r   r   sklearn.utils.fixesr   r   r   sklearn.utils.validationr    r/   r0   rf   rq   	load_irisrH   r<  permutationrJ   r   permrI   r:   r`   rz   r   r   r   r   r   r   r   r   r   r   markparametrizer-   r   r   r   r   r   r  r  rt   r  r  r  r  r+  r7  r?  r@  rD  rF  rO  rR  rY  r_  rb  re  rk  ro  rt  r{  r  r  r  r  filterwarningsr  r  r  r  r  r  r  r  r  r  r  r  r  r  ndarrayr   r  r  r  r  r  r  r8   r8   r8   r9   <module>   sl    (
PI)	!

 


$
&

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