B
    0d8              	   @   sP  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 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 edddddgdddddgdddddggZdZ ej!\Z"Z#ee eddd\Z$Z%dDddZ&dd Z'dEddZ(e j)j*de$e+e$gd d!gd"dFd#d$Z,d%d& Z-e j)j*de$e+e$gd d!gd"dGd'd(Z.e j)/d)e j)/d*e j)/d+dHd,d-Z0e j)/d)e j)/d*e j)/d+d.d/ Z1e j)/d0dId1d2Z2dJd3d4Z3dKd5d6Z4dLd7d8Z5d9d: Z6d;d< Z7d=d> Z8e j)*d?d@dAgdBdC Z9dS )M    N)sparse)csgraph)eigh)SpectralEmbedding)_graph_is_connected)_graph_connected_component)spectral_embedding)
rbf_kernel)normalized_mutual_info_score)NearestNeighbors)KMeans)
make_blobs)_deterministic_vector_sign_flip)assert_array_almost_equal)assert_array_equal        g      @g      @g      ?i  *   )	n_samplescentersZcluster_stdrandom_statec             C   sX   |d }xJt | j|jD ]8\}}t|| d |kst|| d |kstqW dS )zMCheck array A and B are equal with possible sign flipping on
    each columns   N)zipTnpmaxAssertionError)ABtolZtol_squaredZA_colZB_col r   `/var/www/html/venv/lib/python3.7/site-packages/sklearn/manifold/tests/test_spectral_embedding.py _assert_equal_with_sign_flipping&   s    r!   c              C   s  t jd} d}dddd|g}| |}g }xt|d d |dd  D ]\}}||| }x2tt|d D ]}||| ||d  f qnW dt|d  }	}
d}| j|	|
|d	}| j|	|
|d	}|	t|| ||  qHW t
t |j\}}| jd
dt|d	}t|||ff}d||j  }x~t|d d |dd  D ]`\}}t||| }|| }| |ksvtt|||d  }| |kstt|| qFW d S )Nr   i,  r   y         i  )sizeg?g      ?)r   randomRandomStateZpermutationr   rangelenappendrandintextendtuplearrayr   uniformr   
coo_matrixr   sumr   r   )rngr   Z
boundariespconnectionsstartstopgroupimin_idxZmax_idxZn_random_connectionssourcetargetZrow_idxZ
column_idxdataaffinityZcomponent_1Zcomponent_sizeZcomponent_2r   r   r    %test_sparse_graph_connected_component1   s2    
$$r?   $   c       	      C   s  t j| }d}t j|d |d gd}t |||d |d|d|f< t |||d ||d |d f< t|d}|d |  st||d  	 rtt|d}|d | 	 rt||d   std|d|d f< d||d df< d|j
d d d| d < d||j  }t jd| d}d|d|< tddt j| d	}||}||t j}t j| dk d
d}t||tdkstd S )Nd   r   )shaper   r$   r%   g      ?precomputed)n_componentsr>   r   float)Zdtypeg      ?)r   r'   r(   Zzerosabsrandnr   allr   anyZflatr   r   fit_transformZastypeZfloat32r/   Zravelr
   pytestapprox)	seedr   Zn_sampler>   	componentZ
true_label
se_precompZembedded_coordinateZlabel_r   r   r    &test_spectral_embedding_two_componentsX   s.    &&


rP   XZdenser   )Zidsc             C   sl   d}t ddtj|d}t dd|tj|d}|t| |d}|| }t|j|j t||d d S )	Ng      ?r   rC   )rD   r>   r   rbf)rD   r>   gammar   )rS   g?)	r   r   r'   r(   rJ   r	   r   affinity_matrix_r!   )rQ   rM   rS   rO   se_rbfZembed_precomp	embed_rbfr   r   r    ,test_spectral_embedding_precomputed_affinity   s    
rW   c              C   sp   d} g }xPdD ]H}t | | dt}|jtdd}tddd| d|j}|| qW t|d |d	  d S )
Nr   )r   
   )n_neighborsZconnectivity)moder   precomputed_nearest_neighbors)r   rD   r>   rY   r%   )r   fitSZkneighbors_graphr   Z
embedding_r+   r   )rY   resultsZadditional_neighborsnngraph	embeddingr   r   r    ,test_precomputed_nearest_neighbors_filtering   s    
rb   c                s   d t t d}td fdd tj|d}tdd tj|d}|| }|| }t|j|j t||j t	||d d S )	Ng?)rS   r   c                s   t |  dS )N)rS   )r	   )x)rS   r   r    <lambda>       z;test_spectral_embedding_callable_affinity.<locals>.<lambda>)rD   r>   rS   r   rR   g?)
r	   r]   r   r   r'   r(   rJ   r   rT   r!   )rQ   rM   kernZse_callablerU   rV   Zembed_callabler   )rS   r    )test_spectral_embedding_callable_affinity   s"    


