o
    tBh9A                  
   @   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 z
d dlmZ dZ W n e!yw   dZ Y nw e j"j#e  ddZ$e%g dg dg dgZ&dZ'e&j(\Z)Z*ee'e&ddd\Z+Z,dPddZ-d d! Z.e j"/d"d#d$e j0d%e$d&ge j"/d'ej1ej2gdQd)d*Z3e j"j/d+e+e4e+gd,d-gd.e j"/d"d#d$e j0d%e$d&ge j"/d'ej1ej2fdQd/d0Z5d1d2 Z6e j"j/d+e+e4e+gd,d-gd.dQd3d4Z7e j"8d5e j"8d6e j"8d7e j"j#e  dde j"/d'ej1ej2fdQd8d9Z9e j"8d5e j"8d6e j"8d7e j"j#e  dde j"/d'ej1ej2fdQd:d;Z:e j"8d<dQd=d>Z;dQd?d@Z<dQdAdBZ=dQdCdDZ>dEdF Z?dGdH Z@dIdJ ZAe j"/d"d#d$e j0d%e$d&ge j"/d'ej1ej2gdKdL ZBe j"j#e dMddNdO ZCdS )R    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)smoothed_aggregation_solverTFz1PyAMG is required for the tests in this function.)reason)              @r   r   r   )r   r   g      @r   r   )      ?r   r   r   r     r   *   )	n_samplescenterscluster_stdrandom_stater   c                 C   sT   |d }t | j|jD ]\}}t|| d |ks't|| d |ks'J qdS )zMCheck array A and B are equal with possible sign flipping on
    each columns   N)zipTnpmax)ABtoltol_squaredA_colB_col r(   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/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 }t|d d |dd  D ]I\}}||| }tt|d D ]}||| ||d  f q5dt|d }	}
d}| j|	|
|d	}| j|	|
|d	}|	t|| ||  q#t
t |j\}}| jd
dt|d	}t|||ff}d||j  }t|d d |dd  D ]-\}}t||| }|| }| |ksJ t|||d  }| |ksJ t|| qd S )Nr   i,  r   y         r   )size皙?      ?)r    randomRandomStatepermutationr   rangelenappendrandintextendtuplearrayr   uniformr   
coo_matrixr   sumr   )rngr   
boundariespconnectionsstartstopgroupimin_idxmax_idxn_random_connectionssourcetargetrow_idx
column_idxdataaffinitycomponent_1component_sizecomponent_2r(   r(   r)   %test_sparse_graph_connected_component:   s4   
""rS   eigen_solverarpacklobpcgamg)marksdtype$   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 |  sIJ ||d   rSJ t|d}|d |  rbJ ||d   slJ 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|	 dk t jd
}
t||
tdksJ d S )Nd   r   shaper   r-   r.   r1   precomputedn_componentsrO   r   rT   )rY   r   )r    r2   r3   zerosabsrandnr   allanyflatr   r   fit_transformastyper;   ravelint64r   pytestapprox)rT   rY   seedr   n_samplerO   	component
true_label
se_precompembedded_coordinatelabel_r(   r(   r)   &test_spectral_embedding_two_componentsa   s8   


rt   Xdenser   )idsc           	      C   s|   d}t ddtj||d}t dd|tj||d}|t| ||d}|| |}t|j|j t	||d d S )	Nr   r   r^   r_   rbf)r`   rO   gammar   rT   ry   皙?)
r   r    r2   r3   rg   r
   rh   r   affinity_matrix_r*   )	ru   rT   rY   rm   ry   rq   se_rbfembed_precomp	embed_rbfr(   r(   r)   ,test_spectral_embedding_precomputed_affinity   s$   

r   c                  C   sl   d} g }dD ]$}t | | dt}|jtdd}tddd| d|j}|| qt|d |d	  d S )
Nr   )r   
   )n_neighborsconnectivity)moder   precomputed_nearest_neighbors)r   r`   rO   r   r.   )r   fitSkneighbors_graphr   
