o
    ×tBh¯Ç  ã                   @   s*  d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddlm%Z% ddl&m'Z' ddl&m(Z(m)Z) ddl*m+Z+ ddlm,Z, ddgddgddgddgddgddggZ-g d¢Z.ddgddgddggZ/g d¢Z0e 1¡ Z2e dƒZ3e3 4e2j5j6¡Z7e2j8e7 e2_8e2j5e7 e2_5dd„ Z9d d!„ Z:d"d#„ Z;d$d%„ Z<d&d'„ Z=d(d)„ Z>d*d+„ Z?d,d-„ Z@d.d/„ ZAd0d1„ ZBd2d3„ ZCd4d5„ ZDd6d7„ ZEd8d9„ ZFejG Hd:ejIejJf¡d;d<„ ƒZKd=d>„ ZLd?d@„ ZMejG HdAejIdBdCe J¡ g¡dDdE„ ƒZNejG HdAejOdBdCejPdBdCg¡dFdG„ ƒZQdHdI„ ZRejGjHdJejIdKfejJdLfejOdKfejPdKfejSdKfgg dM¢dNejGjHdOdgeTe.ƒ dPgeTe.ƒ gdQdRgdNdSdT„ ƒƒZUejGjHdUejIdVfejJdWfgdXdYgdNejGjHdOg dZ¢g d[¢gd\d]gdNd^d_„ ƒƒZVejGjHd`ejIdadbgdbdcgddœfejJdedegdedegddœfgdXdYgdNejGjHdfg dg¢dhfg di¢djfgdkdlgdNdmdn„ ƒƒZWejGjHdoejIejJejPgg dp¢dNejGjHdOg dg¢g di¢gdkdlgdNdqdr„ ƒƒZXe"e)dsdtdu„ ƒZYdvdw„ ZZdxdy„ Z[ejG HdzejIej1d{d|fejJej1d{d|fejOej\d{d|fejPej\d{d|fejSej1d{d|fg¡ejG Hd}d~dd€e ]dd‚g¡dƒe ]dd‚g¡›d„fg dƒg › d„fi d…fg¡d†d‡„ ƒƒZ^dˆd‰„ Z_dŠd‹„ Z`dŒd„ ZadŽd„ Zbdd‘„ Zcd’d“„ Zdd”d•„ Zed–d—„ Zfd˜d™„ Zgdšd›„ Zhejfdœd„ZidždŸ„ Zjd d¡„ Zkd¢d£„ Zld¤d¥„ Zmd¦d§„ Znd¨d©„ Zodªd«„ Zpe"d¬d­„ ƒZqd®d¯„ Zrd°d±„ Zsd²d³„ Ztd´dµ„ Zud¶d·„ Zvd¸d¹„ Zwdºd»„ ZxejG Hd¼ejIejJg¡d½d¾„ ƒZyejG Hd¼ejIejJg¡d¿dÀ„ ƒZzdÁdÂ„ Z{ejG HdÃedÄdÅdÆdÇœfedÈdÅd{dÇœfedÈdÅdÆdÇœfedÈdÉd{dÇœfedÊd{dËœfedÌd{dËœfedÌd{dËœfg¡dÍdÎ„ ƒZ|dÏdÐ„ Z}ejG HdoejIejOg¡dÑdÒ„ ƒZ~dÓdÔ„ ZejG HdÕejIej€fejJej€fejOefejPefejSefg¡ejG HdÖedddd×edddd×edØdØdd×g¡dÙdÚ„ ƒƒZ‚dS )Ûzr
Testing for Support Vector Machine module (sklearn.svm)

TODO: remove hard coded numerical results when possible
é    N)Úassert_array_equalÚassert_array_almost_equal)Úassert_almost_equal)Úassert_allclose)Úsparse)ÚsvmÚlinear_modelÚdatasetsÚmetricsÚbase)Ú	LinearSVC)Ú	LinearSVR)Útrain_test_split)Úmake_classificationÚ
make_blobs)Úf1_score)Ú
rbf_kernel)Úcheck_random_state)Úignore_warnings)Ú_num_samples)Úshuffle)ÚConvergenceWarning)ÚNotFittedErrorÚUndefinedMetricWarning)ÚOneVsRestClassifier)Ú_libsvméþÿÿÿéÿÿÿÿé   é   )r   r   r   r   r   r   é   )r   r   r   é*   c                  C   sp   t jdd tt¡} t| jddggƒ t| jddgƒ t| jtd td fƒ t| j	dgƒ t|  
t¡tƒ d S )NÚlinear©Úkernelç      Ð¿ç      Ð?r   r    ç        )r   ÚSVCÚfitÚXÚYr   Ú
dual_coef_Úsupport_Úsupport_vectors_Ú
intercept_Úpredict©Úclf© r3   úq/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/svm/tests/test_svm.pyÚtest_libsvm_parameters/   s   r5   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s¦J ‚tjtjtj tj¡d	dd
d}t |tjk¡dksÂJ ‚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Úmeanr0   Úhasattrr   Úclasses_Úsortr   ÚastypeÚfloat64Úcross_validation)Úkr2   Ú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Úpred2r3   r3   r4   Útest_libsvm_iris9   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©rF   ÚdotÚT©ÚxÚyr3   r3   r4   Úkfuncª   s   ztest_precomputed.<locals>.kfuncr"   g®Gáz®ï?r   ©Údecimal)r   r(   rF   r`   r*   Úarrayra   r)   r+   r0   ÚpytestÚraisesÚ
ValueErrorr   r,   r-   r/   r   Útrue_resultÚ
zeros_likeÚrangeÚlenrC   rD   rE   r   rG   )r2   ÚKÚKTrY   ÚiÚjre   Úclf2r3   r3   r4   Útest_precomputed‰   s`   
ÿ


ÿ






$ÿ
ru   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$   ry   ©ry   g{®Gáz”?)r	   Úload_diabetesr   ÚNuSVRÚSVRr   r)   rD   rE   ÚscorerF   Úonesro   )Údiabetesr2   r3   r3   r4   Ú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)   rD   rE   r€   r   r   rF   ÚlinalgÚnormr8   r   )r‚   ÚlsvrÚscore1ÚsvrÚscore2r3   r3   r4   Ú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'  )ry   ÚtolÚmax_iter©Úsample_weightr   r…   r   r   é
   ©Úaxis)r	   r}   ro   rE   rF   r   r   r   r)   rD   r€   r   r†   r‡   r8   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Úscore4r3   r3   r4   Ú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'   rw   g      à?c                 S   s   t  dgg¡S )Nrw   )rF   rh   rb   r3   r3   r4   Ú<lambda>"  ó    z!test_svr_errors.<locals>.<lambda>r#   )r   r   r)   ri   rj   rk   r0   ©r*   rd   r2   r3   r3   r4   Útest_svr_errors  s   "ÿr¦   c                     s¤   t  ¡ ‰ ˆ  t¡ ˆ  t¡} t| g d¢ƒ | jt d¡ksJ ‚t	ˆ j
dgdd t	ˆ jg d¢gdd t t¡ ‡ fdd„ƒ  W d   ƒ d S 1 sKw   Y  d S )	N)r   r   r   Úintpg°rh‘í|ó¿r    rf   )ç      è?r¨   r¨   r¨   c                      s   ˆ j S r^   )r8   r3   r1   r3   r4   r£   3  s    ztest_oneclass.<locals>.<lambda>)r   ÚOneClassSVMr)   r*   r0   ra   r   ÚdtyperF   r   r/   r,   ri   rj   ÚAttributeError)rY   r3   r1   r4   Útest_oneclass(  s   

"ÿr¬   c            
      C   s
  t  ¡ } tdƒ}d| dd¡ }tj|d |d f }d| dd¡ }tj|d |d f }|jdddd}t jd	d
d	d} |  |¡ |  |¡}t 	|dk¡dk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çš™™™™™¹?r6   )rx   r$   Úgammar   r7   r   r   )r   r©   r   ÚrandnrF   Úr_Úuniformr)   r0   rG   Údecision_functionr   Úravel)
r2   Úrndr*   ÚX_trainÚX_testÚ
X_outliersÚy_pred_testÚy_pred_outliersÚdec_func_testÚdec_func_outliersr3   r3   r4   Útest_oneclass_decision_function6  s"   




rÄ   c                  C   sT   ddgddgddgg} t jdd | ¡}t| ddgg¡| ddgg¡|j ƒ d S )Nr   r   ©r¶   g       @)r   r©   r)   r   Úscore_samplesrº   Úoffset_)r½   r2   r3   r3   r4   Útest_oneclass_score_samplesT  s   þrÈ   c                  C   sn   t  ¡ } dd dœ}d| ¡ › d}tjtt |¡d | jt	fi |¤Ž W d   ƒ d S 1 s0w   Y  d S )NÚ )Úunused_paramÚextra_paramz¡Passing additional keyword parameters has no effect and is deprecated in 1.0. An error will be raised from 1.2 and beyond. The ignored keyword parameter(s) are: Ú.©Úmatch)
r   r©   Úkeysri   ÚwarnsÚFutureWarningÚreÚescaper)   r*   )r2   ÚparamsÚmsgr3   r3   r4   Ú&test_oneclass_fit_params_is_deprecated^  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"   rw   r{   r%   r&   çš™™™™™¹¿r   r'   r   )r   r(   r)   r*   r+   r   r,   r0   rF   rh   Ú_dual_coef_r1   r3   r3   r4   Útest_tweak_paramsm  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   rw   )Úprobabilityrš   ry   )rÚ   rš   r   r7   é   )r   r(   ÚNuSVCr)   rC   rD   rE   Úpredict_probar   rF   Úsumr   ÚshaperG   Úargmaxr0   r   ÚexpÚpredict_log_proba)r2   Úprob_predictr3   r3   r4   Útest_probability|  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$   ry   Údecision_function_shaper   )ç      ð¿g…ëQ¸å¿rç   g…ëQ¸å?rw   rw   r   r6   r   )r$   r¶   ræ   rÅ   )r   r(   r)   rC   rD   rE   rF   r`   r8   ra   r/   r   rº   r*   r+   r0   r»   rI   rK   Úintrh   r   r.   r¶   r,   )r2   ÚdecÚ
predictionÚexpectedÚrbfsr3   r3   r4   Útest_decision_function  s&   ÿ
ÿrí   ÚSVMc           	      C   sH  | 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 ‚tjtdd | dd  ||¡ W d   ƒ d S 1 sw   Y  d S )Nr"   Úovr©r$   ræ   r    r   r“   éP   r@   r   )r—   Úcentersrš   ©rš   rå   r’   zmust be either 'ovr' or 'ovo'rÍ   Úbad©ræ   )r)   rC   rD   rE   rº   rß   ro   r   r0   rF   rà   r   r   ri   rj   rk   )	rî   r2   ré   r*   rd   r½   r¾   Úy_trainÚy_testr3   r3   r4   Útest_decision_function_shape°  s$   ÿ

