U
    -e                     @   s.  d Z ddlZddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZmZ ddl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! 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/ ddl0m1Z1 ddgddgddgddgddgddggZ2ddddddgZ3ddgddgddggZ4dddgZ5e6 Z7e,dZ8e89e7j:j;Z<e7j=e< e7_=e7j:e< e7_:dd Z>dd Z?dd Z@dd ZAdd  ZBd!d" ZCd#d$ ZDd%d& ZEd'd( ZFd)d* ZGd+d, ZHd-d. ZId/d0 ZJejKLd1ejMejNfd2d3 ZOd4d5 ZPd6d7 ZQejKLd8ejMd9d:eN gd;d< ZRejKLd8ej#d9d:ej&d9d:gd=d> ZSd?d@ ZTejKjLdAejMdBfejNdCfej#dBfej&dBfej'dBfgdDdEdFdGdHgdIejKjLdJdgeUe3 dKgeUe3 gdLdMgdIdNdO ZVejKjLdPejMdQfejNdRfgdDdEgdIejKjLdJddSddddgdddddTdKggdUdVgdIdWdX ZWejKjLdYejMdZd[gd[d\gd]fejNd^d^gd^d^gd]fgdDdEgdIejKjLd_ddSddddgd`fddddddgdafgdbdcgdIddde ZXejKjLdfejMejNej&gdDdEdGgdIejKjLdJddSddddgddddddggdbdcgdIdgdh ZYe/edidjdk ZZdldm Z[dndo Z\dpdq Z]drds Z^dtdu Z_ejKLdvdwdxgejKLdydzd{gejKLd|d}d~gdd Z`dd Zadd Zbdd Zcdd Zddd Zeej$fddZfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zme/dd Zndd Zodd Zpdd Zqdd Zrdd Zsdd ZtejKLdejMejNgdd ZuejKLdejMejNgdd Zvdd ZwejKLde$dzdxd~dfe$d{dxd}dfe$d{dxd~dfe$d{dwd}dfe%dd}dfe%dd}dfe%dd}dfgdd ZxejKLde'e#e&fdd ZyejKLdfejMej#gdd Zzdd Z{ejKLdejMej|fejNej|fej#e}fej&e}fej'e}fgejKLdeddddeddddeddddgddÄ Z~ejKLde#e&e'gddń ZejKLdfe%e$gddǄ ZejKLdvdxdgddɄ Zdd˄ 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)sparse)basedatasetslinear_modelmetricssvm)
