o
    \ioE                  
   @   sf  d dl Z 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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# d dl$m%Z%m&Z&m'Z'm(Z(m)Z) d dl$m*Z+ z
d dl,m-Z- dZ.W n e/y   dZ.Y nw ej0j1e. ddZ2e3g dg dg dgZ4dZ5e4j6\Z7Z8ee5e4ddd\Z9Z:dKddZ;ej0<d e%d!d" Z=ej0<d#d$d%ej>d&e2d'gej0<d(ej?ej@gdLd)d*ZAej0<d+dge'ej0<d#d$d%ej>d&e2d'gej0<d(ej?ej@f	,dMd-d.ZBd/d0 ZCej0<d+dge'dMd1d2ZDej0j1e. ddej0<d(ej?ej@fej0<d e%dMd3d4ZEej0j1e. ddej0<d(ej?ej@fdMd5d6ZFdMd7d8ZGdMd9d:ZHd;d< ZId=d> ZJd?d@ ZKej0<d#d$d%ej>d&e2d'gej0<d(ej?ej@gdAdB ZLej0j1e.dCddDdE ZMej0<dFg dGej0<dHe'dIdJ ZNdS )N    N)Mock)sparse)eigh)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)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSparse_version
sp_version)	laplacian)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 )zLCheck array A and B are equal with possible sign flipping on
    each column   N)zipTnpmax)ABtoltol_squaredA_colB_col r2   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/manifold/tests/test_spectral_embedding.py _assert_equal_with_sign_flipping8   s   r4   coo_containerc                 C   sz  t jd}d}dddd|g}||}g }t|D ]I\}}||| }tt|d D ]}	|||	 ||	d  f q-dt|d }
}d}|j	|
||d}|j	|
||d}|
t|| ||  qtt |j\}}|jd	dt|d}| |||ff}d
||j  }t|D ]-\}}t||| }|| }| |ksJ t|||d  }| |ksJ t|| qd S )Nr"   i,  r   y         r!   )size皙?      ?)r*   randomRandomStatepermutation	itertoolspairwiserangelenappendrandintextendr(   tuplearrayr)   uniformr   sumr   )r5   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_2r2   r2   r3   %test_sparse_graph_connected_componentC   s4   
r^   eigen_solverarpackr   amg)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 |  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   r8   r;   precomputedn_componentsrZ   r&   r_   rc   r    )r*   r<   r=   zerosabsrandnr   allanyflatr)   r	   fit_transformastyperG   ravelint64r   pytestapprox)r_   rc   seedr&   n_samplerZ   	component
true_label
se_precompembedded_coordinatelabel_r2   r2   r3   &test_spectral_embedding_two_componentso   s8   


r   sparse_container$   c           
      C   s   d}| d u rt n| t }tddtj||d}tdd|tj||d}|t|||d}|||}	t|j	|j	 t
||	d d S )	Nr    r'   rh   ri   rbf)rj   rZ   gammar&   r_   r   皙?)Sr	   r*   r<   r=   rr   r   rs   r   affinity_matrix_r4   )
r   r_   rc   rx   r   Xr|   se_rbfembed_precomp	embed_rbfr2   r2   r3   ,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&   rj   rZ   r   r8   )r   fitr   kneighbors_graphr	   
embedding_rC   r   )r   resultsadditional_neighborsnngraph	embeddingr2   r2   r3   ,test_precomputed_nearest_neighbors_filtering   s    
r   c                    s   d t t d}| d u rtn| t}td fdd tj|d}tdd tj|d}||}||}t|j|j t||j t	||d d S )	Ng?r   r'   c                    s   t |  dS )Nr   r   )xr   r2   r3   <lambda>   s    z;test_spectral_embedding_callable_affinity.<locals>.<lambda>)rj   rZ   r   r&   r   r   )
r   r   r	   r*   r<   r=   rr   r   r   r4   )r   rx   kernr   se_callabler   r   embed_callabler2   r   r3   )test_spectral_embedding_callable_affinity   s(   




r   c                 C   s  t ddddtj|d}t ddddtj|d}|t| }|t| }t||d tjg dtj	d	}tjg d
tj	d	}tjg dtj
d	}	|t|	|	gt||gt||gffdd}
d|_d|_||
| }||
| }t||d |
 }
|
jtj
|
_|
jtj
|
_ttdk}|r||
 d S d}tjt|d ||
 W d    d S 1 sw   Y  d S )Nr'   nearest_neighborsra      )rj   rZ   r_   r   r&   r`   gh㈵>)r   r   r8   r'      r      rk   )r8   r'   r'   r   r   r   r   )rd   rd   rd   r8   rd   rd   rd   )   r   re   rh   z1.11.3z=Only sparse matrices with 32-bit integer indices are acceptedmatch)r	   r*   r<   r=   rr   r   rs   r4   rG   int32ru   hstackrZ   tocsrindptrindicesr   r   rv   raises
