a
    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   V/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/svm/tests/test_svm.pytest_libsvm_parameters7   s    r:   c               	   C   s  dD ]R} t j| dtjtj}t|tjtjkdks@J t	|d| dkksJ qt
|jt|j ttjtjtj\	}}}}}}}}	}
|||||||d}tjtjfi |}t|tjkdksJ tjtjtjtjdd\	}}}}}}}}	}
|||||||d}tjtjfi |ddi}t|tjkdksNJ tjtjtjtjd	dd
d}t|tjkdksJ tjtjtjtjd	dd
d}t
|| d S )N)r'   rbfr(   ?coef_r'   )ZsupportZSVZnSVZsv_coefZ	interceptZprobAZprobBgffffff?r)      r   r)   Zrandom_seed)r
   r-   r.   irisdatatargetnpmeanr5   hasattrr   classes_sortr   astypefloat64cross_validation)kr7   Zlibsvm_supportZlibsvm_support_vectorsZlibsvm_n_class_SVZlibsvm_sv_coefZlibsvm_interceptZlibsvm_probAZlibsvm_probBZlibsvm_fit_statusZlibsvm_n_iterZmodel_paramspredpred2r8   r8   r9   test_libsvm_irisA   sn     		rN   c                  C   s  t jdd} ttttj}| |t ttttj}| 	|}t
t | 	|j W d    n1 sv0    Y  t| jddgg t| jddg t| jdg t| jddg t|t t|}tttD ],}| jD ] }tt| t| |||f< 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rC   dotTxyr8   r8   r9   kfunc   s    ztest_precomputed.<locals>.kfuncr'   gGz?r$   decimal)r
   r-   rC   rR   r/   arrayrS   r.   r0   r5   pytestraises
ValueErrorr   r1   r2   r4   r   true_resultZ
zeros_likerangelenr@   rA   rB   r   rD   )r7   KKTrL   ijrW   Zclf2r8   r8   r9   test_precomputed   sZ    
*


 






(
re   c                  C   s   t  } tjddddtjddddtjdddtjddtjddfD ],}|| j| j |	| j| jdksHJ qHt | jt
t| j t | jt
t| j d S )	Nr'   皙?      ?)r)   nuC      $@r)   ri   ri   g{Gz?)r   load_diabetesr
   r   r   r   r.   rA   rB   scorerC   onesr`   )diabetesr7   r8   r8   r9   test_svr   s    

rq   c                  C   s   t  } tjdd| j| j}|| j| j}tjddd| j| j}|| j| j}t	t
j|jt
j|jdd t||d d S )N     @@rl   r'   rk   r#   -C6?r$   )r   rm   r
   r   r.   rA   rB   rn   r   r   rC   linalgnormr=   r   )rp   lsvrscore1svrscore2r8   r8   r9   test_linearsvr   s    "rz   c                  C   sH  t  } t| j}t|}tjddddj| j	| j|d}|
| j	| j}tjdddd| j	| j}|
| j	| j}ttj|jtj|jdd t||d td	}|d	d
|}tjddddj| j	| j|d}	|	j
| j	| j|d}
tj| j	|d	d}tj| j|d	d}tjdddd||}|
||}t|
|d d S )Nrr   -q=i'  )ri   tolmax_itersample_weightr#   rs   r$   r   
   Zaxis)r   rm   r`   rB   rC   ro   r
   r   r.   rA   rn   r   rt   ru   r=   r   r   randintrepeat)rp   	n_samplesunit_weightrv   rw   Zlsvr_no_weightry   random_staterandom_weightZlsvr_unflatZscore3X_flaty_flatZ	lsvr_flatZscore4r8   r8   r9   test_linearsvr_fit_sampleweight   s8    




r   c                  C   sh   dgdgg} ddg}t jdd d}|| | tt ||  W d    n1 sZ0    Y  d S )Nr,   rg   g      ?c                 S   s   t dggS )Nrg   )rC   rZ   rT   r8   r8   r9   <lambda>*      z!test_svr_errors.<locals>.<lambda>r(   )r
   r   r.   r[   r\   r]   r5   r/   rV   r7   r8   r8   r9   test_svr_errors%  s    r   c                     s   t    t  t} t| g d | jtdks>J t	 j