make_blobsmake_classification)ConvergenceWarningNotFittedErrorUndefinedMetricWarning)f1_score)
rbf_kernel)train_test_split)OneVsRestClassifier)SVR	LinearSVC	LinearSVRNuSVROneClassSVM_libsvm)_validate_dual_parameter)check_random_stateshuffle)ignore_warnings)_num_samples         *   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 r7   [/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/svm/tests/test_svm.pytest_libsvm_parameters;   s    r9   c               	   C   s  dD ]R} t j| dtjtj}t|tjtjkdks@t	t
|d| dkkst	qt|jt|j ttjtjtj\	}}}}}}}}	}
|||||||d}tjtjf|}t|tjkdkst	tjtjtjtjdd\	}}}}}}}}	}
|||||||d}tjtjf|ddi}t|tjkdksFt	tjtjtjtjd	dd
d}t|tjkdkst	tjtjtjtjd	dd
d}t|| d S )N)r&   rbfr'   ?coef_r&   )ZsupportZSVZnSVZsv_coefZ	interceptZprobAZprobBgffffff?r(      r   r(   Zrandom_seed)r   r,   r-   irisdatatargetnpmeanr4   AssertionErrorhasattrr   classes_sortr   astypefloat64cross_validation)kr6   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pred2r7   r7   r8   test_libsvm_irisE   s~     		        rN   c               	   C   s  t jdd} ttttj}| |t ttttj}| 	|}t
t | 	|j W 5 Q R X t| jddgg t| jddg t| jdg t| jddg t|t t|}tttD ],}| jD ] }tt| t| |||f< qq| 	|}t|t dd	 }t j|d} | ttt | 	t}t| jddgg t| jdg t| jddg t|t t jdd} t jd
d}ttjtjj}| |tj |tjtj | 	|}t| j|j t| j|j t| j|j tt|tjkddd t|}tttjD ]4}| jD ]&}ttj| tj| |||f< q0q&| 	|}tt|tjkddd t j|d} | tjtj tt|tjkddd d S )Nprecomputedr'   r)   r*   r"   r$   r   c                 S   s   t | |jS NrB   dotTxyr7   r7   r8   kfunc   s    ztest_precomputed.<locals>.kfuncr&   gGz?r#   decimal)r   r,   rB   rR   r.   arrayrS   r-   r/   r4   pytestraises
ValueErrorr   r0   r1   r3   r   true_resultZ
zeros_likerangelenr?   r@   rA   r   rC   )r6   KKTrL   ijrW   Zclf2r7   r7   r8   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dtjdddfD ],}|| j| j |	| j| jd	ksLt
qLt | jtt| j tjdd
| jtt| j d S )Nr&   皙?      ?)r(   nuC      $@r(   ri   auto)dualri   g{Gz?rm   )r   load_diabetesr   r   r   r   r-   r@   rA   scorerD   rB   onesr`   )diabetesr6   r7   r7   r8   test_svr   s    rs   c                  C   s   t  } tjd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   )ri   rm   r&   rk   r"   -C6?r#   )r   ro   r   r   r-   r@   rA   rp   r   r   rB   linalgnormr<   r   )rr   lsvrscore1svrscore2r7   r7   r8   test_linearsvr   s    "r|   c                  C   sP  t  } t| j}t|}tjdddddj| j	| j|d}|
| j	| j}tjd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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d||}|
||}t|
|d	 d S )Nrl   rt   -q=i'  )rm   ri   tolmax_itersample_weightr"   ru   r#   r   
   Zaxis)r   ro   r`   rA   rB   rq   r   r   r-   r@   rp   r   rv   rw   r<   r   r   randintrepeat)rr   	n_samplesunit_weightrx   ry   Zlsvr_no_weightr{   random_staterandom_weightZlsvr_unflatZscore3X_flaty_flatZ	lsvr_flatZscore4r7   r7   r8   test_linearsvr_fit_sampleweight   sR    

           r   c               	   C   sT   dgdgg} ddg}t jdd d}|| | tt ||  W 5 Q R X d S )Nr+   rg   g      ?c                 S   s   t dggS )Nrg   )rB   rZ   rT   r7   r7   r8   <lambda>0      z!test_svr_errors.<locals>.<lambda>r'   )r   r   r-   r[   r\   r]   r4   r.   rV   r6   r7   r7   r8   test_svr_errors+  s    r   c               	      s   t    t  t} t| dddg | jtdks@t	t
 jdgdd t
 jddddggdd tt  fdd	  W 5 Q R X d S )
Nr"   r!   Zintpgrh|r$   rX   g      ?c                      s    j S rP   )r<   r7   r5   r7   r8   r   A  r   ztest_oneclass.<locals>.<lambda>)r   r   r-   r.   r4   rS   r   dtyperB   rD   r   r3   r0   r[   r\   AttributeError)rL   r7   r5   r8   test_oneclass6  s    

r   c            
      C   s
  t  } td}d|dd }tj|d |d f }d|dd }tj|d |d f }|jdddd}t jd	d