"ÿrø   c                  C   sª   t j} t j}tjddd | |¡}t | |jj	¡|j
 }t| ¡ | | ¡ ¡ ƒ tjddd | |¡}t| |j|jd}t ||jj	¡|j
 }t| ¡ | | ¡ ¡ ƒ d S )Nr"   rµ   r{   r6   r   )r$   r¶   rÅ   )rC   rD   rE   r   r   r)   rF   r`   r8   ra   r/   r   r»   r0   r   r.   r¶   r,   )r*   rd   Úregré   rì   r3   r3   r4   Útest_svr_predictÎ  s   rú   c                  C   sÈ   t jddid} |  tt¡ t|  t¡dgd ƒ tdddd	gdd
\}}t 	¡ t j
ddt  ¡ fD ]/} | jdddœd |  |d d… |d d… ¡ |  |dd … ¡}t|dd … |ƒdksaJ ‚q2d S )Nr   rµ   ©Úclass_weightr   é   éÈ   r’   g-²ï§ê?gÇK7‰A`Å?)r—   Ú
n_featuresÚweightsrš   r   ró   )r   r   r®   r­   )r   r(   r)   r*   r+   r   r0   r   r   ÚLogisticRegressionr   Ú
set_paramsr   )r2   ÚX_Úy_Úy_predr3   r3   r4   Útest_weightä  s   
ÿ
ýør  Ú	estimatorç{®Gáz„?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ç   rw   ©rz   rµ   rµ   rµ   rµ   r’   ©rw   rµ   rz   rz   rµ   rµ   )r  r)   r+   rº   ri   Úapprox©r  r*   r‘   r  r3   r3   r4   Ú'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ç   rw   g      ø?r	  r
  )r  r)   r+   r0   ri   r  r  r3   r3   r4   Ú&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*   r+   r,   r  rF   r–   ro   r   )r2   Údual_coef_no_weightr3   r3   r4   Ú$test_svm_equivalence_sample_weight_C/  s   r  zEstimator, err_msgz:Invalid input - all samples have zero or negative weights.z6(negative dimensions are not allowed|nu is infeasible))r(   rÜ   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#   rÍ   r   ©ri   rj   rk   r)   r*   r+   )Ú	EstimatorÚerr_msgr‘   Úestr3   r3   r4   Ú-test_negative_sample_weights_mask_all_samples9  ó   
"ÿr  zClassifier, err_msgzEInvalid input - all samples with positive weights have the same labelzspecified nu is infeasibler(   rÜ   )r   ç      à¿r   r   r   r   )r   r   r   r   r×   r  zmask-label-1zmask-label-2c                 C   r  r  r  )Ú
Classifierr  r‘   r2   r3   r3   r4   Ú.test_negative_weights_svc_leave_just_one_labelO  r  r  zClassifier, modelg6<½R–Ù?rv   gÕçj+ö—Ù?)ú	when-leftú
when-rightgioð…ÉTÕ?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*   r+   r   r8   )r  Úmodelr‘   Ú	mask_sider2   r3   r3   r4   Ú*test_negative_weights_svc_leave_two_labelse  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*   r+   rF   Úabsr8   r»   ri   r  )r  r‘   r  Úcoefr3   r3   r4   Ú!test_negative_weight_equal_coeffsz  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sLJ ‚tjdd	tjdd
| ƒ fD ]4}| || || ¡ |¡}|jdd | || || ¡ |¡}	tj||ddtj||	ddksŽJ ‚qZd S )Nr   )r  )Úcompute_class_weightr   r   Úbalanced)Úclassesrd   r"   r#   ró   rû   Úmacro)Úaverage)Úsklearn.linear_modelr  Úsklearn.utilsr+  rC   rD   rE   rF   ÚdeleteÚaranger´   ÚwhereÚuniquerà   r   r(   r   r)   r0   r  r
   r   )
r  r+  r*   rd   Ú
unbalancedr-  Úclass_weightsr2   r  Úy_pred_balancedr3   r3   r4   Útest_auto_weightŠ  s.   ",

ýþýÿôr9  c                  C   s‚  t  t¡ tjdd tt¡ W d   ƒ n1 sw   Y  tjdd} t  t¡ |  tt¡ W d   ƒ n1 s;w   Y  td d… }t  t¡ |  t|¡ W d   ƒ n1 s\w   Y  t ¡ tj	ddfD ]<} t
 t¡}|jd ryJ ‚t
 t
 td¡j¡}|d d …df }|jd	 r’J ‚|jd r™J ‚|  ||¡ t|  t¡tƒ qktjd
d} t  t¡ |  tt¡ W d   ƒ n1 sÄw   Y  t ¡  tt¡} t  t¡ |  t t¡¡ W d   ƒ n1 séw   Y  t
 t¡j}|  t
 t|¡t¡ t  t¡ |  t¡ W d   ƒ n	1 sw   Y  t ¡ } |  tt¡ t  t¡ |  |¡ W d   ƒ d S 1 s:w   Y  d S )Nr   r|   r'   )rx   r   ró   ÚC_CONTIGUOUS)r   r   ÚF_CONTIGUOUSr\   r#   )ri   rj   rk   r   r(   r)   r*   r+   rÜ   r   rF   ÚasfortranarrayÚflagsÚascontiguousarrayÚtilera   r   r0   rl   r   Ú
lil_matrixrh   r`   )r2   ÚY2ÚXfÚyfÚXtr3   r3   r4   Útest_bad_input¯  sL   ÿÿÿ
ÿÿÿ$ÿrE  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Í   )rF   ÚrandomÚRandomStateÚfinforL   Úmaxr¹   r•   r   r(   ri   rj   rk   r)   )Úrngr—   Úfmaxr*   rd   r2   rÕ   r3   r3   r4   Útest_svc_nonfinite_paramsÞ  s   "ÿrL  zEstimator, dataT)Ú
return_X_yzgamma, err_msg)Úauto_deprecatedz?When 'gamma' is a string, it should be either 'scale' or 'auto')r   zvgamma value must be > 0; -1 is invalid. Use a positive number or use 'auto' to set gamma to a value of 1 / n_features.)r'   zwgamma value must be > 0; 0.0 is invalid. Use a positive number or use 'auto' to set gamma to a value of 1 / n_features.rw   g      @zLThe gamma value should be set to 'scale', 'auto' or a positive float value. z is not a valid optionzdThe gamma value should be set to 'scale', 'auto' or a positive float value. {} is not a valid optionc                 C   sX   |\}}| |d}t jtt |¡d | ||¡ W d   ƒ d S 1 s%w   Y  d S )NrÅ   rÍ   )ri   rj   rk   rÒ   rÓ   r)   )r  rD   r¶   r  r*   rd   r  r3   r3   r4   Útest_svm_gamma_errorì  s
   0