dgdd t	 jg dgdd tt  fdd  W d    n1 s0    Y  d S )	N)r#   r"   r"   Zintpgrh|r%   rX   )      ?r   r   r   c                      s    j S rP   )r=   r8   r6   r8   r9   r   ;  r   ztest_oneclass.<locals>.<lambda>)r
   r   r.   r/   r5   rS   r   dtyperC   r   r4   r1   r[   r\   AttributeError)rL   r8   r6   r9   test_oneclass0  s    

r   c            
      C   s
  t  } td}d|dd }tj|d |d f }d|dd }tj|d |d f }|jdddd}t jd	d
d	d} | | | |}t	|dkdksJ | |}t	|dkdksJ | 
|}t|dk |dk | 
|}	t|	dk |dk d S )Nr$   333333?d         )r   r$   )lowhighsize皙?r;   )rh   r)   gammar#   r<   r"   r   )r
   r   r   randnrC   Zr_uniformr.   r5   rD   decision_functionr   ravel)
r7   Zrndr/   X_trainX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr8   r8   r9   test_oneclass_decision_function>  s"    




r   c                  C   sT   ddgddgddgg} t jdd| }t|ddgg|ddgg|j  d S )Nr#   r$   r   g       @)r
   r   r.   r   Zscore_samplesr   Zoffset_)r   r7   r8   r8   r9   test_oneclass_score_samples\  s    r   c                  C   sr   t jddd} | tt t| jddgg t| ddggdg t	ddgg| _
t| ddggd	g d S )
Nr'   rg   rk   r*   r+   皙r#   r,   r$   )r
   r-   r.   r/   r0   r   r1   r5   rC   rZ   Z_dual_coef_r6   r8   r8   r9   test_tweak_paramse  s    r   c                  C   s   t jddddt jdddfD ]} | tjtj | tj}tt	
|dt	tjjd  t	t	|d| tjkdksJ t| tjt	| tjd qd S )	NTr   rg   )probabilityr   ri   )r   r   r#   r<      )r
   r-   NuSVCr.   r@   rA   rB   predict_probar   rC   sumro   shaperD   argmaxr5   r   expZpredict_log_proba)r7   Zprob_predictr8   r8   r9   test_probabilityt  s     &r   c                  C   s"  t jddddtjtj} ttj| jj	| j
 }t|| tj | tt tt| jj	| j
 }| t}t| | t t|| j| tdkt  tg d}t| t|d t jdd	dd
} | tt tt| j| jd}t|| jj	| j
 }t| | t d S )Nr'   r   ovo)r)   ri   decision_function_shaper   )      gQr   gQ?rg   rg   r$   r;   r#   )r)   r   r   r   )r
   r-   r.   r@   rA   rB   rC   rR   r=   rS   r4   r   r   r/   r0   r5   r   rF   rH   intrZ   r   r3   r   r1   )r7   decZ
predictionexpectedrbfsr8   r8   r9   test_decision_function  s&    
r   SVMc           	      C   s  | ddd tjtj}|tj}|jttjdfks<J t|tjt	j
|dd tddd	d
\}}t||d	d\}}}}| ddd ||}||}|jt|dfksJ t||t	j
|dd | ddd ||}||}|jt|dfksJ d S )Nr'   ovrr)   r   r%   r#   r   P   r>   r   )r   centersr   r   r   r   )r.   r@   rA   rB   r   r   r`   r   r5   rC   r   r   r   )	r   r7   r   r/   rV   r   r   y_trainy_testr8   r8   r9   test_decision_function_shape  s    

r   c                  C   s   t j} t j}tjddd| |}t| |jj	|j
 }t| ||   tjddd| |}t| |j|jd}t||jj	|j
 }t| ||   d S )Nr'   r   rk   r;   r#   )r)   r   r   )r@   rA   rB   r
   r   r.   rC   rR   r=   rS   r4   r   r   r5   r   r3   r   r1   )r/   rV   regr   r   r8   r8   r9   test_svr_predict  s    r   c                  C   s   t jddid} | tt t| tdgd  tdddd	gdd
\}}t	 t j
ddt  fD ]^} | jdddd | |d d |d d  | |dd  }t|dd  |dksdJ qdd S )Nr#   r   Zclass_weightr$         r   g-?gK7A`?)r   
n_featuresweightsr   r   r   )r   r#   r   r   )r
   r-   r.   r/   r0   r   r5   r   r   LogisticRegressionr   