d	d} | | | |}t	|dkdkst
| |}t	|dkdkst
| |}t|dk |dk | |}	t|	dk |dk d S )Nr#   333333?d         )r   r#   )lowhighsize皙?r:   )rh   r(   gammar"   r;   r!   r   )r   r   r   randnrB   Zr_uniformr-   r4   rC   rD   decision_functionr   ravel)
r6   Zrndr.   X_trainX_testZ
X_outliersZy_pred_testZy_pred_outliersZdec_func_testZdec_func_outliersr7   r7   r8   test_oneclass_decision_functionD  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   r6   r7   r7   r8   test_oneclass_score_samplesb  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.   r/   r   r0   r4   rB   rZ   Z_dual_coef_r5   r7   r7   r8   test_tweak_paramsk  s    r   c                  C   s   t jddddt jdddfD ]} | tjtj | tj}tt	
|dt	tjjd  t	t	|d| tjkdkstt| tjt	| tjd qd S )	NTr   rg   )probabilityr   ri   )r   r   r"   r;      )r   r,   NuSVCr-   r?   r@   rA   predict_probar   rB   sumrq   shaperC   argmaxr4   rD   r   expZpredict_log_proba)r6   Zprob_predictr7   r7   r8   test_probabilityz  s     &
  r   c                  C   s*  t jddddtjtj} ttj| jj	| j
 }t|| tj | tt tt| jj	| j
 }| t}t| | t t|| j| tdkt  tddddd	d	g}t| t|d
 t jdddd} | tt tt| j| jd}t|| jj	| j
 }t| | t d S )Nr&   r   ovo)r(   ri   decision_function_shaper         gQgQ?rg   r#   r:   r"   )r(   r   r   r   )r   r,   r-   r?   r@   rA   rB   rR   r<   rS   r3   r   r   r.   r/   r4   r   rF   rH   intrZ   r   r2   r   r0   )r6   decZ
predictionexpectedrbfsr7   r7   r8   test_decision_function  s*     
 r   SVMc           	      C   s  | ddd tjtj}|tj}|jttjdfks<tt|	tjt
j|dd tddd	d
\}}t||d	d\}}}}| ddd ||}||}|jt|dfkstt|	|t
j|dd | ddd ||}||}|jt|dfkstd S )Nr&   ovrr(   r   r$   r"   r   P   r=   r   )r   centersr   r   r   r   )r-   r?   r@   rA   r   r   r`   rD   r   r4   rB   r   r   r   )	r   r6   r   r.   rV   r   r   y_trainy_testr7   r7   r8   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?   r@   rA   r   r   r-   rB   rR   r<   rS   r3   r   r   r4   r   r2   r   r0   )r.   rV   regr   r   r7   r7   r8   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dt  fD ]^} | jdddd | |d d |d d  | |dd  }t|dd  |dksftqfd S )Nr"   r   Zclass_weightr#         r   g-?gK7A`?)r   
n_featuresweightsr   rl   r   rm   r   )r   r"   r   r   )r   r,   r-   r.   r/   r   r4   r   r	   LogisticRegressionr   
set_paramsr   rD   )r6   ZX_Zy_y_predr7   r7   r8   test_weight  s"       
r   	estimator{Gz?ri   c                 C   s   ddgddgddgddgddgddgg}| j dd dgd }| j|t|d	 | d
dgg}|tdksptddddddg}| j|t|d	 | d
dgg}|dk stddddddg}| j|t|d	 | d
dgg}|dkstd S )Nr    r   r!   r#   r"   r&   r'   r   r   r   rg   rj   r   r   )r   r-   r/   r   r[   approxrD   r   r.   r   r   r7   r7   r8   'test_svm_classifier_sided_sample_weight  s    (
r   c                 C   s   ddgddgddgddgddgddgg}| j dd dgd }| j|t|d	 | d
dgg}|tdksptddddddg}| j|t|d	 | d
dgg}|dk stddddddg}| j|t|d	 | d
dgg}|dkstd S )Nr    r   r!   r#   r"   r&   r'   r   r   r   rg   g      ?rj   r   r   )r   r-   r/   r4   r[   r   rD   r   r7   r7   r8   &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   r   r   r   )r   r,   r-   r.   r/   r0   r   rB   r   r`   r   )r6   Zdual_coef_no_weightr7   r7   r8   $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   g333333ӿzweights-are-zerozweights-are-negativec              	   C   s8   | dd}t jt|d |jtt|d W 5 Q R X d S Nr&   r'   matchr   r[   r\   r]   r-   r.   r/   )	Estimatorerr_msgr   estr7   r7   r8   -test_negative_sample_weights_mask_all_samples4  s    
r   zClassifier, err_msgzJInvalid input - all samples with positive weights belong to the same classzspecified nu is infeasibleg      r   zmask-label-1zmask-label-2c              	   C   s8   | dd}t jt|d |jtt|d W 5 Q R X d S r   r   )
Classifierr   r   r6   r7   r7   r8   .test_negative_weights_svc_leave_just_one_labelJ  s    
r   zClassifier, modelg6<R?rf   gj+?)	when-left
when-rightgioT?zsample_weight, mask_sider   r   zpartial-mask-label-1zpartial-mask-label-2c                 C   s4   | dd}|j tt|d t|j|| gdd d S )Nr&   r'   r   MbP?)Zrtol)r-   r.   r/   r   r<   )r   modelr   Z	mask_sider6   r7   r7   r8   *test_negative_weights_svc_leave_two_labelsc  s    
r   r   c                 C   sL   | dd}|j tt|d t|j }|d tj|d ddksHt	d S )Nr&   r'   r   r   r"   r   )rel)
r-   r.   r/   rB   absr<   r   r[   r   rD   )r   r   r   Zcoefr7   r7   r8   !test_negative_weight_equal_coeffsx  s    