"ÿrO  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   rA   )r   r(   r)   r*   r+   rÝ   ra   r   rM   rC   rD   rE   rK   rF   rL   r1   r3   r3   r4   Útest_unicode_kernel"  s   

ÿrP  c                  C   sf   t jdd} t 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 )Nr\   r#   r   r   zSparse precomputedrÍ   )r   r(   r   Ú
csr_matrixri   rj   Ú	TypeErrorr)   )r2   Úsparse_gramr3   r3   r4   Útest_sparse_precomputed,  s
   "ÿrT  c                  C   sh   t  g d¢g d¢g d¢g d¢g¡} t g d¢¡}tjdd}| | |¡ |jjj	r+J ‚|j
jj	r2J ‚d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   )ç{®Gáz¤?rU  rµ   g{®GázÄ?r"   r#   )r   rQ  rF   rh   r   r   r)   r.   rD   r´   r,   )r½   rö   r#  r3   r3   r4   Ú%test_sparse_fit_support_vectors_empty3  s   ÿrV  c            	   	   C   s$  g d¢} g d¢ddg}}t ddd\}}t | ||¡D ]Q\}}}tj|||d}||fdksD|||fd	ksD||fd
ksD|dksD|dkrgtjtd|||f d | ||¡ W d   ƒ n1 saw   Y  q| ||¡ qtjtdd tjdd ||¡ W d   ƒ d S 1 s‹w   Y  d S )N)ÚhingeÚsquared_hingeÚlogistic_regressionÚfoo)Úl1Úl2ÚbarTFr@   )r—   rÿ   ©ÚpenaltyÚlossÚdual)rW  r[  )rW  r\  F)r[  TrZ  r]  z<Unsupported set of arguments.*penalty='%s.*loss='%s.*dual=%srÍ   z.*loss='l3' is not supported.*Úl3©r`  )	r   Ú	itertoolsÚproductr   r   ri   rj   rk   r)   )	ÚlossesÚ	penaltiesÚdualsr*   rd   r`  r_  ra  r2   r3   r3   r4   Útest_linearsvc_parameters?  s.   ÿþû€"ÿri  c                  C   s¨   dgdggddg} }d}t jt|d tjdd | |¡ W d   ƒ n1 s)w   Y  d	}t jt|d tjd
d | |¡ W d   ƒ d S 1 sMw   Y  d S )Nr'   rw   r   r   z%loss='SQuared_hinge' is not supportedrÍ   ÚSQuared_hingerc  zIThe combination of penalty='L2' and loss='squared_hinge' is not supportedÚL2)r_  )ri   rj   rk   r   r   r)   )r*   rd   rÕ   r3   r3   r4   Ú4test_linear_svx_uppercase_loss_penality_raises_error_  s   ÿ"ÿrl  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    rf   r[  rX  F)r_  r`  ra  rš   r\  T)r_  ra  rš   rW  r   )r   r   r)   r*   r+   Úfit_interceptr   r0   ra   rl   r   r/   rº   rK   rè   )r2   ré   Úresr3   r3   r4   Útest_linearsvcn  s$   
ÿþ
ro  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š   r7   r   r“   )r   r   r)   rC   rD   rE   r0   rG   r8   Úallr   rF   rà   rº   r`   ra   r/   r   )Úovr_clfÚcs_clfÚdec_funcr3   r3   r4   Útest_linearsvc_crammer_singer  s   $
þrv  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“   )ro   r*   rF   r   r   r   r)   r+   r   r0   ra   r   r8   r   r•   r–   )r—   r˜   r2   Úclf_unitweightrš   r›   Úlsvc_unflatÚpred1rž   rŸ   Ú	lsvc_flatrZ   r3   r3   r4   Útest_linearsvc_fit_sampleweight¢  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š   )TFrp  )rm  rq  rš   r7   )r   r   r   r)   r€   )r*   rd   rm  Úaccr3   r3   r4   Útest_crammer_singer_binaryÄ  s   ýù	ör  c                  C   sŒ   t jt j } tjdd t j| ¡}t|jƒtt jƒksJ ‚t	 
| t j¡| k¡dks,J ‚| t j¡}t jt	 |d¡ }t|| t j¡ƒ d S )Nr   ró   gš™™™™™é?r   )rC   Útarget_namesrE   r   r   r)   rD   ÚsetrI   rF   rG   r0   rº   rà   r   )rE   r2   ré   rY   r3   r3   r4   Útest_linearsvc_irisÕ  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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   Tr[  rX  Fr±   gH¯¼šò×z>r   )rm  r_  r`  ra  ry   rŽ   rš   r@   rf   r®   r   rw  )Úintercept_scalingrm  r)   r   r/   r   )Ú
classifierr*   rd   r2   Ú
intercept1Ú
intercept2r3   r3   r4   Ú'test_dense_liblinear_intercept_handlingâ  s0   ù	
rˆ  c                  C   s¼   t  ¡  tjtj¡} |  tj¡}| j ¡ | _| j	 ¡ | _	|  tj¡}t
||ƒ ddgddgddgddgg}g d¢}t  ¡  ||¡} |  |¡}| j ¡ | _| j	 ¡ | _	|  |¡}t||ƒ d S )Nr   r   r    rƒ  )r   r   r)   rC   rD   rE   rº   r8   Úcopyr/   r   r   )r2   ÚvaluesÚvalues2r*   rd   r3   r3   r4   Útest_liblinear_set_coef  s   


