U
    9%eOE                  
   @   s  d dl m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mZ d dlmZ d dlmZ d d	lmZmZmZ d d
lmZmZ d dlmZmZ d dlmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$ zd dl%m&Z& dZ'W n e(k
r   dZ'Y nX ej)j*e' dd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/\Z0Z1ee.e-ddd\Z2Z3dNddZ4dd Z5ej)6d d!d"ej7d#e+d$gej)6d%ej8ej9gdOd&d'Z:ej)j6d(e2e;e2gd)d*gd+ej)6d d!d"ej7d#e+d$gej)6d%ej8ej9fdPd-d.Z<d/d0 Z=ej)j6d(e2e;e2gd)d*gd+dQd1d2Z>ej)?d3ej)?d4ej)?d5ej)?d6ej)j*e' ddej)6d%ej8ej9fdRd7d8Z@ej)?d3ej)?d4ej)?d5ej)j*e' ddej)?d6ej)6d%ej8ej9fdSd9d:ZAej)?d;dTd<d=ZBdUd>d?ZCd@dA ZDdBdC ZEdDdE ZFej)6d d!d"ej7d#e+d$gej)6d%ej8ej9gdFdG ZGej)j*e'dHddIdJ ZHej)?d6ej)6dKd!d#d"gdLdM ZIdS )V    )MockN)sparse)eigh)csgraph)eigshlobpcg)KMeans)
make_blobs)SpectralEmbedding_spectral_embeddingspectral_embedding)_graph_connected_component_graph_is_connected)normalized_mutual_info_scorepairwise_distances
rbf_kernel)NearestNeighbors)assert_array_almost_equalassert_array_equal)_deterministic_vector_sign_flip)smoothed_aggregation_solverTFz1PyAMG is required for the tests in this function.)reason        g      @g      @      ?  *   )	n_samplescenterscluster_stdrandom_statec                 C   sT   |d }t | j|jD ]8\}}t|| d |kst|| d |kstq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*   m/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/manifold/tests/test_spectral_embedding.py _assert_equal_with_sign_flipping0   s    r,   c                  C   s  t jd} d}dddd|g}| |}g }t|d d |dd  D ]\}}||| }tt|d D ]}||| ||d  f qjdt|d  }	}
d}| j|	|
|d	}| j|	|
|d	}|	t|| ||  qFt
t |j\}}| jd
dt|d	}t|||ff}d||j  }t|d d |dd  D ]`\}}t||| }|| }| |ksltt|||d  }| |kstt|| q<d S )Nr   i,  r   y         r   )size皙?      ?)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_component;   s2    
""rL   eigen_solverarpackr   amg)Zmarksdtypec                 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|	 dk t jd
}
t||
tdkstd S )Nd   r!   shaper   r/   r0   r3   precomputedn_componentsrK   r    rM   )rP   r   )r$   r4   r5   Zzerosabsrandnr   allr&   anyZflatr#   r
   fit_transformastyper<   ZravelZint64r   pytestapprox)rM   rP   seedr    Zn_samplerK   	componentZ
true_label
se_precompZembedded_coordinateZlabel_r*   r*   r+   &test_spectral_embedding_two_componentsf   s8    


rb   XZdenser   )Zids$   c           	      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!   rT   rU   rbf)rV   rK   gammar    rM   rf   皙?)
r
   r$   r4   r5   r[   r   r\   r   affinity_matrix_r,   )	rc   rM   rP   r_   rf   ra   se_rbfZembed_precomp	embed_rbfr*   r*   r+   ,test_spectral_embedding_precomputed_affinity   s$    

rl   c                  C   sl   d} g }dD ]H}t | | dt}|jtdd}tddd| d|j}|| qt|d |d	  d S )
Nr!   )r   
   )n_neighborsZconnectivity)moder   Zprecomputed_nearest_neighbors)r    rV   rK   rn   r0   )r   fitSZkneighbors_graphr
   
embedding_r8   r   )rn   resultsZadditional_neighborsnngraph	embeddingr*   r*   r+   ,test_precomputed_nearest_neighbors_filtering   s     
rw   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?rg   r!   c                    s   t |  dS )Nrg   r   )xrg   r*   r+   <lambda>       z;test_spectral_embedding_callable_affinity.<locals>.<lambda>)rV   rK   rf   r    re   rh   )
r   rq   r
   r$   r4   r5   r[   r   ri   r,   )rc   r_   kernZse_callablerj   rk   Zembed_callabler*   rg   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.*zCignore:np.find_common_type 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 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 )Nr!   nearest_neighborsrO      )rV   rK   rM   rn   r    rN   gh㈵>r   r0         rQ   )   r   rR   rT   )r
   r$   r4   r5   r[   rq   r\   r,   r   r>   ZtoarrayrK   )
rP   r_   Zse_amgZ	se_arpackZ	embed_amgZembed_arpackrowcolvalrK   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 qZd S )NrQ   r2   )Zdensityr    rm   rO   r   )rV   rM   r    r   r0   rh   )r)   )
r   Zrandr\   ZtriuZdiagsZdiagonalr#   r   r6   r,   )	rP   r_   Z	num_nodesrc   upperZ
sym_matrixrv   rF   Znew_embeddingr*   r*   r+   *test_spectral_embedding_amg_solver_failure$  s&    

      r   z6ignore:the behavior of nmi will change in version 0.22c                 C   sn   t j| }ttd|d}ttdd|d}||fD ]6}tt|dd}||t t	t
|jtdd	 q2d S )
Nre   )rV   rK   r    r}   r~   )rV   rK   rn   r    rm   )
n_clustersr    Zn_initr   r!   )r$   r4   r5   r
   r   r   rp   r[   rq   r   r   Zlabels_true_labels)r_   r    rj   Zse_knnsekmr*   r*   r+   !test_pipeline_spectral_clusteringJ  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 )Nr0   r   )r$   r<   r   r&   r   
csr_matrixZ
csc_matrix)r_   ru   r*   r*   r+   test_connectivity_  s,    		r   c                  C   s>   t jd} | dd}t|}t|}t|}t|| d S )Nrd   rm      )r$   r4   r5   rX   r   r   r   )r    rJ   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 )	Nrd   rm   r      F)norm_laplacianrV   
drop_firstT)normedZreturn_diag)r$   r4   r5   rX   r   r   r   	laplacianr   r#   r   r   )
r    rJ   r   rV   r   r   dd_Zdiffusion_mapr   r*   r*   r+   $test_spectral_embedding_unnormalized  s       
r   c                  C   s   t jd} | dd}t|}d}tdD ]X}t|d|d|d}t |d d df t	dksft
t |d d df d	ks,t
q,d S )
Nrd   rm   r   r!   F)r   rV   r   r    r   r0   gMbP?)r$   r4   r5   rX   r   r6   r   Zstdr]   r^   r&   )r    rJ   r   rV   r_   rv   r*   r*   r+   *test_spectral_embedding_first_eigen_vector  s    $r   c                 C   sV   t |}tdd| dd}||}|j|ks2t|jj|ksBt|jj|ksRt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!   re   r   )rV   rK   rM   r    N)rq   r\   r
   r[   rP   r&   rr   ri   )rM   rP   rc   r   ZX_transr*   r*   r+   'test_spectral_embedding_preserves_dtype  s    
   
r   z7PyAMG is installed and we should not test for an error.c               	   C   s:   t dddd} d}tjt|d | t W 5 Q R X d S )Nr!   re   rO   )rV   rK   rM   z>The eigen_solver was set to 'amg', but pyamg is not available.)match)r
   r]   Zraises
ValueErrorr[   rq   )ra   err_msgr*   r*   r+   test_error_pyamg_not_available  s    r   solverc           
      C   s   |dkrt std tddddgddggdd\}}t|}t|| }|d	krXtnt}|d	krhdnd
}|dkr~t	
|}t|d}| t|j| t|d|dd |  |j\}}	|	d |kstd
S )z2Test that `eigen_tol="auto"` is resolved correctlyrO   zPyAMG is not available.r.   r   r0   r/   g{Gz?)r   r    r   r   rN   N)Zside_effectr   auto)r    rM   Z	eigen_tolr)   )pyamg_availabler]   skipr	   r   r$   r%   r   r   r   r   r   setattrr   __qualname__r   Zassert_calledZ	call_argsr&   )
Zmonkeypatchr   rc   r   Drq   Zsolver_funcdefault_valueZmocked_solverkwargsr*   r*   r+   test_spectral_eigen_tol_auto  s(    
   



r   )r   )r   )rd   )rd   )rd   )rd   )rd   )rd   )JZunittest.mockr   numpyr$   r]   Zscipyr   Zscipy.linalgr   Zscipy.sparser   Zscipy.sparse.linalgr   r   Zsklearn.clusterr   Zsklearn.datasetsr	   Zsklearn.manifoldr
   r   r   Z$sklearn.manifold._spectral_embeddingr   r   Zsklearn.metricsr   r   Zsklearn.metrics.pairwiser   Zsklearn.neighborsr   Zsklearn.utils._testingr   r   Zsklearn.utils.extmathr   Zpyamgr   r   ImportErrormarkZskipifZskip_if_no_pyamgr<   r   r   rS   r   Z
n_featuresrq   r   r,   rL   ZparametrizeparamZfloat32Zfloat64rb   r   rl   rw   r|   filterwarningsr   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   s   
 
   

+, ' 