set_paramsr   )r7   ZX_Zy_y_predr8   r8   r9   test_weight  s    

r   	estimator{Gz?rl   c                 C   s   ddgddgddgddgddgddgg}| j dd dgd }| j|t|d	 | d
dgg}|tdkspJ g d}| j|t|d	 | d
dgg}|dk 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   rg   rj   r   r   r   r   r   rg   r   rj   rj   r   r   )r   r.   r0   r   r[   approxr   r/   r   r   r8   r8   r9   'test_svm_classifier_sided_sample_weight  s    (
r   c                 C   s   ddgddgddgddgddgddgg}| j dd dgd }| j|t|d	 | d
dgg}|tdkspJ g d}| j|t|d	 | d
dgg}|dk 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   rg   g      ?r   r   )r   r.   r0   r5   r[   r   r   r8   r8   r9   &test_svm_regressor_sided_sample_weight
  s    (
r   c                  C   sR   t  } | tt | j}| jdd | jtttdt	td t
|| j d S )Nr   rl   r   r~   )r
   r-   r.   r/   r0   r1   r   rC   r   r`   r   )r7   Zdual_coef_no_weightr8   r8   r9   $test_svm_equivalence_sample_weight_C$  s    r   zEstimator, err_msgz:Invalid input - all samples have zero or negative weights.z6(negative dimensions are not allowed|nu is infeasible))r-   r   r   r   r   )Zidsr   333333ӿzweights-are-zerozweights-are-negativec                 C   sL   | dd}t jt|d  |jtt|d W d    n1 s>0    Y  d S Nr'   r(   matchr~   r[   r\   r]   r.   r/   r0   )	Estimatorerr_msgr   estr8   r8   r9   -test_negative_sample_weights_mask_all_samples.  s    
r   zClassifier, err_msgzJInvalid input - all samples with positive weights belong to the same classzspecified nu is infeasibler-   r   )r         r   r#   r#   r#   )r#   r#   r#   r   r   r   zmask-label-1zmask-label-2c                 C   sL   | dd}t jt|d  |jtt|d W d    n1 s>0    Y  d S r   r   )
Classifierr   r   r7   r8   r8   r9   .test_negative_weights_svc_leave_just_one_labelD  s    
r   zClassifier, modelg6<R?rf   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/   r0   r   r=   )r   modelr   Z	mask_sider7   r8   r8   r9   *test_negative_weights_svc_leave_two_labels]  s    
r   r   )r-   r   r   c                 C   sL   | dd}|j tt|d t|j }|d tj|d ddksHJ d S )Nr'   r(   r~   r   r#   r   )rel)	r.   r/   r0   rC   absr=   r   r[   r   )r   r   r   Zcoefr8   r8   r9   !test_negative_weight_equal_coeffsr  s    

r   c            
      C   s"  ddl m}  ddlm} tjd d d df tjd  }}tt	|j
t|dkd d d d }t|| }|d||| d}t|dk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)classesrV   r'   r(   r   r   macro)Zaverage)Zsklearn.linear_modelr   sklearn.utilsr   r@   rA   rB   rC   deletearanger   whereuniquer   r
   r-   r   r.   r5   r   r	   r   )
r   r   r/   rV   Z
unbalancedr   Zclass_weightsr7   r   Zy_pred_balancedr8   r8   r9   test_auto_weight  s,    ",

r   lil_containerc                 C   s  t d d }tt  t t| W d    n1 s<0    Y  t tjddfD ]x}t	
t}|jd rvJ t	t	t dj}|d d df }|jd rJ |jd rJ ||| t|tt qZtjdd}tt |tt  W d    n1 s0    Y  t tt }tt || t W d    n1 sX0    Y  t	tj}|t	t|t  tt |t W d    n1 s0    Y  t }|tt  tt || W d    n1 s0    Y  d S )	Nr"   r   r   ZC_CONTIGUOUS)r$   r#   ZF_CONTIGUOUSrO   r(   )r0   r[   r\   r]   r
   r-   r.   r/   r   rC   ZasfortranarrayflagsZascontiguousarrayZtilerS   r   r5   r^   rZ   rR   )r   ZY2r7   ZXfZyfZXtr8   r8   r9   test_bad_input  s4    .
,.*r   c                  C   s   t jd} d}t t jj}|| j|dfd }| jdd|d}t	 }d}t
jt|d ||| W d    n1 s~0    Y  d S )Nr   r   r$   )r   z2The dual coefficients or intercepts are not finiter   )rC   randomRandomStateZfinforI   maxr   r   r
   r-   r[   r\   r]   r.   )rngr   Zfmaxr/   rV   r7   msgr8   r8   r9   test_svc_nonfinite_params  s    r   c                  C   sH   t jddd} | tt | t tjt	j
t	jtjdddd d S )Nr'   T)r)   r   r>   r   r?   )r
   r-   r.   r/   r0   r   rS   r   rJ   r@   rA   rB   rH   rC   rI   r6   r8   r8   r9   test_unicode_kernel  s    
r   csr_containerc                 C   sb   t jdd}| ddgddgg}tjtdd  ||ddg W d    n1 sT0    Y  d S )NrO   r(   r#   r   zSparse precomputedr   )r
   r-   r[   r\   	TypeErrorr.   )r   r7   Zsparse_gramr8   r8   r9   test_sparse_precomputed  s    r   c                 C   sf   | g dg dg dg dg}t g d}tjdd}||| |jjjrTJ |jjjrbJ d S )N)r   r#   r   r   )r   r   r   r#   )r   r   r#   r   ){Gz?r   r   g{Gz?r'   r(   )	rC   rZ   r
   r   r.   r3   rA   r   r1   )r   r   r   r   r8   r8   r9   %test_sparse_fit_support_vectors_empty  s     r  losshingesquared_hingepenaltyl1l2dualTFc                 C   s   t dddd\}}tj|| |dd}| |fdksJ| ||fdksJ||fdkrtjtd|| |f d	 ||| W d    q1 s0    Y  n||| d S )
Nr>   r   )r   r   r   r  r  r  r   )r  r  )r  r  F)r  Tz<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%sr   )r   r
   r   r[   r\   r]   r.   )r  r  r  r/   rV   r7   r8   r8   r9   test_linearsvc_parameters  s     

,r
  c                  C   s   t jddtt} | jsJ t| tt	 t
| jdgdd t jdddddtt} t| tt	 t jd	d
ddtt} t| tt	 t jd	dd
dd} | tt t| tt	 | t}|dktd }t|t	 d S )Nr   r   r%   rX   r  r  Fr	  r  T)r  r  r   r  r#   )r
   r   r.   r/   r0   fit_interceptr   r5   rS   r^   r   r4   r   rH   r   )r7   r   resr8   r8   r9   test_linearsvc  s$    

r  c                  C   s   t jddtjtj} t jddd}|tjtj | tj|tjk dksZJ | j|jk	 snJ t
|tjtj|tjdd ttj|jj|j }t||tj d S )Nr   r   crammer_singer)multi_classr   r<   r#   r   )r
   r   r.   r@   rA   rB   r5   rD   r=   allr   rC   r   r   rR   rS   r4   r   )Zovr_clfZcs_clfZdec_funcr8   r8   r9   test_linearsvc_crammer_singer/  s    $
r  c                  C   s  t t} t| }tjddtt}tjddddjtt|d}t|	t
|	t
 t|j|jdd td}|dd	| }tjddddjtt|d}|	t
}tjt|dd
}tjt|dd
}	tjdddd||	}
|
	t
}t|| t|j|
jdd d S )Nr   r   r{     )r   r|   r}   r~   r#   rs   r   r   )r`   r/   rC   ro   r
   r   r.   r0   r   r5   rS   r   r=   r   r   r   )r   r   r7   Zclf_unitweightr   r   Zlsvc_unflatZpred1r   r   Z	lsvc_flatrM   r8   r8   r9   test_linearsvc_fit_sampleweightD  s,    