rŒ  c               	   C   sô   t jdd tjtj¡t jdd tjtj¡t jdd tjtj¡t jdd tjtj¡t j	dd tj¡g} | D ]>}t
 t¡ | dt d¡¡ W d   ƒ n1 sTw   Y  t
 ttf¡ |j dd¡ W d   ƒ n1 srw   Y  q9d S )Nr"   r#   r8   r    )r   r   r   )r   r(   r)   rC   rD   rE   rÜ   r   r~   r©   ri   rj   r«   Ú__setattr__rF   r3  ÚRuntimeErrorrk   r8   Ú__setitem__)Úsvmsr2   r3   r3   r4   Útest_immutable_coef_property  s   ûÿÿ€ýr‘  c                  C   sN   dd l } |  d¡}|  |  ¡ d d¡ tjdd}| tt¡ |  |d¡ d S )Nr   r   )Úverbose)	ÚosÚdupÚdup2Úpiper   r   r)   r*   r+   )r“  Ústdoutr2   r3   r3   r4   Útest_linearsvc_verbose,  s   
r˜  c                  C   sÄ   t jdd„ dddd} t | ¡}| tjtj¡ t jddddd}| tjtj¡ t|j	|j	ƒ t|j
|j
ƒ t| tj¡| tj¡ƒ t| tj¡| tj¡dd	 t| tj¡| tj¡ƒ d S )
Nc                 S   r]   r^   r_   rb   r3   r3   r4   r£   ?  r¤   z5test_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   rï   )r$   rÚ   rš   ræ   r"   r±   rf   )r   r(   r   Úcloner)   rC   rD   rE   r   r,   r/   r   r0   rÝ   rº   )Úsvm_callableÚ
svm_clonedÚsvm_builtinr3   r3   r4   Ú#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 r^   r3   rb   r3   r3   r4   r£   ]  s    z%test_svc_bad_kernel.<locals>.<lambda>r#   )r   r(   ri   rj   rk   r)   r*   r+   )Úsvcr3   r3   r4   Ú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   r]   r^   r_   rb   r3   r3   r4   r£   d  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(   ri   rÐ   r   r)   rF   rh   r*   r+   rr  Ún_iter_)ÚaÚwarning_msgr3   r3   r4   Ú test_libsvm_convergence_warningsb  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(   ri   rj   Ú	Exceptionr0   r~   )r*   r2   r3   r3   r4   Útest_unfittedo  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¡  Úproba_1Úproba_2r3   r3   r4   Ú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   ri   rÐ   r   r)   r*   r+   Ú
isinstancer   rè   r   rC   rD   rE   )Úlsvcr¢  rˆ   r3   r3   r4   Ú$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#   )rF   rF  rG  r·   r   r   r~   r   r)   r   r0   r`   r8   r»   r/   )r*   rd   rŠ   r3   r3   r4   Útest_svr_coef_sign˜  s   "ÿþr®  c               	   C   s^   dD ]*} t j| d}d|j }tjt|d | tt¡ W d   ƒ n1 s'w   Y  qd S )N)r   r   )r„  zqIntercept scaling is %r but needs to be greater than 0. To disable fitting an intercept, set fit_intercept=False.rÍ   )	r   r   r„  ri   rj   rk   r)   r*   r+   )rr   rª  rÕ   r3   r3   r4   Ú!test_linear_svc_intercept_scaling¥  s   ýÿÿ€÷r¯  c                  C   s*   t jdd} |  tt¡ | jdksJ ‚d S )NF)rm  r'   )r   r   r)   r*   r+   r/   )rª  r3   r3   r4   Ú test_lsvc_intercept_scaling_zeroµ  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(   rH   r)   rC   rD   rE   rÚ   ri   rj   r   rÝ   )ÚGrÕ   r3   r3   r4   Útest_hasattr_predict_proba½  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)   ro   r0   )r}  r*   rd   r  r2   r3   r3   r4   Ú&test_decision_function_shape_two_classÕ  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'   )rF   rh   Úvstackr   r(   r)   r0   r   rº   rà   rn   ÚreshapeÚminrr  )	r½   rö   Úbase_pointsr¾   r÷   r2   r  Údeci_valÚpred_class_deci_valr3   r3   r4   Útest_ovr_decision_functionß  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)   ri   rj   rk   r0   )r»  r*   rd   r   r3   r3   r4   Ú!test_svc_invalid_break_ties_param  s   ÿþ"ÿr½  c                 C   sn  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¡r~J ‚| dddi|¤Ž ||¡}| tj	| 
¡ | 
¡ f ¡}	| tj	| 
¡ | 
¡ f ¡}
t |	tj|
ddk¡sµJ ‚dS )zyTest if predict breaks ties in OVR mode.
    Related issue: https://github.com/scikit-learn/scikit-learn/issues/8277
    r   r¯   r   )rš   r—   rÿ   Nr®   r   r6   g    €„.Ar!   rï   )r$   r¶   rš   ræ   r¼  Fr“   Tr3   )r   rF   Úlinspacer¶  rI  ÚmeshgridÚdictr)   r0   Úc_r»   rº   rr  rà   )r»  r*   rd   ÚxsÚysÚxxÚyyÚcommon_paramsr   rY   Údvr3   r3   r4   Útest_svc_ovr_tie_breaking  s6   ..ÿÿþýÿþý rÈ  c                  C   s:   dgdggddg} }t  ¡ }| | |¡ t|jdƒ d S )Nr'   rw   r   r   r±   )r   r(   r)   r   Ú_gammar¥   r3   r3   r4   Útest_gamma_scale6  s   rÊ  zSVM, paramsr[  rX  Fr^  r\  rW  Úepsilon_insensitive)r`  ra  Ú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||