r   )categoryc            
      C   s$  ddl m}  ddlm} tjd d d df tjd  }}tt	|j
t|dkd d d d }t|| }|d||| d}t|dksttjdd	tjd
dd|  fD ]h}||| || |}|jdd ||| || |}	tj||ddtj||	ddkstqd S )Nr   )r   )compute_class_weightr#   r"   Zbalanced)classesrV   r&   r'   rl   r   r   macro)Zaverage)Zsklearn.linear_modelr   sklearn.utilsr   r?   r@   rA   rB   deletearanger   whereuniquer   rD   r   r,   r   r-   r4   r   r
   r   )
r   r   r.   rV   Z
unbalancedr   Zclass_weightsr6   r   Zy_pred_balancedr7   r7   r8   test_auto_weight  s0    ",
  r   c               	   C   s  t d d } tt t t|  W 5 Q R X t tjdddfD ]x}t	
t}|jd rdtt	t	t dj}|d d df }|jd rt|jd rt||| t|tt qHtjdd	}tt |tt  W 5 Q R X t tt }tt |tt W 5 Q R X t	tj}|t	t|t  tt |t W 5 Q R X t }|tt  tt || W 5 Q R X d S )
Nr!   rl   r   r   ZC_CONTIGUOUS)r#   r"   ZF_CONTIGUOUSrO   r'   )r/   r[   r\   r]   r   r,   r-   r.   r   rB   ZasfortranarrayflagsrD   ZascontiguousarrayZtilerS   r   r4   r^   r   Z
lil_matrixrZ   rR   )ZY2r6   ZXfZyfZXtr7   r7   r8   test_bad_input  s4    
r   c               	   C   sx   t jd} d}t t jj}|| j|dfd }| jdd|d}t	 }d}t
jt|d ||| W 5 Q R X d S )Nr   r   r#   )r   z2The dual coefficients or intercepts are not finiter   )rB   randomRandomStateZfinforI   maxr   r   r   r,   r[   r\   r]   r-   )rngr   Zfmaxr.   rV   r6   msgr7   r7   r8   test_svc_nonfinite_params  s    r   c                  C   sH   t jddd} | tt | t tjt	j
t	jtjdddd d S )Nr&   T)r(   r   r=   r   r>   )r   r,   r-   r.   r/   r   rS   r   rJ   r?   r@   rA   rH   rB   rI   r5   r7   r7   r8   test_unicode_kernel  s    
    r   c               	   C   sP   t jdd} tddgddgg}tjtdd | |ddg W 5 Q R X d S )NrO   r'   r"   r   zSparse precomputedr   )r   r,   r   