r  c                  C   sJ   t ddd\} }dD ]0}tj|ddd| || |}|dksJ qd S )Nr$   r   )	n_classesr   )TFr  )r  r  r   r<   )r   r
   r   r.   rn   )r/   rV   r  accr8   r8   r9   test_crammer_singer_binaryg  s    	r  c                  C   s   t jt j } tjddt j| }t|jtt jks:J t	
|t j| kdksXJ |t j}t jt	|d }t||t j d S )Nr   r   g?r#   )r@   Ztarget_namesrB   r
   r   r.   rA   setrF   rC   rD   r5   r   r   r   )rB   r7   r   rL   r8   r8   r9   test_linearsvc_irisx  s    r  c              	   C   s   ddgddgddgddgg}g d}| ddddd	d
dd}|j dksNJ |j |jsXJ d|_ ||| t|jddd d|_ ||| |j}|dk sJ d|_ ||| |j}t||dd d S )Nr$   r#   r%   r   r   r#   r#   Tr  r  Fr   gHz>r   )r  r  r  r  ri   r|   r   r>   rX   r   r"   r  )Zintercept_scalingr  r.   r   r4   r   )
classifierr/   rV   r7   Z
intercept1Z
intercept2r8   r8   r9   'test_dense_liblinear_intercept_handling  s0    	
r  c                  C   s   t  tjtj} | tj}| j | _| j	 | _	| tj}t
|| ddgddgddgddgg}g d}t  ||} | |}| j | _| j	 | _	| |}t|| d S )Nr$   r#   r%   r  )r
   r   r.   r@   rA   rB   r   r=   copyr4   r   r   )r7   valuesZvalues2r/   rV   r8   r8   r9   test_liblinear_set_coef  s    


