o
    ia"                  	   @   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g d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+d, Z)d-d. Z*ejd/ejejgd0d1 Z+d2d3 Z,dS )4z!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      t | |ddS N   gammar   xy r   n/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/semi_supervised/tests/test_label_propagation.py<lambda>       r   c                 C   r   r   r   r   r   r   r   r   "   r    zEstimator, parametersc                 C   sT   t jddgddgddgg| d}g d}|d	i |||}|jd dks(J d S )
N      ?               @      @dtyper      r   r(   r   )npasarrayfitZtransduction_global_dtype	Estimator
parametersZsampleslabelsclfr   r   r   test_fit_transduction'   s    r3   c                 C   sp   |d dkrt d tjddgddgddgg| d}g d}|di |||}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         ?g{Gz?Zatolr   )pytestskipr*   r+   r,   r   label_distributions_r-   r   r   r   test_distribution/   s    r9   c                 C   s`   t jddgddgddgg| d}g d}|d
i |||}t|ddggt d	g d S )Nr!   r"   r#   r$   r%   r'   r4         @r(   r   )r*   r+   r,   r   predictr   r-   r   r   r   test_predict;   s    "r<   c                 C   sd   t jddgddgddgg| d}g d}|di |||}t|ddggt ddgg d S )Nr!   r"   r:   r%   r'   r4   r   )r*   r+   r,   r   Zpredict_probar   r-   r   r   r   test_predict_probaC   s    &r=   alpha)皙?g333333?r4   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   r8   )r.   r/   r0   r>   rC   Xr   r   r2   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   rA   r   rB   FrF   r)   rH   r(   )r)   rJ   rK   r?   )rL   rM   r   Zij)ZindexingrI   g-C6?r5   )r   rN   r*   rR   rS   rT   ZnonzerorO   LabelPropagationr,   rQ   tupleZmeshgridrU   rV   rW   rX   shaperG   rY   rZ   r   r8   )r.   rC   r[   r   r]   Zunlabelled_idxZlabelled_idxr2   ZT_barZTuuZTulZY_lZY_ur^   r   r   r   "test_label_propagation_closed_formf   s(   ,rc   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|_g d}|di |||}t|dd	ggt	d
g d S )Nr!   r"   r#   r$   FrF   r'   r4   r:   r(   r   )
r
   datarN   indicesZindptrr,   r   r;   r*   r   )rd   re   r&   r/   r0   r[   r1   r2   r   r   r   test_sparse_input_types   s   "rh   constructor_typec                 C   sj   t ddgddgddgg| }tg d}tjddd}||| |jdk s)J t||g d	 d S )
Nr!   r"   r:   r'   r   i  r   rL   
   )r   r(   r(   )	r
   r*   r   rO   rP   r,   n_iter_r   r;   )ri   r[   r   mdlr   r   r   test_convergence_speed   s   rn   c                  C   s  t ddgddgddgg} t g d}tjddd}d}tjt|d	 || | W d    n1 s6w   Y  |j|j	ksCJ tj
ddd}tjt|d	 || | W d    n1 sbw   Y  |j|j	ksoJ tjdd
d}t  tdt || | W d    n1 sw   Y  tj
dd
d}t  tdt || | W d    d S 1 sw   Y  d S )Nr!   r"   r:   r'   r   r(   rj   z+max_iter=1 was reached without convergence.)match  error)r*   r   rO   rP   r6   Zwarnsr   r,   rl   rL   r`   warningscatch_warningssimplefilter)r[   r   rm   Zwarn_msgr   r   r   test_convergence_warning   s.   

"ru   LabelPropagationClsc                 C   s   t ddgddgddgddgg}t g d}| dddd}t  tdt ||| W d    d S 1 s;w   Y  d S )	Ng      Y@r"   )r   r(   r)   r)   r   rJ   r(   )r   rL   r   rq   )r*   r   rr   rs   rt   RuntimeWarningr,   )rv   r[   r   rm   r   r   r   *test_label_propagation_non_zero_normalizer   s   "	
"rx   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?J tj|d}|||	 |||
dksUJ d S )Nrk   h㈵>c                 S   sX   t dddd}||  d|j|ddd | }tj|j|jd t|s)J |jS )	Nrk   Z	euclideanr   )r   ZmetricZn_jobsr)   Zdistance)mode)out)	r   r,   Zkneighbors_graphpowerr*   exprf   r   T)r[   r]   r   r   nnWr   r   r   topk_rbf   s   
z5test_predict_sparse_callable_kernel.<locals>.topk_rbf   rp   r   r   )rC   rD   Z
n_featuresZn_informativeZn_redundantZ
n_repeatedrE   )Z	test_sizerE   )r   r@   )Nrk   ry   )r   rN   r   rO   rP   r,   Zscorer`   )r.   r   rC   rD   Zn_testr[   r   ZX_trainZX_testZy_trainZy_testmodelr   r   r   #test_predict_sparse_callable_kernel   s.   


	r   )-__doc__rr   numpyr*   r6   Zscipy.sparser   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.metrics.pairwiser   Zsklearn.model_selectionr   Zsklearn.neighborsr   Zsklearn.semi_supervisedr	   rO   Zsklearn.utils._testingr
   r   r   ZCONSTRUCTOR_TYPESr`   rP   Z
ESTIMATORSmarkZparametrizer3   r9   r<   r=   r_   rc   Zint32Zint64Zfloat32Zfloat64rh   rn   ru   rx   r   r   r   r   r   <module>   sd    








