a
    ;Zèaû=  ã                	   @   sR  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	m
Z
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mZ e d
dgddgdd
gddgddgddgg¡Ze e¡Zg d¢Ze ddgddgddgg¡Zg d¢Z e g d¢g d¢g d¢g d¢g d¢g¡Z!e "e!¡Z#g d¢Z$e g d¢g d¢g d¢g¡Z%g d¢Z&e	 '¡ Z(ej) *d ¡Z+e+ ,e(j-j.¡Z/e(j0e/ e(_0e(j-e/ e(_-e 1e(j0¡e(_0dd„ Z2edd„ ƒZ3dd„ Z4d d!„ Z5ed"d#„ ƒZ6d$d%„ Z7d&d'„ Z8d(d)„ Z9d*d+„ Z:d,d-„ Z;d.d/„ Z<d0d1„ Z=e j> ?d2e@d3ƒ¡e j> ?d4g d5¢¡ed6d7„ ƒƒƒZAd8d9„ ZBd:d;„ ZCd<d=„ ZDd>d?„ ZEdS )@é    N)Úassert_array_almost_equalÚassert_array_equal)Úsparse)ÚdatasetsÚsvmÚlinear_modelÚbase)Úmake_classificationÚload_digitsÚ
make_blobs)Útest_svm)ÚConvergenceWarning)Úsafe_sparse_dot)Úignore_warningsÚskip_if_32bitéþÿÿÿéÿÿÿÿé   é   )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   )r   r   r   )r   r   r   c                 C   sn  |   | ¡ |¡ t |¡r$| ¡ }n|}|  ||¡ t |j¡sDJ ‚t |j¡sTJ ‚t| j|j ¡ ƒ t| j|j ¡ ƒ | jdkr¤t |j	¡s’J ‚t| j	|j	 ¡ ƒ t| j
|j
ƒ t|  |¡| |¡ƒ t|  |¡| |¡ƒ t|  |¡| |¡ƒ t| tjƒrd}nt|  |¡| |¡dƒ d}t |¡rjtjt|d |  |¡ W d   ƒ n1 s`0    Y  d S )NÚlinearz>cannot use sparse input in 'OneClassSVM' trained on dense dataé   z6cannot use sparse input in 'SVC' trained on dense data©Úmatch)ÚfitÚtoarrayr   Z
isspmatrixZissparseÚsupport_vectors_Ú
dual_coef_r   ÚkernelÚcoef_Zsupport_ÚpredictÚdecision_functionÚ
isinstancer   ÚOneClassSVMÚpredict_probaÚpytestÚraisesÚ
ValueError)Ú	dense_svmZ
sparse_svmZX_trainZy_trainÚX_testZX_test_denseÚmsg© r+   ú<lib/python3.9/site-packages/sklearn/svm/tests/test_sparse.pyÚcheck_svm_model_equal0   sD    

ÿ
ÿÿþÿr-   c               	   C   s¸   t dddd\} }t | ¡} tttgtttg| dd… |dd… | dd… gt	j
t	jt	j
gg}g d¢}|D ]H}|D ]>}tjd|d	dd
d}tjd|d	dd
d}t||g|¢R Ž  qrqjdS )z2Check that sparse SVC gives the same result as SVCéd   é
   r   ©Ú	n_samplesZcentersÚrandom_stateNéP   ©r   ÚpolyÚrbfZsigmoidr   TÚovo)Úgammar   Úprobabilityr2   Údecision_function_shape)r   r   Ú
csr_matrixÚX_spÚYÚTÚX2_spÚY2ÚT2ÚirisÚdataÚtargetr   ÚSVCr-   )ÚX_blobsZy_blobsr   ZkernelsÚdatasetr   ÚclfÚsp_clfr+   r+   r,   Útest_svcW   s2    
 üûûrJ   c                  C   s   t dd\} }t | dd… ¡}| d d… |d d…  } }t | ¡}tjdddd | |¡j}tjdddd ||¡}|j}t|| ¡ ƒ dd	„ }||ƒ}||ƒ}	|j	r¬J ‚|	j	r¶J ‚tjdddd ||¡}
|
j}t| ¡ | ¡ ƒ t| 
|	¡| 
|¡ƒ d S )
NT)Z
return_X_yé2   r.   r   r   )r   r9   r2   c                 S   s„   g }g }t dt| jƒƒD ]R}t| j|d |d … Ž }| | j| d d d… ¡ | | j| d d d… ¡ qtj||| jf| j	dS )Nr   r   )Úshape)
ÚrangeÚlenÚindptrÚsliceÚextendrC   Úindicesr   r;   rL   )ÚXZnew_dataZnew_indicesÚiZ	row_slicer+   r+   r,   Úscramble_indicesŒ   s    z/test_unsorted_indices.<locals>.scramble_indices)r
   r   r;   r   rE   r   r   r   r   Zhas_sorted_indicesr$   )rS   Úyr)   ZX_sparseZ
coef_denseZ
sparse_svcZcoef_sortedrU   ZX_sparse_unsortedZX_test_unsortedZunsorted_svcZcoef_unsortedr+   r+   r,   Útest_unsorted_indicesx   s0    
ÿÿ	

ÿÿrW   c                  C   sJ   dd„ } t jdd tt¡}t j| d tt¡}t| t¡| t¡ƒ d S )Nc                 S   s   t | |jƒS ©N)r   r>   ©ÚxrV   r+   r+   r,   Úkfunc§   s    z*test_svc_with_custom_kernel.<locals>.kfuncr   ©r   )r   rE   r   r<   r=   r   r    )r[   Zclf_linZ	clf_mylinr+   r+   r,   Útest_svc_with_custom_kernel¦   s    r]   c                  C   sž   dD ]”} t j| d tjtj¡}t j| d tj ¡ tj¡}t|j|j ¡ ƒ t|j	|j	 ¡ ƒ t| 
tj ¡ ¡| 
tj¡ƒ | dkrt|j|j ¡ ƒ qd S )N)r   r5   r6   r\   r   )r   rE   r   rB   rC   rD   r   r   r   r   r    r   )ÚkrI   rH   r+   r+   r,   Útest_svc_iris¯   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ƒ d S )Nr   çš™™™™™¹?r7   )r   ÚCr:   r   )ç      ð¿g…ëQ¸å¿rb   g…ëQ¸å?ç      ð?rc   r   )r   rE   r   rB   rC   rD   r   r   r>   Ú
intercept_r   r!   rS   r=   ÚnpÚdotr    ZravelZclasses_ZastypeÚintÚarray)ZsvcrH   ZdecZ
predictionZexpectedr+   r+   r,   Útest_sparse_decision_functionÁ   s    
ÿri   c                  C   sê   t  t¡$ tjdd tt¡ W d   ƒ n1 s40    Y  tjdd} t  t¡ |  t	t¡ W d   ƒ n1 sv0    Y  td d… }t  t¡ |  t	|¡ W d   ƒ n1 s¸0    Y  t ¡ } |  t	t¡ t
|  t¡tƒ d S )Nr   )ra   ç        )Znu)r%   r&   r'   r   rE   r   rS   r=   ZNuSVCr<   r   r    r>   Útrue_result)rH   r@   r+   r+   r,   Ú
test_errorÛ   s    2**rl   c                  C   s¬   t jdd tt¡} t jdd tt¡}|js2J ‚t| j|jdd t| j	|j	dd t|  
t¡| 
t¡ƒ |  tt¡ | tt¡ t| j|jdd t| j	|j	dd d S )Nr   ©r2   r   ©Zdecimal)r   Ú	LinearSVCr   rS   r=   r<   Úfit_interceptr   r   rd   r    ÚX2r@   r?   )rH   rI   r+   r+   r,   Útest_linearsvcï   s    
rr   c                  C   sè   t jdd tjtj¡} t jdd tj ¡ tj¡}|j| jksDJ ‚t|j	| j	dd t|j
| j
dd t| tj ¡ ¡|  tj¡ƒ t |  tj¡d¡}t|| tj ¡ ¡ƒ | ¡  t|| tj¡ƒ |  ¡  t||  tj¡ƒ d S )Nr   rm   r   rn   )r   ro   r   rB   rC   rD   r   rp   r   r   rd   r    re   Zargmaxr!   Zsparsifyr   )rI   rH   Úpredr+   r+   r,   Útest_linearsvc_iris  s    ÿrt   c                  C   s¢   t ddddgdd\} }t | ¡} t ¡ tjddt ¡ fD ]`}|jddid	 | 	| d d
… |d d
… ¡ | 
| d
d … ¡}t ||d
d … k¡dks<J ‚q<d S )NéÈ   r.   g-²ï§ê?gÇK7‰A`Å?r   )r1   Z
n_featuresZweightsr2   rm   é   )Zclass_weighté´   é   )r	   r   r;   r   ZLogisticRegressionr   ro   rE   Z
set_paramsr   r    re   Úsum)ZX_Zy_rH   Zy_predr+   r+   r,   Útest_weight  s    ÿ


ýrz   c                  C   sl   t  ¡ } |  tt¡ t|  td g¡dgƒ dgd dgd  }| jtt|d t|  td g¡dgƒ d S )Nr   rc   r`   r   r/   )Úsample_weightç       @)r   rE   r   r<   r=   r   r    rS   )rH   r{   r+   r+   r,   Útest_sample_weights.  s    r}   c                   C   s   t  tj¡ d S rX   )r   Z'test_dense_liblinear_intercept_handlingr   ro   r+   r+   r+   r,   Ú(test_sparse_liblinear_intercept_handling9  s    r~   Údatasets_indexr   r   r4   c                 C   sŽ   t dddd\}}t |¡}td tgtd tg|d d… d |dd … gtjd tjgg}||  }t	j
d|d}t	j
d|d}t||g|¢R Ž  d S )Nr.   r/   r   r0   r3   r   )r8   r   )r   r   r;   r<   r>   r?   rA   rB   rC   r   r#   r-   )r   r   rF   Ú_r   rG   rH   rI   r+   r+   r,   Útest_sparse_oneclasssvm>  s    
ür   c                  C   s¢   t  g d¢¡} t  g d¢¡}t  g d¢¡}t | ||f¡}t  g d¢¡}tjdd | ¡ |¡}tjdd t |¡|¡}t	|j
|j
 ¡ ƒ t	|j|j ¡ ƒ d S )N)g!ã“F³O£?gJ:oú°¹?g[“òƒˆˆ?gýñÖù·›?)é   rv   é#   é   )Qr   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   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   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )Prc   rj   r|   r|   rc   rc   rc   r|   r|   rj   rc   r|   r|   rj   r|   rj   ç      @rj   r…   rj   rc   rc   r…   r|   r…   r|   rj   r…   rc   rj   r|   rc   r|   rj   rc   rj   r|   r…   rc   r…   rj   rc   rj   rj   r|   rj   rc   r|   r|   r|   r…   r|   rj   r…   r|   rc   r|   r…   r|   r|   rj   rc   rj   rc   r|   r…   rj   rj   r|   r|   rc   r…   rc   rc   rj   rc   r|   rc   rc   r…   r   r\   )re   rh   r   r;   r   rE   r   r   Z