embedding_r7   r   )r   resultsadditional_neighborsnngraph	embeddingr(   r(   r)   ,test_precomputed_nearest_neighbors_filtering   s    
r   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?rz   r   c                    s   t |  dS )Nrz   r	   )xrz   r(   r)   <lambda>   s    z;test_spectral_embedding_callable_affinity.<locals>.<lambda>)r`   rO   ry   r   rx   r{   )
r
   r   r   r    r2   r3   rg   r   r|   r*   )ru   rm   kernse_callabler}   r   embed_callabler(   rz   r)   )test_spectral_embedding_callable_affinity   s&   




r   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dddtj|d}t ddddtj|d}|t| }|t| }t||d g d}g d	}g d
}tj	|| || || ffdd
 }	d|_d|_||	| }||	| }t||d d S )Nr   nearest_neighborsrW      )r`   rO   rT   r   r   rU   gh㈵>)r   r   r.   r      r      )r.   r   r   r   r   r   r   )r[   r[   r[   r.   r[   r[   r[   )   r   r\   r^   )r   r    r2   r3   rg   r   rh   r*   r   r=   toarrayrO   )
rY   rm   se_amg	se_arpack	embed_amgembed_arpackrowcolvalrO   r(   r(   r)   "test_spectral_embedding_amg_solver   s<   

r   c           	      C   s   d}t j||d|d}|| }t |t |  }||j }t|dddd}tdD ]}t|dd|d	 d}t	||d
d q-d S )Nr[   r0   )densityr   r   rW   r   )r`   rT   r   r   r.   r{   )r$   )
r   randrh   triudiagsdiagonalr   r   r5   r*   )	rY   rm   	num_nodesru   upper
sym_matrixr   rF   new_embeddingr(   r(   r)   *test_spectral_embedding_amg_solver_failure  s   

r   z6ignore:the behavior of nmi will change in version 0.22c                 C   sl   t j| }ttd|d}ttdd|d}||fD ]}tt|d}||t t	t
|jtdd qd S )	Nrx   r`   rO   r   r   r   )r`   rO   r   r   )
n_clustersr   r   r   )r    r2   r3   r   r   r   r   rg   r   r   r   labels_true_labels)rm   r   r}   se_knnsekmr(   r(   r)   !test_pipeline_spectral_clustering>  s"   r   c                 C   sR   t ddtj| dd}tt |t W d    d S 1 s"w   Y  d S )Nr.   r^   	<unknown>r_   	r   r    r2   r3   rk   raises
ValueErrorr   r   rm   r   r(   r(   r)   +test_spectral_embedding_unknown_eigensolverS  s   
"r   c                 C   sP   t ddtj| d}tt |t W d    d S 1 s!w   Y  d S )Nr.   r   r   r   r   r(   r(   r)   (test_spectral_embedding_unknown_affinity_  s   
"r   c                 C   s   t g dg dg dg dg dg}t|rJ tt|r#J tt|r,J t g dg dg dg dg dg}t|sFJ tt|sOJ tt|sXJ d S )N)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   
csr_matrix
csc_matrix)rm   r   r(   r(   r)   test_connectivityj  s,   		r   c                  C   s>   t jd} | dd}t|}t|}t|}t|| d S )NrZ   r      )r    r2   r3   rc   r
   r   r   )r   rN   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 )	NrZ   r   r      F)norm_laplacianr`   
drop_firstT)normedreturn_diag)r    r2   r3   rc   r
   r   r   	laplacianr   r   r   r   )
r   rN   r   r`   r   r   dd_diffusion_mapr   r(   r(   r)   $test_spectral_embedding_unnormalized  s   
r   c                  C   s   t jd} | dd}t|}d}tdD ],}t|d|d|d}t |d d df t	dks3J t |d d df d	ksBJ qd S )
NrZ   r   r   r   F)r   r`   r   r   r   r.   gMbP?)
r    r2   r3   rc   r
   r5   r   stdrk   rl   )r   rN   r   r`   rm   r   r(   r(   r)   *test_spectral_embedding_first_eigen_vector  s   $ r   c                 C   sV   t |}tdd| dd}||}|j|ksJ |jj|ks!J |jj|ks)J dS )a\  Check that `SpectralEmbedding is preserving the dtype of the fitted
    attribute and transformed data.

    Ideally, this test should be covered by the common test
    `check_transformer_preserve_dtypes`. However, this test only run
    with transformers implementing `transform` while `SpectralEmbedding`
    implements only `fit_transform`.
    r   rx   r   )r`   rO   rT   r   N)r   rh   r   rg   rY   r   r|   )rT   rY   ru   r   X_transr(   r(   r)   'test_spectral_embedding_preserves_dtype  s   

r   z7PyAMG is installed and we should not test for an error.c                  C   sP   t dddd} d}tjt|d | t W d    d S 1 s!w   Y  d S )Nr   rx   rW   )r`   rO   rT   z>The eigen_solver was set to 'amg', but pyamg is not available.)match)r   rk   r   r   rg   r   )rq   err_msgr(   r(   r)   test_error_pyamg_not_available  s   "r   )r   )rZ   )Drk   numpyr    scipyr   scipy.sparser   scipy.linalgr   sklearn.manifoldr   $sklearn.manifold._spectral_embeddingr   r   r   sklearn.metrics.pairwiser
   sklearn.metricsr   sklearn.neighborsr   sklearn.clusterr   sklearn.datasetsr   sklearn.utils.extmathr   sklearn.utils._testingr   r   pyamgr   pyamg_availableImportErrormarkskipifskip_if_no_pyamgr;   r   r   r]   r   
n_featuresr   r   r*   rS   parametrizeparamfloat32float64rt   r   r   r   r   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r(   r(   r(   r)   <module>   s    


','




