
    0PhdE              
          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* 	 d dl+m,Z, dZ-n# e.$ r dZ-Y nw xY wej/        0                    e- d          Z1 ej2        g dg dg dg          Z3dZ4e3j5        \  Z6Z7 ee4e3dd          \  Z8Z9d;dZ:ej/        ;                    de$          d              Z<ej/        ;                    d!d"d# ej=        d$e1%          g          ej/        ;                    d&ej>        ej?        g          d<d'                        Z@ej/        ;                    d(dge&          ej/        ;                    d!d"d# ej=        d$e1%          g          ej/        ;                    d&ej>        ej?        f          	 d=d*                                    ZAd+ ZBej/        ;                    d(dge&          d=d,            ZCej/        0                    e- d          ej/        ;                    d&ej>        ej?        f          ej/        ;                    de$          d=d-                                    ZDej/        0                    e- d          ej/        ;                    d&ej>        ej?        f          d=d.                        ZEd=d/ZFd=d0ZGd1 ZHd2 ZId3 ZJej/        ;                    d!d"d# ej=        d$e1%          g          ej/        ;                    d&ej>        ej?        g          d4                         ZKej/        0                    e-d5          d6             ZLej/        ;                    d7g d8          ej/        ;                    d9e&          d:                         ZMdS )>    )MockN)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                     |dz  }t          | j        |j                  D ]C\  }}t          j        ||z
  dz            |k    s t          j        ||z   dz            |k    sJ Dd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_cols         n/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/manifold/tests/test_spectral_embedding.py _assert_equal_with_sign_flippingr5   7   sy     q&KAC 
 
uFEEMa'((K77vuu}*++{::::
 
    coo_containerc                 n   t           j                            d          }d}dddd|g}|                    |          }g }t	          |d d         |dd                    D ]\  }}|||         }t          t          |          dz
            D ](}	|                    ||	         ||	dz            f           )dt          |          dz
  }}
d}|                    |
||	          }|                    |
||	          }|	                    t	          ||         ||                              t          t          j        |          j                  \  }}|                    d
dt          |          	          } | |||ff          }d||j        z   z  }t	          |d d         |dd                    D ]}\  }}t          |||                   }||z
  }|                                |k    sJ t          |||dz
                     }|                                |k    sJ t!          ||           ~d S )Nr#   i,  r   y         r"   )size皙?      ?)r,   randomRandomStatepermutationr*   rangelenappendrandintextendtuplearrayr+   uniformr   sumr   )r7   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_2s                         r4   %test_sparse_graph_connected_componentr`   B   sZ   
)


#
#CIRc9-J	""AK:crc?JqrrN;; > >t%* s5zzA~&& 	9 	9Aa%A,78888 c%jj1n#Wg4HIIWg4HII3uV}eFm<<====   5 5 788GZ;;sBS%5%5;66D}dWj$9:;;Hh+,H:crc?JqrrN;; 	5 	5t01U8DD  N2222 11TAX;GG  N2222;4444	5 	5r6   eigen_solverarpackr   amg)marksdtypec                    t           j                            |          }d}t          j        |dz  |dz  g          }t          j        |                    ||                    dz   |d|d|f<   t          j        |                    ||                    dz   ||d |d f<   t          |d          }|d |                                         sJ ||d                                          rJ t          |d          }|d |                                         rJ ||d                                          sJ d|d|dz   f<   d||dz   df<   d|j	        d d d|z  dz   <   d||j
        z   z  }t          j        d|z            }d|d|<   t          ddt           j                            |          | 	          }|                    |                    |                    }	t          j        |	                                dk     t           j        
          }
t#          ||
          t%          j        d          k    sJ d S )Nd   r)   shaper   r;   r<   r?   precomputedn_componentsr\   r'   ra   re   r!   )r,   r@   rA   zerosabsrandnr   allanyflatr+   r
   fit_transformastyperI   ravelint64r   pytestapprox)ra   re   seedr'   n_sampler\   	component
true_label
se_precompembedded_coordinatelabel_s              r4   &test_spectral_embedding_two_componentsr   n   su    9((..LHxx!|X\:;;;H 	|!!(H5566: QxZ8#$
 	|!!(H5566: XZZ#$
 +8Q77IYhY##%%%%%#'')))))*8R88I(#'')))))XYY##%%%%% !"HQ1_ !HX\1_)*HM%%Q\A%%&h+,HH---JJqz"Y**400!	  J %228??53I3IJJX)//11A5RXFFFF'
F;;v}S?Q?QQQQQQQr6   sparse_container$   c                    d}| t           n | t                     }t          ddt          j                            |          |          }t          dd|t          j                            |          |          }|                    t          |                    |          |                    }|                    |                    |                    }	t          |j	        |j	                   t          ||	d           d S )	Nr!   r)   rj   rk   rbf)rl   r\   gammar'   ra   r   皙?)Sr
   r,   r@   rA   rt   r   ru   r   affinity_matrix_r5   )