r  c               	   C   s   t jddtjtjt jddtjtjt jddtjtjt jddtjtjt j	ddtjg} | D ]|}t
t" |dtd W d    n1 s0    Y  t
ttf |jdd W d    qr1 s0    Y  qrd S )Nr'   r(   r=   r%   )r   r   r   )r
   r-   r.   r@   rA   rB   r   r   r   r   r[   r\   r   __setattr__rC   r   RuntimeErrorr]   r=   __setitem__)Zsvmsr7   r8   r8   r9   test_immutable_coef_property  s    0r"  c                  C   sN   dd l } | d}| |  d d tjdd}|tt | |d d S )Nr   r#   )verbose)	osdupdup2piper
   r   r.   r/   r0   )r$  stdoutr7   r8   r8   r9   test_linearsvc_verbose  s    
r)  c                  C   s   t jdd dddd} t| }|tjtj t jddddd}|tjtj t|j	|j	 t|j
|j
 t|tj|tj t|tj|tjdd	 t|tj|tj d S )
Nc                 S   s   t | |jS rP   rQ   rT   r8   r8   r9   r     r   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r   )r)   r   r   r   r'   r   rX   )r
   r-   r   cloner.   r@   rA   rB   r   r1   r4   r   r5   r   r   )Zsvm_callableZ
svm_clonedZsvm_builtinr8   r8   r9   #test_svc_clone_with_callable_kernel  s0    




r+  c                  C   sJ   t jdd d} tt | tt W d    n1 s<0    Y  d S )Nc                 S   s   | S rP   r8   rT   r8   r8   r9   r      r   z%test_svc_bad_kernel.<locals>.<lambda>r(   )r
   r-   r[   r\   r]   r.   r/   r0   )Zsvcr8   r8   r9   test_svc_bad_kernel  s    r,  c                  C   sr   t jdd dddd} d}tjt|d" | ttt	 W d    n1 sP0    Y  t
| jdksnJ d S )	Nc                 S   s   t | |jS rP   rQ   rT   r8   r8   r9   r     r   z2test_libsvm_convergence_warnings.<locals>.<lambda>Tr   r$   )r)   r   r   r}   zoSolver terminated early \(max_iter=2\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.r   )r
   r-   r[   warnsr   r.   rC   rZ   r/   r0   r  n_iter_)awarning_msgr8   r8   r9    test_libsvm_convergence_warnings  s    0r1  c                  C   s   d} t  }tjtdd ||  W d    n1 s:0    Y  t  }tjtdd ||  W d    n1 sz0    Y  d S )Nzfoo!z.*\bSVC\b.*\bnot\b.*\bfitted\br   z .*\bNuSVR\b.*\bnot\b.*\bfitted\b)r
   r-   r[   r\   	Exceptionr5   r   )r/   r7   r8   r8   r9   test_unfitted  s    (r3  z-ignore::sklearn.exceptions.ConvergenceWarningc                  C   sR   t jdddd} | ttt}t jdddd} | ttt}t|| d S )NTr#   r   )r   r}   r   )r
   r-   r.   r/   r0   r   r   )r/  Zproba_1Zproba_2r8   r8   r9   test_consistent_proba  s
    r4  c                  C   s   t jddd} d}tjt|d | tt W d    n1 sB0    Y  t| j	t