csr_matrixr[   r\   	TypeErrorr-   )r6   Zsparse_gramr7   r7   r8   test_sparse_precomputed  s    r   c               	   C   s|   t ddddgddddgddddgddddgg} tddddg}tjdd}|| | |jjj	rjt
|jjj	rxt
d S )Nr   r"   g{Gz?r   g{Gz?r&   r'   )r   r   rB   rZ   r   r   r-   r2   r@   r   rD   r0   )r   r   r   r7   r7   r8   %test_sparse_fit_support_vectors_empty  s    *r   losshingesquared_hingepenaltyl1l2rm   TFc              	   C   s   t dddd\}}tj|| |dd}| |fdksJ| ||fdksJ||fdkr|tjtd|| |f d	 ||| W 5 Q R X n||| d S )
Nr=   r   )r   r   r   r  r   rm   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  rm   r.   rV   r6   r7   r7   r8   test_linearsvc_parameters  s     

r  c                  C   s   t jdddtt} | js tt| t	t
 t| jdgdd t jddddd	tt} t| t	t
 t jd
dddtt} t| t	t
 t jd
dddd	} | tt t| t	t
 | t	}|dktd }t|t
 d S )Nrl   r   r   r$   rX   r  r  Fr  r  T)r  rm   r   r  r"   )r   r   r-   r.   r/   fit_interceptrD   r   r4   rS   r^   r   r3   r   rH   r   )r6   r   resr7   r7   r8   test_linearsvc  s,    
    
r
  c                  C   s   t jdddtjtj} t jdddd}|tjtj | tj|tjk dks^t| j	|j	k
 srtt|tjtj|tjdd ttj|j	j|j }t||tj d S )	Nrl   r   r   crammer_singer)rm   multi_classr   r;   r"   r   )r   r   r-   r?   r@   rA   r4   rC   rD   r<   allr   rB   r   r   rR   rS   r3   r   )Zovr_clfZcs_clfZdec_funcr7   r7   r8   test_linearsvc_crammer_singer5  s    $
r  c                  C   s  t t} t| }tjdddtt}tjd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djtt|d}|	t
}tjt|dd}tjt|dd}	tjddddd||	}
|
	t
}t|| t|j|
jdd	 d S )Nrl   r   r   r}     )rm   r   r~   r   r   r"   ru   r   r   )r`   r.   rB   rq   r   r   r-   r/   r   r4   rS   r   r<   r   r   r   )r   r   r6   Zclf_unitweightr   r   Zlsvc_unflatZpred1r   r   Z	lsvc_flatrM   r7   r7   r8   test_linearsvc_fit_sampleweightJ  sT    
          
    

r  c                  C   sL   t ddd\} }dD ]2}tjd|ddd| || |}|dkstqd S )	Nr#   r   )	n_classesr   )TFrl   r  )rm   r  r  r   r;   )r   r   r   r-   rp   rD   )r.   rV   r  accr7   r7   r8   test_crammer_singer_binarym  s       
r  c                  C   s   t jt j } tjdddt j| }t|jtt jks<t	t
|t j| kdksZt	|t j}t jt
|d }t||t j d S )Nrl   r   r   g?r"   )r?   Ztarget_namesrA   r   r   r-   r@   setrF   rD   rB   rC   r4   r   r   r   )rA   r6   r   rL   r7   r7   r8   test_linearsvc_iris  s    r  c              	   C   s   ddgddgddgddgg}ddddg}| ddddd	d
dd}|j dksRt|j |js\td|_ ||| t|jddd d|_ ||| |j}|dk std|_ ||| |j}t||dd d S )Nr#   r"   r$   r   Tr  r  Fr   gHz>)r  r  r   rm   ri   r~   r   r=   rX   r   r!   r  )Zintercept_scalingrD   r  r-   r   r3   r   )
classifierr.   rV   r6   Z
intercept1Z
intercept2r7   r7   r8   'test_dense_liblinear_intercept_handling  s0    	
r  c                  C   s   t jddtjtj} | tj}| j | _| j	 | _	| tj}t
|| ddgddgddgddgg}ddddg}t jdd||} | |}| j | _| j	 | _	| |}t|| d S )Nrl   rn   r#   r"   r$   r   )r   r   r-   r?   r@   rA   r   r<   copyr3   r   r   )r6   valuesZvalues2r.   rV   r7   r7   r8   test_liblinear_set_coef  s    


