U
    3‰d$=  ã                	   @   sx  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ddddddgZe ddgddgddgg¡ZdddgZ e d d d gdddgdd d gd d dgdddgg¡Z!e "e!¡Z#dddddgZ$e dddgdddgdddgg¡Z%dddg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<d%d&„ Z=e j> ?d'e@d(ƒ¡e j> ?d)d*d+d,d-g¡ed.d/„ ƒƒƒZAd0d1„ ZBd2d3„ ZCd4d5„ ZDd6d7„ ZEdS )8é    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éþÿÿÿéÿÿÿÿé   é   é   c              	   C   sX  |   | ¡ |¡ t |¡r$| ¡ }n|}|  ||¡ t |j¡sDt‚t |j¡sTt‚t| j|j ¡ ƒ t| j|j ¡ ƒ | j	dkr¤t |j
¡s’t‚t| j
|j
 ¡ ƒ t| j|jƒ t|  |¡| |¡ƒ t|  |¡| |¡ƒ t|  |¡| |¡ƒ t| tjƒrd}nt|  |¡| |¡dƒ d}t |¡rTtjt|d |  |¡ W 5 Q R X 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
isspmatrixÚissparseÚsupport_vectors_ÚAssertionErrorÚ
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-   úA/tmp/pip-unpacked-wheel-zrfo1fqw/sklearn/svm/tests/test_sparse.pyÚcheck_svm_model_equal0   sN    

 ÿ
 ÿ ÿþ  ÿ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}ddd	d
g}|D ]F}|D ]<}tjd|dddd}tjd|dddd}t||f|žŽ  qvqndS )z2Check that sparse SVC gives the same result as SVCéd   é
   r   ©Ú	n_samplesZcentersÚrandom_stateNéP   r   ÚpolyÚrbfÚsigmoidr   TÚovo)Úgammar    Úprobabilityr4   Ú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    
 üûûrL   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¬t
‚|	j	r¶t
‚tjdddd ||¡}
|
j}t| ¡ | ¡ ƒ t| |	¡| |¡ƒ d S )
NT)Z
return_X_yé2   r0   r   r   )r    r;   r4   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ÚextendrE   Úindicesr   r=   rN   )ÚXZnew_dataZnew_indicesÚiZ	row_slicer-   r-   r.   Úscramble_indicesŒ   s    z/test_unsorted_indices.<locals>.scramble_indices)r
   r   r=   r   rG   r   r!   r   r   Zhas_sorted_indicesr   r&   )rU   Úyr+   ZX_sparseZ
coef_denseZ
sparse_svcZcoef_sortedrW   ZX_sparse_unsortedZX_test_unsortedZunsorted_svcZcoef_unsortedr-   r-   r.   Útest_unsorted_indicesx   s6    
ÿ ÿ	

 ÿ ÿrY   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@   ©ÚxrX   r-   r-   r.   Úkfunc§   s    z*test_svc_with_custom_kernel.<locals>.kfuncr   ©r    )r   rG   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   r6   r7   r^   r   )r   rG   r   rD   rE   rF   r   r   r   r   r"   r!   )ÚkrK   rJ   r-   r-   r.   Útest_svc_iris¯   s     ÿ 
ÿra   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
ƒ d S )Nr   çš™™™™™¹?r9   )r    ÚCr<   r   g      ð¿g…ëQ¸å¿g…ëQ¸å?ç      ð?r   )r   rG   r   rD   rE   rF   r   r!   r@   Ú
intercept_r   r#   rU   r?   ÚnpÚdotr"   ZravelZclasses_ZastypeÚintÚarray)ZsvcrJ   ÚdecZ
predictionÚexpectedr-   r-   r.   Útest_sparse_decision_functionÁ   s    
 ÿrl   c               	   C   sV   t  ¡ } td d… }t t¡ |  t|¡ W 5 Q R X |  tt¡ t|  	t