s\J | j	dksjJ t jddd}tjt|d  |tjtj W d    n1 s0    Y  t|j	t
sJ |j	dksJ d S )Nr   r$   )r   r}   z@Liblinear failed to converge, increase the number of iterations.r   )r
   r   r[   r-  r   r.   r/   r0   
isinstancer.  r   r   r@   rA   rB   )lsvcr0  rv   r8   r8   r9   $test_linear_svm_convergence_warnings(  s    *.r7  c                  C   s~   t jddd} t jdd}tjddtjddt fD ]4}|| | t	|
| t | |j |j  qDd S )N   r   r%      r'   r(   )rC   r   r   r   r
   r   r   r   r.   r   r5   rR   r=   r   r4   )r/   rV   rx   r8   r8   r9   test_svr_coef_sign;  s    

r:  c                  C   s*   t jdd} | tt | jdks&J d S )NF)r  r,   )r
   r   r.   r/   r0   r4   )r6  r8   r8   r9    test_lsvc_intercept_scaling_zeroL  s    r;  c                  C   s   t jdd} t| dsJ | tjtj t| ds8J t jdd} t| drRJ | tjtj t| drpJ d| _t| d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-   rE   r.   r@   rA   rB   r   r[   r\   r   r   )Gr   r8   r8   r9   test_hasattr_predict_probaT  s    r=  c                  C   s`   dD ]V} t | dd\}}tjtjfD ]4}t|dd||}t||t|ks$J q$qd S )N)r$   r%   r   )r   r   r   )r   )r   r
   r-   r   r   r.   r`   r5   )r  r/   rV   r   r7   r8   r8   r9   &test_decision_function_shape_two_classl  s    r>  c            	      C   s@  t ddgddgddgddgg} g d}t ddgddgg}t |ddg |ddg |ddg |ddg f}dgd dgd  dgd  dgd  }tjd	d
d}|| | ||}t|| ||}tt j	|dd| |t
d|f d}t |dksJ t |d d df |d d df k s<J d S )Nr#   r"   )r   r#   r$   r%   r>   r   r   r$   r%   r'   r   r   r   r   )r   r$   r,   )rC   rZ   vstackr
   r-   r.   r5   r   r   r   r_   Zreshapeminr  )	r   r   Zbase_pointsr   r   r7   r   Zdeci_valZpred_class_deci_valr8   r8   r9   test_ovr_decision_functionv  s(    "



	(


rA  SVCClassc                 C   sb   t dd\}}| ddddd||}tjtdd || W d    n1 sT0    Y  d S )	Nr&   r   r'   r   T)r)   r   
break_tiesr   zbreak_ties must be Falser   )r   r.   r[   r\   r]   r5   )rB  r/   rV   r
   r8   r8   r9   !test_svc_invalid_break_ties_param  s    rD  c                 C   s  | j dkrtrtd tdddd\}}t|dddf  |dddf  d}t|ddd	f  |ddd	f  d}t	||\}}t
d
dddd}| f ddi|||}|tj| | f }	|tj| | f }
t|	tj|
d	dkrJ | f ddi|||}|tj| | f }	|tj| | f }
t|	tj|
d	dk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   rC  Fr   T)__name__r   r[   Zxfailr   rC   Zlinspacer@  r   Zmeshgriddictr.   r5   Zc_r   r   r  r   )rB  r/   rV   ZxsZysxxyyZcommon_paramsr
   rL   Zdvr8   r8   r9   test_svc_ovr_tie_breaking  s:    
..rI  c                  C   s:   dgdggddg } }t  }|| | t|jd d S )Nr,   rg   r   r#   r   )r
   r-   r.   r   Z_gammar   r8   r8   r9   test_gamma_scale  s    rJ  zSVM, params)r  r  r  epsilon_insensitiver  r  Zsquared_epsilon_insensitivec                 C   sx  t jddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddggt dd}t jg dt dd}t ||g}t |d| g}t jt|d d	}d