ValueError)rc   r5   rx   se_amg	se_arpack	embed_amgembed_arpackrowcolvalrZ   *scipy_graph_traversal_supports_int64_indexerr_msgr2   r2   r3   "test_spectral_embedding_amg_solver   sN   

("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 )Nrd   r:   )densityr&   r   ra   r   )rj   r_   r&   r   r8   r   )r.   )
r   randrs   triudiagsdiagonalr)   r   rA   r4   )	rc   rx   	num_nodesr   upper
sym_matrixr   rQ   new_embeddingr2   r2   r3   *test_spectral_embedding_amg_solver_failure3  s   

r   c                 C   sn   t j| }ttd|d}ttdd|d}||fD ]}tt|dd}||t t	t
|jtdd	 qd S )
Nr   )rj   rZ   r&   r   r   )rj   rZ   r   r&   r   )
n_clustersr&   n_initr    r'   )r*   r<   r=   r	   r   r   r   rr   r   r   r   labels_true_labels)rx   r&   r   se_knnsekmr2   r2   r3   !test_pipeline_spectral_clusteringJ  s"   r   c                 C   s   t g dg dg dg dg dg}t|rJ tD ]
}t||r&J qtD ]
}t||r3J q)t g dg dg dg dg dg}t|sNJ tD ]
}t||sZJ qPtD ]
}t||sgJ q]d S )N)r8   r   r   r   r   )r   r8   r8   r   r   )r   r8   r8   r8   r   )r   r   r8   r8   r8   )r   r   r   r8   r8   )r8   r8   r   r   r   )r8   r8   r8   r   r   )r*   rG   r   r   r   )rx   r   csr_containercsc_containerr2   r2   r3   test_connectivity^  s6   		r   c                  C   s>   t jd} | dd}t|}t|}t|}t|| d S )Nr   r      )r*   r<   r=   rn   r   r   r   )r&   rY   simsembedding_1embedding_2r2   r2   r3   %test_spectral_embedding_deterministic  s   r   c            
      C   sx   t jd} | dd}t|}d}t|d|dd}t|ddd\}}t|\}}|jd | }	t	|	j}	t
||	 d S )	Nr   r   r      F)norm_laplacianrj   
drop_firstT)normedreturn_diag)r*   r<   r=   rn   r   r   csgraph_laplacianr   r)   r   r   )
r&   rY   r   rj   r   r   dd_diffusion_mapr   r2   r2   r3   $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 )
Nr   r   r   r'   F)r   rj   r   r&   r   r8   gMbP?)
r*   r<   r=   rn   r   rA   r   stdrv   rw   )r&   rY   r   rj   rx   r   r2   r2   r3   *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'   r   r   )rj   rZ   r_   r&   N)r   rs   r	   rr   rc   r   r   )r_   rc   r   r   X_transr2   r2   r3   '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'   r   ra   )rj   rZ   r_   z>The eigen_solver was set to 'amg', but pyamg is not available.r   )r	   rv   r   r   rr   r   )r|   r   r2   r2   r3   test_error_pyamg_not_available  s   "r   solver)r`   ra   r   r   c                 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r,tnt}|d	kr4dnd
}|dkr>||}t	|d}	| 
t|j|	 t|d|dd |	  |	j\}}
|
d |ksdJ d
S )z2Test that `eigen_tol="auto"` is resolved correctlyra   zPyAMG is not available.r7   r   r8   rg   g{Gz?)r#   r&   r$   r%   r`   N)side_effectr"   auto)r&   r_   	eigen_tolr.   )pyamg_availablerv   skipr   r   r*   r+   r   r   r   setattrr
   __qualname__r   assert_called	call_args)monkeypatchr   r   r   r   Dr   solver_funcdefault_valuemocked_solverkwargsr2   r2   r3   test_spectral_eigen_tol_auto  s"   



r   )r   )r   )r   )Or?   unittest.mockr   numpyr*   rv   scipyr   scipy.linalgr   scipy.sparse.linalgr   r   sklearn.clusterr   sklearn.datasetsr   sklearn.manifoldr	   r
   r   $sklearn.manifold._spectral_embeddingr   r   sklearn.metricsr   r   sklearn.metrics.pairwiser   sklearn.neighborsr   sklearn.utils._testingr   r   sklearn.utils.extmathr   sklearn.utils.fixesr   r   r   r   r   r   r   pyamgr   r   ImportErrormarkskipifskip_if_no_pyamgrG   r$   r#   rf   r   
n_featuresr   r   r4   parametrizer^   paramfloat32float64r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r2   r2   r3   <module>   s    



+,6

!