¡tƒ d S )Nr   )r   rG   r?   r'   r(   r)   r   r>   r   r"   r@   Útrue_result)rJ   rB   r-   r-   r.   Ú
test_errorÛ   s    rn   c                  C   s¬   t jdd tt¡} t jdd tt¡}|js2t‚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   ©r4   r   ©Údecimal)r   Ú	LinearSVCr   rU   r?   r>   Úfit_interceptr   r   r!   re   r"   ÚX2rB   rA   )rJ   rK   r-   r-   r.   Útest_linearsvcç   s    
ru   c                  C   sè   t jdd tjtj¡} t jdd tj ¡ tj¡}|j| jksDt‚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   ro   r   rp   )r   rr   r   rD   rE   rF   r   rs   r   r   r!   re   r"   rf   Zargmaxr#   Zsparsifyr   )rK   rJ   Úpredr-   r-   r.   Útest_linearsvc_irisú   s     
ÿrw   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<t‚q<d S )NéÈ   r0   g-²ï§ê?gÇK7‰A`Å?r   )r3   Z
n_featuresÚweightsr4   ro   é   )Zclass_weighté´   é   )r	   r   r=   r   ZLogisticRegressionr   rr   rG   Z
set_paramsr   r"   rf   Úsumr   )ZX_Zy_rJ   Zy_predr-   r-   r.   Útest_weight  s       ÿ


ýr~   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   rd   rb   r   r1   )Úsample_weightç       @)r   rG   r   r>   r?   r   r"   rU   )rJ   r   r-   r-   r.   Útest_sample_weights&  s    r   c                   C   s   t  tj¡ d S rZ   )r   Z'test_dense_liblinear_intercept_handlingr   rr   r-   r-   r-   r.   Ú(test_sparse_liblinear_intercept_handling1  s    r‚   Údatasets_indexr   r    r   r6   r7   r8   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||f|žŽ  d S )Nr0   r1   r   r2   r5   r   )r:   r    )r   r   r=   r>   r@   rA   rC   rD   rE   r   r%   r/   )rƒ   r    rH   Ú_r   rI   rJ   rK   r-   r-   r.   Útest_sparse_oneclasssvm6  s    
ür…   c               S   C   sä  t  ddddg¡} t  ddddg¡}t  d	d	d	d	d	d	d	d	d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
dddddddddddddddddddddddddddddddddddddddddgQ¡}t | ||f¡}t  ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddgP¡}tjdd | ¡ |¡}tjdd t |¡|¡}t	|j
|j
 ¡ ƒ t	|j|j ¡ ƒ d S )Ng!ã“F³O£?gJ:oú°¹?g[“òƒˆˆ?gýñÖù·›?é   rz   é#   é   r   r   r   r   rd   g        r€   g      @r   r^   )rf   ri   r   r=   r   rG   r   r   Z
coo_matrixr   r   r   )rE   rT   rQ   rU   rX   rJ   rK   r-   r-   r.   Útest_sparse_realdataJ  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 rZ   ©r@   r[   r-   r-   r.   Ú<lambda>  ó    z<test_sparse_svc_clone_with_callable_kernel.<locals>.<lambda>Tr   )rc   r    r;   r4   c                 S   s   t  | |j¡S rZ   )rf   rg   r@   r[   r-   r-   r.   r‹     rŒ   )r   rG   r   Úcloner   r>   r?   r"   r&   rU   r   )ÚaÚbrv   r*   Z
pred_denser-   r-   r.   Ú*test_sparse_svc_clone_with_callable_kernel  s    


   ÿr   c               	   C   sF   t jddd„ dddd} d}tjt|d |  tt¡ W 5 Q R X d S )	Nr   c                 S   s
   | |j  S rZ   rŠ   r[   r-   r-   r.   r‹     rŒ   ztest_timeout.<locals>.<lambda>Tr   )rc   r    r;   r4   Úmax_iterzoSolver terminated early \(max_iter=1\).  Consider pre-processing your data with StandardScaler or MinMaxScaler.r   )r   rG   r'   Zwarnsr   r   r>   r?   )Ú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 5 Q R X t jdddd} ttd |  tt¡ t¡}W 5 Q R X t||ƒ d S )NTr   r   )r;   r‘   r4   )Úcategory)	r   rG   r   r   r   rU   r?   r&   r   )rŽ   Zproba_1Zproba_2r-   r-   r.   Útest_consistent_proba!  s    r•   )Fr'   Znumpyrf   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   ri   rU   Z
lil_matrixr>   r?   r@   rm   rt   Z
dok_matrixrA   rB   rC   Ztrue_result2Z	load_irisrD   ÚrandomZRandomStateÚrngZpermutationrF   ÚsizeÚpermrE   r=   r/   rL   rY   r_   ra   rl   rn   ru   rw   r~   r   r‚   ÚmarkZparametrizerO   r…   r‰   r   r“   r•   r-   r-   r-   r.   Ú<module>   sn   .

ûÿ	
"
'
 .	
 :