r  c               
   C   s   t jddtjtjt jddtjtjt jddtjtjt jddtjtjt j	ddtjg} | D ]T}t
t |dtd W 5 Q R X t
ttf |jdd W 5 Q R X qrd S )Nr&   r'   r<   r$   )r   r   r   )r   r,   r-   r?   r@   rA   r   r   r   r   r[   r\   r   __setattr__rB   r   RuntimeErrorr]   r<   __setitem__)Zsvmsr6   r7   r7   r8   test_immutable_coef_property  s    r  c                  C   sP   dd l } | d}| |  d d tjddd}|tt | |d d S )Nr   r"   rl   )rm   verbose)	osdupdup2piper   r   r-   r.   r/   )r   stdoutr6   r7   r7   r8   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   r7   r7   r8   r     r   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   r   )r(   r   r   r   r&   r   rX   )r   r,   r   cloner-   r?   r@   rA   r   r0   r3   r   r4   r   r   )Zsvm_callableZ
svm_clonedZsvm_builtinr7   r7   r8   #test_svc_clone_with_callable_kernel  s6    
   



r'  c               	   C   s6   t jdd d} tt | tt W 5 Q R X d S )Nc                 S   s   | S rP   r7   rT   r7   r7   r8   r     r   z%test_svc_bad_kernel.<locals>.<lambda>r'   )r   r,   r[   r\   r]   r-   r.   r/   )Zsvcr7   r7   r8   test_svc_bad_kernel  s    r(  c               	   C   s^   t jdd dddd} d}tjt|d | ttt	 W 5 Q R X t
| jdksZtd S )	Nc                 S   s   t | |jS rP   rQ   rT   r7   r7   r8   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-   rB   rZ   r.   r/   r  n_iter_rD   )awarning_msgr7   r7   r8    test_libsvm_convergence_warnings  s       r-  c               	   C   s`   d} t  }tjtdd ||  W 5 Q R X t  }tjtdd ||  W 5 Q R X d S )Nzfoo!z.*\bSVC\b.*\bnot\b.*\bfitted\br   z .*\bNuSVR\b.*\bnot\b.*\bfitted\b)r   r,   r[   r\   	Exceptionr4   r   )r.   r6   r7   r7   r8   test_unfitted  s    r/  c                  C   sR   t jdddd} | ttt}t jdddd} | ttt}t|| d S )NTr"   r   )r   r   r   )r   r,   r-   r.   r/   r   r   )r+  Zproba_1Zproba_2r7   r7   r8   test_consistent_proba&  s
    r0  c               	   C   s   t jdddd} d}tjt|d | tt W 5 Q R X t| j	t
sJt| j	dksXtt jdddd}tjt|d |tjtj W 5 Q R X t|j	t
st|j	dkstd S )Nrl   r   r#   )rm   r   r   z@Liblinear failed to converge, increase the number of iterations.r   )r   r   r[   r)  r   r-   r.   r/   
isinstancer*  r   rD   r   r?   r@   rA   )lsvcr,  rx   r7   r7   r8   $test_linear_svm_convergence_warnings/  s    r3  c                  C   s   t jddd} t jdd}tjddtjddtjddfD ]4}|| | t	|
| t | |j |j  qHd S )	N   r   r$      r&   r'   rl   rn   )rB   r   r   r   r   r   r   r   r-   r   r4   rR   r<   r   r3   )r.   rV   rz   r7   r7   r8   test_svr_coef_signB  s    


 r6  c                  C   s,   t jddd} | tt | jdks(td S )Nrl   F)rm   r  r+   )r   r   r-   r.   r/   r3   rD   )r2  r7   r7   r8    test_lsvc_intercept_scaling_zeroS  s    r7  c               	   C   s   t jdd} t| dst| tjtj t| ds8tt jdd} t| drRt| tjtj t| drptd| _t| dstd}t	j
t|d | tj W 5 Q R X d S )NT)r   r   FzApredict_proba is not available when fitted with probability=Falser   )r   r,   rE   rD   r-   r?   r@   rA   r   r[   r\   r   r   )Gr   r7   r7   r8   test_hasattr_predict_proba[  s    r9  c                  C   s`   dD ]V} t | dd\}}tjtjfD ]4}t|dd||}t||t|ks$tq$qd S )N)r#   r$   r   )r   r   r   )r   )	r   r   r,   r   r   r-   r`   r4   rD   )r  r.   rV   r   r6   r7   r7   r8   &test_decision_function_shape_two_classs  s     r:  c            	      C   sD  t ddgddgddgddgg} ddddg}t ddgddgg}t |ddg |ddg |ddg |ddg f}dgd dgd  dgd  dgd  }tjdd	d
}|| | ||}t|| ||}tt j	|dd| |t
d|f d}t |dkstt |d d df |d d df k s@td S )Nr"   r!   r   r#   r$   r=   r   r&   r   r   r   r   )r   r#   r+   )rB   rZ   vstackr   r,   r-   r4   r   r   r   r_   ZreshapeminrD   r  )	r   r   Zbase_pointsr   r   r6   r   Zdeci_valZpred_class_deci_valr7   r7   r8   test_ovr_decision_function}  s(    "



	(


r=  SVCClassc              	   C   sN   t dd\}}| ddddd||}tjtdd || W 5 Q R X d S )	Nr%   r   r&   r   T)r(   r   
break_tiesr   zbreak_ties must be Falser   )r   r-   r[   r\   r]   r4   )r>  r.   rV   r   r7   r7   r8   !test_svc_invalid_break_ties_param  s        r@  c                 C   sp  t dddd\}}t|dddf  |dddf  d}t|dddf  |dddf  d}t||\}}tdd	d
dd}| f ddi|||}|tj	|
 |
 f }	|tj	|
 |
 f }