r   ra   re   rz   r   Xr~   se_rbfembed_precomp	embed_rbfs
             r4   ,test_spectral_embedding_precomputed_affinityr      s     E%+;+;A+>+>A"Y**400!	  J Y**400!  F ,,Zu-U-U-UVVM$$QXXe__55Ij96;RSSS$]ItDDDDDr6   c                  ^   d} g }dD ]}t          | |z                                 t                    }|                    t          d          }t	          ddd|                               |          j        }|                    |           t          |d         |d	                    d S )
Nr)   )r   
   )n_neighborsconnectivity)moder   precomputed_nearest_neighbors)r'   rl   r\   r   r<   )r   fitr   kneighbors_graphr
   
embedding_rE   r   )r   resultsadditional_neighborsnngraph	embeddings         r4   ,test_precomputed_nearest_neighbors_filteringr      s    KG ' " "+8L*LMMMQQRSTT##AN#;;8'	   SZZ 	 	y!!!!wqz71:.....r6   c                    dt          t                    }| t          n | t                    }t          dfdt          j                            |                    }t          ddt          j                            |                    }|                    |          }|                    |          }t          |j        |j                   t          ||j                   t          ||d           d S )Ng?r   r)   c                 &    t          |           S )Nr   r   )xr   s    r4   <lambda>z;test_spectral_embedding_callable_affinity.<locals>.<lambda>   s    Jq666 r6   )rl   r\   r   r'   r   r   )
r   r   r
   r,   r@   rA   rt   r   r   r5   )	r   rz   kernr   se_callabler   r   embed_callabler   s	           @r4   )test_spectral_embedding_callable_affinityr      s
    Eau%%%D%+;+;A+>+>A#6666Y**400	  K Y**400	  F $$Q''I ..q11Nk:F<STTTdF$;<<<$YEEEEEr6   c           	         t          ddddt          j                            |                    }t          ddddt          j                            |                    }|                    t
                              |                     }|                    t
                              |                     }t          ||d           t          j        g dt          j	        	          }t          j        g d
t          j	        	          }t          j        g dt          j
        	          }	 |t          j        |	|	g          t          j        ||g          t          j        ||g          ffd          }
d|_        d|_        |                    |
                    |                     }|                    |
                    |                     }t          ||d           |
                                }
|
j                            t          j
                  |
_        |
j                            t          j
                  |
_        t           t#          d          k    }|r|                    |
           d S d}t%          j        t(          |          5  |                    |
           d d d            d S # 1 swxY w Y   d S )Nr)   nearest_neighborsrc      )rl   r\   ra   r   r'   rb   gh㈵>)r   r   r<   r)      r      rm   )r<   r)   r)   r   r   r   r   )rg   rg   rg   r<   rg   rg   rg   )   r   rh   rj   z1.11.3z=Only sparse matrices with 32-bit integer indices are acceptedmatch)r
   r,   r@   rA   rt   r   ru   r5   rI   int32rw   hstackr\   tocsrindptrindicesr   r   rx   raises
ValueError)re   r7   rz   se_amg	se_arpack	embed_amgembed_arpackrowcolvalr\   *scipy_graph_traversal_supports_int64_indexerr_msgs                r4   "test_spectral_embedding_amg_solverr      s    $Y**400  F "$Y**400  I $$QXXe__55I**188E??;;L$YdCCC
 ((((
9
9
9C
((((
9
9
9C
(444BH
E
E
EC}	C:		C:!6!6	3*8M8M NO  H $FO&I$$X__U%;%;<<I**8??5+A+ABBL$YdCCC
 ~~Ho,,RX66HO'..rx88H 2<}X?V?V1V.1 +X&&&&&Q]:W555 	+ 	+  ***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   $KKKc                    d}t          j        ||d|          }|                    |           }t          j        |          t          j        |                                          z
  }||j        z   }t          |ddd          }t          d          D ]*}t          |dd|d	z             }t          ||d
           +d S )Nrg   r>   )densityr'   r   rc   r   )rl   ra   r'   r   r<   r   )r0   )
r   randru   triudiagsdiagonalr+   r   rC   r5   )	re   rz   	num_nodesr   upper
sym_matrixr   rS   new_embeddings	            r4   *test_spectral_embedding_amg_solver_failurer   2  s     IIy#DIIIA	AKNNV\!**,,777EJ"%a  I
 1XX M M*Re!a%
 
 
 	)MtLLLLL	M Mr6   c                    t           j                            |           }t          t          d|          }t          t          dd|          }||fD ]o}t          t          |d          }|                    |                    t                               t          t          |j        t                    dd	           pd S )
Nr   )rl   r\   r'   r   r   )rl   r\   r   r'   r   )
n_clustersr'   n_initr!   r)   )r,   r@   rA   r
   r   r   r   rt   r   r   r   labels_true_labels)rz   r'   r   se_knnsekms         r4   !test_pipeline_spectral_clusteringr   I  s    9((..L%l  F $!	  F v 
 