|t|d < t|||d
d\}}}| dd}|jf i | |jddd t	
|||}t	
|j|||d}	dD ]8}
t||
r:t||
|}t|	|
|}t|| q:d S )Nr#   r%   r$   r   float)r   )r#   r#   r#   r#   r$   r$   r$   r$   r#   r#   r#   r#   r$   r$   r$   r$   r   )r   r   r   r&   r{   r  )r|   r}   r~   )r5   r   )rC   rZ   r   r?  Zhstackro   r`   r   r   r   r*  r.   rE   getattrr   )r   paramsr/   rV   X2y2r   Zbase_estimatorZest_no_weightZest_with_weightmethodZX_est_no_weightZX_est_with_weightr8   r8   r9   &test_linearsvm_liblinear_sample_weight  sP    

rS  Klassc                 C   s|   t dgdgdgdgdgg}t |jd }|  }t|drBJ ||| |jd |jjd kshJ |jjdksxJ d S )Nr   g)\(?g?gq=
ףp?r#   
n_support_)	rC   rZ   r   r   rE   r.   rU  r3   r   )rT  r/   rV   r   r8   r8   r9   test_n_support  s    rV  c           	      C   sh  g d}t ddgddgddgddgddgg}t g d}dd }|||}tt ||j| | |d||}| d	d||}| d
d||}||||||k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   rW  rX  )r5  strr    rC   Zzerosr_   count)ZX1rP  Z
n_samples1Z
n_samples2ra   iiZjjr8   r8   r9   string_kernel,  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr(   r'   rO   r   N)rC   rZ   r   rR   rS   r.   rn   rE   r   r   r5   )	r   rA   r/   rV   r\  ra   Zsvc1Zsvc2Zsvc3r8   r8   r9   "test_custom_kernel_not_array_input%  s$    (
r]  c                  C   s^   t jddtt} d| jd< d}tjt|d | 	t W d   n1 sP0    Y  dS )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   Z
_n_supportr[   r\   r]   r5   )r7   r   r8   r8   r9   -test_svc_raises_error_internal_representationK  s
    
r^  zestimator, expected_n_iter_typedataset)r  Zn_informativer   r   c                 C   sj   |\}}| dd ||j}t||ks,J | tjtjfv rftt|}|j	||d  d fksfJ d S )Nr'   r(   r#   r$   )
r.   r.  typer
   r-   r   r`   rC   r   r   )r   Zexpected_n_iter_typer_  r/   rV   Zn_iterr  r8   r8   r9   test_n_iter_libsvmX  s    ra  c                 C   sJ   t d| ddtt}|du s"J t d| ddttj}|du sFJ d S )Nautor  r   FTr   rC   Zasarrayr/   rS   rL  r8   r8   r9   test_dual_autox  s    rd  c                  C   sl   t ddddtt} | du s"J t ddddtt} | du sDJ t ddddttj} | d	u shJ d S )
Nrb  r  r  r   TrK  r  r  Frc  )r  r8   r8   r9   test_dual_auto_edge_cases  s    re  zEstimator, make_datasetC_infinfc                 C   sL   ||d\}}| |d ||}| dd ||}t|||| dS )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   rl   g    _BN)r.   r   r5   )r   Zmake_datasetrf  Zglobal_random_seedr/   rV   Zestimator_C_infZestimator_C_larger8   r8   r9   test_svm_with_infinite_C  s    rh  )__doc__numpyrC   r[   Znumpy.testingr   r   r   r   Zsklearnr   r   r   r	   r
   Zsklearn.datasetsr   r   r   Zsklearn.exceptionsr   r   Zsklearn.metricsr   Zsklearn.metrics.pairwiser   Zsklearn.model_selectionr   Zsklearn.multiclassr   Zsklearn.svmr   r   r   r   r   r   Zsklearn.svm._classesr   r   r   r   Zsklearn.utils.fixesr   r   r   Zsklearn.utils.validationr    r/   r0   rS   r^   Z	load_irisr@   r   ZpermutationrB   r   permrA   r:   rN   re   rq   rz   r   r   r   r   r   r   r   r   markZparametrizer-   r   r   r   r   r   r   r   r`   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r  r  r"  r)  r+  r,  r1  r3  filterwarningsr4  r7  r:  r;  r=  r>  rA  rD  rI  rJ  rS  rV  r]  r^  Zndarrayr   ra  rd  re  rg  rM  rh  r8   r8   r8   r9   <module>   sj   (
PI)	!

 


$
&



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