t|	tj|
ddkrt| f ddi|||}|tj	|
 |
 f }	|tj	|
 |
 f }
t|	tj|
ddksltdS )zyTest if predict breaks ties in OVR mode.
    Related issue: https://github.com/scikit-learn/scikit-learn/issues/8277
    r   r   r#   )r   r   r   Nr   r"   r:   g    .Ar%   r   )r(   r   r   r   r?  Fr   T)r   rB   Zlinspacer<  r   Zmeshgriddictr-   r4   Zc_r   r   r  r   rD   )r>  r.   rV   ZxsZysZxxyyZcommon_paramsr   rL   Zdvr7   r7   r8   test_svc_ovr_tie_breaking  s@    ..     rC  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   r7   r7   r8   test_gamma_scale  s    rD  zSVM, params)r  r   rm   epsilon_insensitiver   rm   Zsquared_epsilon_insensitivec                 C   s  t jddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddggt dd}t jddddddddddddddddgt dd}t ||g}t |d| g}t jt|d d}d	|t|d < t|||d	d
\}}}| dd
}|jf | |jddd t	
|||}t	
|j|||d}	dD ]8}
t||
rRt||
|}t|	|
|}t|| qRd S )Nr"   r$   r#   r   float)r   r   )r   r   r   r%   r}   r  )r~   r   r   )r4   r   )rB   rZ   r   r;  Zhstackrq   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_weightr7   r7   r8   &test_linearsvm_liblinear_sample_weight  sV    " 

  rM  Klassc                 C   s|   t dgdgdgdgdgg}t |jd }|  }t|drBt||| |jd |jjd ksht|jj	dksxtd S )Nr   g)\(?g?gq=
ףp?r"   
n_support_)
rB   rZ   r   r   rE   rD   r-   rO  r2   r   )rN  r.   rV   r   r7   r7   r8   test_n_support  s    rP  c           	      C   st  dddddg}t ddgddgddgddgddgg}t dddddg}d	d
 }|||}tt ||j| | |d||}| dd||}| dd||}||||||kst||||||kstt|drDt	|
