
    PioE              
          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+ 	 d dl,m-Z- dZ.n# e/$ r dZ.Y nw xY wej0        1                    e. d          Z2 ej3        g dg dg dg          Z4dZ5e4j6        \  Z7Z8 ee5e4dd          \  Z9Z:d;dZ;ej0        <                    de%          d              Z=ej0        <                    d!d"d# ej>        d$e2%          g          ej0        <                    d&ej?        ej@        g          d<d'                        ZAej0        <                    d(dge'          ej0        <                    d!d"d# ej>        d$e2%          g          ej0        <                    d&ej?        ej@        f          	 d=d*                                    ZBd+ ZCej0        <                    d(dge'          d=d,            ZDej0        1                    e. d          ej0        <                    d&ej?        ej@        f          ej0        <                    de%          d=d-                                    ZEej0        1                    e. d          ej0        <                    d&ej?        ej@        f          d=d.                        ZFd=d/ZGd=d0ZHd1 ZId2 ZJd3 ZKej0        <                    d!d"d# ej>        d$e2%          g          ej0        <                    d&ej?        ej@        g          d4                         ZLej0        1                    e.d5          d6             ZMej0        <                    d7g d8          ej0        <                    d9e'          d:                         ZNdS )>    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                     |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         /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/manifold/tests/test_spectral_embedding.py _assert_equal_with_sign_flippingr5   8   s{     q&KAC 
 
uFEEMa'((K77vuu}*++{:::;
 
    coo_containerc                 >   t           j                            d          }d}dddd|g}|                    |          }g }t	          j        |          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	          j        |          D ]}\  }}t!          |||                   }||z
  }|                                |k    sJ t!          |||dz
                     }|                                |k    sJ t%          ||           ~d S )Nr#   i,  r   y         r"   )size皙?      ?)r,   randomRandomStatepermutation	itertoolspairwiserangelenappendrandintextendr*   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_componentra   C   s<   
)


#
#CIRc9-J	""AK )*55 > >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 )*55 	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>   precomputedn_componentsr]   r'   rb   rf   r!   )r,   r?   r@   zerosabsrandnr   allanyflatr+   r
   fit_transformastyperJ   ravelint64r   pytestapprox)rb   rf   seedr'   n_sampler]   	component
true_label
se_precompembedded_coordinatelabel_s              r4   &test_spectral_embedding_two_componentsr   o   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)   rl   rm   rbf)rn   r]   gammar'   rb   r   皙?)Sr
   r,   r?   r@   rv   r   rw   r   affinity_matrix_r5   )
r   rb   rf   r|   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'   rn   r]   r   r;   )r   fitr   kneighbors_graphr
   
embedding_rF   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   )rn   r]   r   r'   r   r   )
r   r   r
   r,   r?   r@   rv   r   r   r5   )	r   r|   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_neighborsrd      )rn   r]   rb   r   r'   rc   gh㈵>)r   r   r;   r)      r      ro   )r;   r)   r)   r   r   r   r   )rh   rh   rh   r;   rh   rh   rh   )   r   ri   rl   z1.11.3z=Only sparse matrices with 32-bit integer indices are acceptedmatch)r
   r,   r?   r@   rv   r   rw   r5   rJ   int32ry   hstackr]   tocsrindptrindicesr   r   rz   raises
ValueError)rf   r7   r|   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 )Nrh   r=   )densityr'   r   rd   r   )rn   rb   r'   r   r;   r   )r0   )
r   randrw   triudiagsdiagonalr+   r   rD   r5   )	rf   r|   	num_nodesr   upper
sym_matrixr   rT   new_embeddings	            r4   *test_spectral_embedding_amg_solver_failurer   3  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   )rn   r]   r'   r   r   )rn   r]   r   r'   r   )
n_clustersr'   n_initr!   r)   )r,   r?   r@   r
   r   r   r   rv   r   r   r   labels_true_labels)r|   r'   r   se_knnsekms         r4   !test_pipeline_spectral_clusteringr   J  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,   rJ   r   r   r   )r|   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?   r@   rr   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_laplacianrn   
drop_firstT)normedreturn_diag)r,   r?   r@   rr   r   r   csgraph_laplacianr   r+   r   r   )
r'   r\   r   rn   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   rn   r   r'   r   r;   gMbP?)
r,   r?   r@   rr   r   rD   r   stdrz   r{   )r'   r\   r   rn   r|   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   )rn   r]   rb   r'   N)r   rw   r
   rv   rf   r   r   )rb   rf   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   rd   )rn   r]   rb   z>The eigen_solver was set to 'amg', but pyamg is not available.r   )r
   rz   r   r   rv   r   )r   r   s     r4   test_error_pyamg_not_availabler     s    
 #  J
 OG	z	1	1	1 $ $  ###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   AAAsolver)rc   rd   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 correctlyrd   zPyAMG is not available.r:   r   r;   rk   g{Gz?)r$   r'   r%   r&   rc   N)side_effectr#   auto)r'   rb   	eigen_tolr0   )pyamg_availablerz   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   )OrB   unittest.mockr   numpyr,   rz   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_pyamgrJ   r%   r$   rj   r   
n_featuresr   r   r5   parametrizera   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   <B BB