zRPPP
r""###!([AA3	
 	
 	
 	

 
r6   c                    t          j        g dg dg dg dg dg          }t          |          rJ t          D ]}t           ||                    rJ t          D ]}t           ||                    rJ t          j        g dg dg dg dg dg          }t          |          sJ t          D ]}t           ||                    sJ t          D ]}t           ||                    sJ 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,   rI   r   r   r   )rz   r   csr_containercsc_containers       r4   test_connectivityr   ]  sj   HOOOOOOOOOO	
 E #5)))))' = =&}}U';';<<<<<<' = =&}}U';';<<<<<<HOOOOOOOOOO	
 E u%%%%%' 9 9"==#7#7888888' 9 9"==#7#78888889 9r6   c                      t           j                            d          } |                     dd          }t	          |          }t          |          }t          |          }t          ||           d S )Nr   r      )r,   r@   rA   rp   r   r   r   )r'   r[   simsembedding_1embedding_2s        r4   %test_spectral_embedding_deterministicr   ~  si    9((,,Lb"%%DdD$T**K$T**Kk;77777r6   c                  l   t           j                            d          } |                     dd          }t	          |          }d}t          |d|d          }t          |dd          \  }}t          |          \  }}|j        d |         }	t          |	          j        }	t          ||	           d S )	Nr   r   r      F)norm_laplacianrl   
drop_firstT)normedreturn_diag)r,   r@   rA   rp   r   r   csgraph_laplacianr   r+   r   r   )
r'   r[   r   rl   r   r   dd_diffusion_mapr   s
             r4   $test_spectral_embedding_unnormalizedr     s     9((,,Lb"%%DdDL$U%  K
 &d5dKKKMIrIA}/-<-0K1+>>@Kk;77777r6   c                     t           j                            d          } |                     dd          }t	          |          }d}t          d          D ]p}t          |d|d|          }t          j        |d d df                   t          j	        d          k    sJ t          j        |d d df                   d	k    sJ qd S )
Nr   r   r   r)   F)r   rl   r   r'   r   r<   gMbP?)
r,   r@   rA   rp   r   rC   r   stdrx   ry   )r'   r[   r   rl   rz   r   s         r4   *test_spectral_embedding_first_eigen_vectorr     s     9((,,Lb"%%DdDLb		 
. 
.& %
 
 
	 vi1o&&&-*:*:::::vi1o&&-----
. 
.r6   c                     t                               |          }t          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   )rl   r\   ra   r'   N)r   ru   r
   rt   re   r   r   )ra   re   r   r   X_transs        r4   'test_spectral_embedding_preserves_dtyper     s    $ 	
A	\PQ
 
 
B q!!G=E!!!!=%''''$------r6   z7PyAMG is installed and we should not test for an error.c                      t          ddd          } d}t          j        t          |          5  |                     t
                     d d d            d S # 1 swxY w Y   d S )Nr)   r   rc   )rl   r\   ra   z>The eigen_solver was set to 'amg', but pyamg is not available.r   )r
   rx   r   r   rt   r   )r~   r   s     r4   test_error_pyamg_not_availabler     s    
 #  J
 OG	z	1	1	1 $ $  ###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   AAAsolver)rb   rc   r   r   c                 
   |dk    rt           st          j        d           t          ddddgddggd          \  }}t	          |          }t          j        |          |z
  }|d	k    rt          nt          }|d	k    rdnd
}|dk    r ||          }t          |          }	| 
                    t          |j        |	           t          |d|d           |	                                 |	j        \  }}
|
d         |k    sJ d
S )z2Test that `eigen_tol="auto"` is resolved correctlyrc   zPyAMG is not available.r:   r   r<   r;   g{Gz?)r$   r'   r%   r&   rb   N)side_effectr#   auto)r'   ra   	eigen_tolr0   )pyamg_availablerx   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kwargss              r4   test_spectral_eigen_tol_autor    s*    -...AAR/At  DAq 	1A
q		AA!X--%%6K8++AAMM![111M+[-E}UUUqr&QQQQ!!!'IAv%=M))))))r6   )r   )r   )r   )Nunittest.mockr   numpyr,   rx   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_pyamgrI   r%   r$   ri   r   
n_featuresr   r   r5   parametrizer`   paramfloat32float64r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r4   <module>r     s                          - - - - - - - - " " " " " " ' ' ' ' ' ' W W W W W W W W W W        M L L L L L L L / / / / / / . . . . . . P P P P P P P P A A A A A A              ? > > > > >111111OO   OOO;%% S &   
 "(!!!!!!!!!  	  
Jc  ;

 
 
 
 .99$5 $5 :9$5V U"2333  2:rz":;;)R )R )R <; )RX +d-D^-DEEU"2333  2:rz":;;02E E E <;  FEE4/ / /, +d-D^-DEEF F F FEF2  S    2:rz":;;.993+ 3+ 3+ :9 <; 
3+l  S    2:rz":;;M M M <; M&
 
 
 
(9 9 9 9B8 8 88 8 8(. . .* U"2333  2:rz":;;. . <; .( D   $ $	 $ #>#>#>??.99* * :9 @?* * *s   8B B
B