||
| t	|
||
| t|||| t|||| n,t	|||| t	|||| dS )zETest using a custom kernel that is not fed with array-like for floatszA AABzB BzA Br#   r   r"   c              	   S   s   t | d tstt| }t|}t||f}t|D ]x}t||D ]h}| | d|| d |||f< |||f  | | d|| d 7  < |||f |||f< qFq8|S )Nr   rQ  rR  )r1  strrD   r   rB   Zzerosr_   count)ZX1rJ  Z
n_samples1Z
n_samples2ra   iiZjjr7   r7   r8   string_kernel,  s    $,z9test_custom_kernel_not_array_input.<locals>.string_kernelr'   r&   rO   r   N)rB   rZ   r   rR   rS   r-   rp   rD   rE   r   r   r4   )	r   r@   r.   rV   rV  ra   Zsvc1Zsvc2Zsvc3r7   r7   r8   "test_custom_kernel_not_array_input%  s$    (
rW  c               	   C   sJ   t jddtt} d| jd< d}tjt|d | 	t W 5 Q R X dS )zCheck that SVC raises error when internal representation is altered.

    Non-regression test for #18891 and https://nvd.nist.gov/vuln/detail/CVE-2020-28975
    r&   r'   i@B r   z.The internal representation of SVC was alteredr   N)
r   r,   r-   r.   r/   Z
_n_supportr[   r\   r]   r4   )r6   r   r7   r7   r8   -test_svc_raises_error_internal_representationK  s
    
rX  zestimator, expected_n_iter_typedataset)r  Zn_informativer   r   c                 C   sj   |\}}| dd ||j}t||ks,t| tjtjfkrftt	|}|j
||d  d fksftd S )Nr&   r'   r"   r#   )r-   r*  typerD   r   r,   r   r`   rB   r   r   )r   Zexpected_n_iter_typerY  r.   rV   Zn_iterr  r7   r7   r8   test_n_iter_libsvmX  s    r[  c              	   C   sd   |  }t   t dt |tt W 5 Q R X d}tjtt	
|d t|d W 5 Q R X d S )NerrorzRAttribute `class_weight_` was deprecated in version 1.2 and will be removed in 1.4r   Zclass_weight_)warningscatch_warningssimplefilterFutureWarningr-   r.   r/   r[   r)  reescaperH  )rN  r6   r   r7   r7   r8   "test_svm_class_weights_deprecationy  s    
rc  c              	   C   s:   |  }d}t jtt|d |tt W 5 Q R X d S )NzThe default value of `dual` will change from `True` to `'auto'` in 1.5. Set the value of `dual` explicitly to suppress the warning.r   )r[   r)  r`  ra  rb  r-   r.   r/   )r   r   r   r7   r7   r8   "test_dual_auto_deprecation_warning  s
    rd  c                 C   sJ   t d| ddtt}|dks"tt d| ddttj}|dksFtd S )Nrl   r  r   FTr   rB   Zasarrayr.   rD   rS   rF  r7   r7   r8   test_dual_auto  s    rf  c                  C   sl   t ddddtt} | dks"tt ddddtt} | dksDtt ddddttj} | d	kshtd S )
Nrl   r  r  r   TrE  r  r  Fre  rn   r7   r7   r8   test_dual_auto_edge_cases  s$            
rg  )__doc__ra  r]  numpyrB   r[   Znumpy.testingr   r   r   r   Zscipyr   Zsklearnr   r   r	   r
   r   Zsklearn.datasetsr   r   Zsklearn.exceptionsr   r   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._testingr   Zsklearn.utils.validationr   r.   r/   rS   r^   Z	load_irisr?   r   ZpermutationrA   r   permr@   r9   rN   re   rs   r|   r   r   r   r   r   r   r   r   markZparametrizer,   r   r   r   r   r   r   r   r`   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r  r  r%  r'  r(  r-  r/  r0  r3  r6  r7  r9  r:  r=  r@  rC  rD  rM  rP  rW  rX  Zndarrayr   r[  rc  rd  rf  rg  r7   r7   r7   r8   <module>   sl   (

PI+	!

 


&  
$&
#%!

,


/

%






	