coo_matrixr   r   r   )rC   rR   rO   rS   rV   rH   rI   r+   r+   r,   Útest_sparse_realdataR  s    ÿUÿUr†   c                  C   sv   t jddd„ ddd} t | ¡}| tt¡ | t¡}| t¡ t jddd„ ddd}| t	t¡ t	¡}t
||ƒ d S )Nr   c                 S   s
   | |j  S rX   ©r>   rY   r+   r+   r,   Ú<lambda>  ó    z<test_sparse_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   )ra   r   r9   r2   c                 S   s   t  | |j¡S rX   )re   rf   r>   rY   r+   r+   r,   rˆ     r‰   )r   rE   r   Zcloner   r<   r=   r    r$   rS   r   )ÚaÚbrs   r(   Z
pred_denser+   r+   r,   Ú*test_sparse_svc_clone_with_callable_kernel  s    


ÿrŒ   c                  C   sZ   t jddd„ dddd} d}tjt|d |  tt¡ W d   ƒ n1 sL0    Y  d S )	Nr   c                 S   s
   | |j  S rX   r‡   rY   r+   r+   r,   rˆ     r‰   ztest_timeout.<locals>.<lambda>Tr   )ra   r   r9   r2   Úmax_iterzoSolver terminated early \(max_iter=1\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.r   )r   rE   r%   Zwarnsr   r   r<   r=   )ZspZwarning_msgr+   r+   r,   Útest_timeout  s    ÿÿrŽ   c                  C   s¦   t jdddd} ttd" |  tt¡ t¡}W d   ƒ n1 sB0    Y  t jdddd} ttd" |  tt¡ t¡}W d   ƒ n1 sŽ0    Y  t||ƒ d S )NTr   r   )r9   r   r2   )Úcategory)	r   rE   r   r   r   rS   r=   r$   r   )rŠ   Zproba_1Zproba_2r+   r+   r,   Útest_consistent_proba)  s    00r   )Fr%   Znumpyre   Znumpy.testingr   r   Zscipyr   Zsklearnr   r   r   r   Zsklearn.datasetsr	   r
   r   Zsklearn.svm.testsr   Zsklearn.exceptionsr   Zsklearn.utils.extmathr   Zsklearn.utils._testingr   r   rh   rS   Z
lil_matrixr<   r=   r>   rk   rq   Z
dok_matrixr?   r@   rA   Ztrue_result2Z	load_irisrB   ZrandomZRandomStateÚrngZpermutationrD   ÚsizeZpermrC   r;   r-   rJ   rW   r]   r_   ri   rl   rr   rt   rz   r}   r~   ZmarkZparametrizerM   r   r†   rŒ   rŽ   r   r+   r+   r+   r,   Ú<module>   sn   .
ûÿ	
'
 .	
 :