U
    |hc"                  	   @   s
  d Z ddlZddlZddl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mZ dZejddifejdddfejddd ifejddifejdddfejddd ifgZejdedd Zejdedd Zejdedd Z ejdedd Z!ejdddd d!d"gejded#d$ Z"d%d& Z#ejd'd(d)gejd*ej$ej%gejd+ej&ej'gejded,d- Z(ejd.ed/d0 Z)d1d2 Z*ejd3ejejgd4d5 Z+d6d7 Z,dS )8z# test the label propagation module     N)issparse)make_classification)ConvergenceWarning
rbf_kernel)train_test_split)NearestNeighbors)_label_propagation)_convert_containerassert_allcloseassert_array_equal)array
sparse_csr
sparse_csckernelrbfknn   )r   n_neighborsc                 C   s   t | |ddS N   gammar   xy r   X/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/semi_supervised/tests/test_label_propagation.py<lambda>       r   c                 C   s   t | |ddS r   r   r   r   r   r   r   "   r   zEstimator, parametersc                 C   sR   t jddgddgddgg| d}dddg}|f |||}|jd	 dksNtd S )
N      ?               @      @dtyper      r   )npasarrayfitZtransduction_AssertionErrorglobal_dtype	Estimator
parametersZsampleslabelsclfr   r   r   test_fit_transduction'   s     
r2   c                 C   sn   |d dkrt d tjddgddgddgg| d}ddd	g}|f |||}t|jd
 ddgdd d S )Nr   r   zHUnstable test for this configuration: changes in k-NN ordering break it.r    r!   r$   r   r&   r'   r         ?g{Gz?Zatol)pytestskipr(   r)   r*   r   label_distributions_r,   r   r   r   test_distribution/   s     
r8   c                 C   s^   t jddgddgddgg| d}dddg}|f |||}t|d	d
ggt dg d S )Nr    r!   r"   r#   r$   r   r&   r'   r3         @)r(   r)   r*   r   predictr   r,   r   r   r   test_predict;   s     
r;   c                 C   sb   t jddgddgddgg| d}dddg}|f |||}t|ddggt ddgg d S )	Nr    r!   r9   r$   r   r&   r'   r3   )r(   r)   r*   r   Zpredict_probar   r,   r   r   r   test_predict_probaC   s     
r<   alpha皙?g333333?r3   gffffff??c                 C   s  d}t |ddd\}}|j| dd}d|d d d< d	}tj|d
||}| }	tjt||d f|j	d}
d|
t
t||f< |
d d d df }
ttjtjt|	|	j	d||	  |
}||jddd d tjf  }tjd|d|d}||| t||j d S )Nr      r   	n_classes	n_samplesrandom_stateFcopyr'      r>   r   r&   r$   Zaxisd   绽|=)max_iterr=   tolr   )r   astypelabel_propagationLabelSpreadingr*   _build_graphr(   zeroslenr%   arangedotlinalginveyesumnewaxisr   r7   )r-   r.   r/   r=   rB   Xr   r   r1   SYexpectedr   r   r    test_label_spreading_closed_formK   s(    ,   r^   c              
   C   s  d}t |ddd\}}|j| dd}d|d d d< tt||d	 f}d	|tt||f< |d d d
f  d }|d d d
f dk d }tjdddd}|	|| |
 }|ttj||dd }	|ttj||dd }
|d d d df }||d d f }tttjt|	jd |	 |
|}| }|||d d f< ||jd	dd d tjf  }t||jdd d S )Nr   r@   r   rA   FrE   r'   rG   r&   )r'   rI   rJ   r>   )rK   rL   r   Zij)ZindexingrH   g-C6?r4   )r   rM   r(   rQ   rR   rS   ZnonzerorN   LabelPropagationr*   rP   tupleZmeshgridrT   rU   rV   rW   shaperF   rX   rY   r   r7   )r-   rB   rZ   r   r\   Zunlabelled_idxZlabelled_idxr1   ZT_barZTuuZTulZY_lZY_ur]   r   r   r   "test_label_propagation_closed_formf   s(    ,rb   accepted_sparse_typer   r   index_dtyper%   c                 C   s   t ddgddgddgg| }|jj|dd|_|jj|dd|_|jj|dd|_ddd	g}|f |||}t|d
dggt	dg d S )Nr    r!   r"   r#   FrE   r   r&   r'   r3   r9   )
r
   datarM   indicesZindptrr*   r   r:   r(   r   )rc   rd   r%   r.   r/   rZ   r0   r1   r   r   r   test_sparse_input_types   s    
rg   constructor_typec                 C   sn   t ddgddgddgg| }tdddg}tjddd	}||| |jd
k sTtt|	|dddg d S )Nr    r!   r9   r   r&   r'   r   i  r   rK   
   )
r
   r(   r   rN   rO   r*   n_iter_r+   r   r:   )rh   rZ   r   mdlr   r   r   test_convergence_speed   s    rm   c               	   C   s0  t ddgddgddgg} t dddg}tjddd}d	}tjt|d
 || | W 5 Q R X |j|j	kstt
tjddd}tjt|d
 || | W 5 Q R X |j|j	kst
tjddd}t  tdt || | W 5 Q R X tjddd}t  tdt || | W 5 Q R X d S )Nr    r!   r9   r   r&   r'   r   ri   z+max_iter=1 was reached without convergence.)match  error)r(   r   rN   rO   r5   Zwarnsr   r*   rk   rK   r+   r_   warningscatch_warningssimplefilter)rZ   r   rl   Zwarn_msgr   r   r   test_convergence_warning   s&    

rt   LabelPropagationClsc              	   C   sr   t ddgddgddgddgg}t ddddg}| dddd}t  td	t ||| W 5 Q R X d S )
Ng      Y@r!   r   r&   r'   r   rI   )r   rK   r   rp   )r(   r   rq   rr   rs   RuntimeWarningr*   )ru   rZ   r   rl   r   r   r   *test_label_propagation_non_zero_normalizer   s    	"
rw   c              	   C   s   ddd}d}d}d}t ||dddddd	\}}|| }t|||dd
\}}}	}
tj|d}|||	 |||
dks~ttj|d}|||	 |||
dkstd S )Nrj   h㈵>c                 S   sX   t dddd}||  d|j|ddd | }tj|j|jd t|sRt|j	S )	Nrj   Z	euclideanr   )r   ZmetricZn_jobsr'   Zdistance)mode)out)
r   r*   Zkneighbors_graphpowerr(   expre   r   r+   T)rZ   r\   r   r   nnWr   r   r   topk_rbf   s    
z5test_predict_sparse_callable_kernel.<locals>.topk_rbf   ro   r   r   )rB   rC   Z
n_featuresZn_informativeZn_redundantZ
n_repeatedrD   )Z	test_sizerD   )r   r?   )Nrj   rx   )	r   rM   r   rN   rO   r*   Zscorer+   r_   )r-   r   rB   rC   Zn_testrZ   r   ZX_trainZX_testZy_trainZy_testmodelr   r   r   #test_predict_sparse_callable_kernel   s4    

	
   r   )-__doc__rq   Znumpyr(   r5   Zscipy.sparser   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.metrics.pairwiser   Zsklearn.model_selectionr   Zsklearn.neighborsr   Zsklearn.semi_supervisedr	   rN   Zsklearn.utils._testingr
   r   r   ZCONSTRUCTOR_TYPESr_   rO   Z
ESTIMATORSmarkZparametrizer2   r8   r;   r<   r^   rb   Zint32Zint64Zfloat32Zfloat64rg   rm   rt   rw   r   r   r   r   r   <module>   sb   