rg   z:ignore:scipy.rand is deprecated:DeprecationWarning:pyamg.*zBignore:`np.float` is a deprecated alias:DeprecationWarning:pyamg.*zBignore:scipy.linalg.pinv2 is deprecated:DeprecationWarning:pyamg.*c       	      C   s   t d tddddtj| d}tddddtj| d}|t}|t}t||d d	d	d
ddddg}d
ddddddg}dddd
dddg}t	j
|| || || ffdd }d|_d|_||}||}t||d d S )Npyamgr   nearest_neighborsamg   )rD   r>   eigen_solverrY   r   Zarpackgh㈵>r   r%         rA   )   ro   )rB   rC   )rK   importorskipr   r   r'   r(   rJ   r]   r!   r   r1   Ztoarrayr>   )	rM   Zse_amgZ	se_arpackZ	embed_amgZembed_arpackrowcolvalr>   r   r   r    "test_spectral_embedding_amg_solver   s4    


"

rt   c              C   s   t d d} d}tj||d| d}t|t|  }||j }t|dddd	}x2t	d
D ]&}t|dd|d d	}t
||dd q`W d S )Nrh   r@   rA   g?)Zdensityr   rX   rj   r   )rD   rl   r   rm   r%   g?)r   )rK   rp   r   ZrandZtriuZdiagsZdiagonalr   r   r)   r!   )rM   Z	num_nodesrQ   upperZ
sym_matrixra   r9   Znew_embeddingr   r   r    *test_spectral_embedding_amg_solver_failure   s    

rv   z6ignore:the behavior of nmi will change in version 0.22c             C   sp   t j| }ttd|d}ttdd|d}x@||gD ]4}tt|d}||t t	t
|jtdd q4W d S )	NrR   )rD   r>   r   ri   rk   )rD   r>   rY   r   )
n_clustersr   g      ?r   )r   r'   r(   r   rw   r   r\   rJ   r]   r   r
   Zlabels_true_labels)rM   r   rU   Zse_knnsekmr   r   r    !test_pipeline_spectral_clustering  s    r{   c          	   C   s<   t ddtj| dd}tt |t W d Q R X d S )Nr%   rC   z	<unknown>)rD   r>   r   rl   )	r   r   r'   r(   rK   raises
ValueErrorr\   r]   )rM   ry   r   r   r    +test_spectral_embedding_unknown_eigensolver.  s    
r~   c          	   C   s:   t ddtj| d}tt |t W d Q R X d S )Nr%   z	<unknown>)rD   r>   r   )	r   r   r'   r(   rK   r|   r}   r\   r]   )rM   ry   r   r   r    (test_spectral_embedding_unknown_affinity:  s    r   c             C   s   t dddddgdddddgdddddgdddddgdddddgg}t|rRttt|rdttt|rvtt dddddgdddddgdddddgdddddgdddddgg}t|sttt|sttt|std S )Nr%   r   )r   r/   r   r   r   
csr_matrixZ
csc_matrix)rM   r`   r   r   r    test_connectivityC  s$    r   c              C   s>   t jd} | dd}t|}t|}t|}t|| d S )Nr@   rX      )r   r'   r(   rG   r	   r   r   )r   r=   simsembedding_1embedding_2r   r   r    %test_spectral_embedding_deterministic_  s    r   c        
      C   sz   t jd} | dd}t|}d}t|d|dd}tj|ddd\}}t|\}}|j	d | }	t
|	j	}	t||	 d S )	Nr@   rX   r      F)norm_laplacianrD   
drop_firstT)normedZreturn_diag)r   r'   r(   rG   r	   r   r   	laplacianr   r   r   r   )
r   r=   r   rD   r   r   dd_Zdiffusion_mapr   r   r   r    $test_spectral_embedding_unnormalizedi  s    
r   c              C   s   t jd} | dd}t|}d}xdtdD ]X}t|d|d|d}t |d d df t	dksht
t |d d df d	ks.t
q.W d S )
Nr@   rX   r   r   F)r   rD   r   r   r   r%   gMbP?)r   r'   r(   rG   r	   r)   r   ZstdrK   rL   r   )r   r=   r   rD   rM   ra   r   r   r    *test_spectral_embedding_first_eigen_vector}  s    $r   r>   rC   r[   c          	   C   s2   t | d}d}tjt|d |j W d Q R X d S )N)r>   z5Attribute `_pairwise` was deprecated in version 0\.24)match)r   rK   ZwarnsFutureWarningZ	_pairwise)r>   ry   msgr   r   r    +test_spectral_embedding_pairwise_deprecated  s    
r   )r   )r@   )r@   )r@   )r@   )r@   )r@   )r@   )r@   ):rK   numpyr   Zscipyr   Zscipy.sparser   Zscipy.linalgr   Zsklearn.manifoldr   Z$sklearn.manifold._spectral_embeddingr   r   r   Zsklearn.metrics.pairwiser	   Zsklearn.metricsr
   Zsklearn.neighborsr   Zsklearn.clusterr   Zsklearn.datasetsr   Zsklearn.utils.extmathr   Zsklearn.utils._testingr   r   r/   r   r   rB   rw   Z
n_featuresr]   rx   r!   r?   rP   markZparametrizer   rW   rb   rg   filterwarningsrt   rv   r{   r~   r   r   r   r   r   r   r   r   r   r    <module>   sl   

'
**


	