ƒr·t||
ƒ|ƒ}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   rw  )rŽ   r   r   )r0   rº   r3   )rF   rh   rª   r´  Úhstackr   ro   r   r  r   r™  r)   rH   Úgetattrr   )rî   rÔ   r*   rd   ÚX2Úy2r‘   Úbase_estimatorÚest_no_weightÚest_with_weightÚmethodÚX_est_no_weightÚX_est_with_weightr3   r3   r4   Ú&test_linearsvm_liblinear_sample_weight>  sT   ðíÿ

ÿ

€ürØ  c                  C   sÊ   t  dgdgdgdgdgg¡} t ¡ }t|dƒrJ ‚| | ¡ |j|jjd ks*J ‚|jj	dks2J ‚|jdks9J ‚t  
| jd ¡}t ¡  | |¡}|j|jjd ksTJ ‚|jj	dks\J ‚|jdkscJ ‚d S )	Nr   g)\Âõ(Ü?gÍÌÌÌÌÌÜ?gq=
×£pÝ?r   Ú
n_support_r    r±   )rF   rh   r   r©   rH   r)   rÙ  r.   rß   r´   r3  r   )r*   r2   rd   rù   r3   r3   r4   Útest_n_support_oneclass_svry  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ƒrœt| 	|¡| 	|¡ƒ 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   rF   Úzerosrn   Úcount)ÚX1rÐ  Ú
n_samples1Ú
n_samples2rp   ÚiiÚjjr3   r3   r4   Ústring_kernel“  s   $,ýz9test_custom_kernel_not_array_input.<locals>.string_kernelr#   r"   r\   rº   N)rF   rh   r   r`   ra   r)   r€   rH   r   rº   r0   )	r  rD   r*   rd   rå  rp   Úsvc1Úsvc2Úsvc3r3   r3   r4   Ú"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 )z¡Check 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+   Ú
_n_supportri   rj   rk   r0   )r2   rÕ   r3   r3   r4   Ú-test_svc_raises_error_internal_representation²  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Ü   ro   rF   r5  rß   )r  Úexpected_n_iter_typerì  r*   rd   Ún_iterr}  r3   r3   r4   Útest_n_iter_libsvm¿  s   þrñ  )ƒÚ__doc__ÚnumpyrF   rd  ri   rÒ   Únumpy.testingr   r   r   r   Úscipyr   Úsklearnr   r   r	   r
   r   Úsklearn.svmr   r   Úsklearn.model_selectionr   Úsklearn.datasetsr   r   Úsklearn.metricsr   Úsklearn.metrics.pairwiser   r1  r   Úsklearn.utils._testingr   Úsklearn.utils.validationr   r   Úsklearn.exceptionsr   r   r   Úsklearn.multiclassr   r   r*   r+   ra   rl   Ú	load_irisrC   rJ  ÚpermutationrE   r´   ÚpermrD   r5   r[   ru   rƒ   rŒ   r¢   r¦   r¬   rÄ   rÈ   rÖ   rÙ   rä   rí   ÚmarkÚparametrizer(   rÜ   rø   rú   r  r  r   r~   r  r  r©   ro   r  r  r%  r)  r9  rE  rL  r}   rh   rO  rP  rT  rV  ri  rl  ro  rv  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ë  Úndarrayrè   rñ  r3   r3   r3   r4   Ú<module>   s    (
PI)
!

 

û÷ýþû÷ýþúýÿý
$/ûþ
ÿþÿþþäþ%
 "%!

,

ùþ
/
%

ûþ
ýþ