
     h,                        d Z ddlZddlZddlm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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  dZ!n# e"$ r dZ!Y nw xY w ej#        ddgddgddgg          dz   Z$ edde$ddd          \  Z%Z&ej'        (                    dd          ej'        (                    dd          d                         Z)ej'        (                    dd          d             Z*d Z+d Z,d  Z-d! Z.ej'        (                    d"g d#          d$             Z/ej'        0                    d%          ej'        0                    d&          ej'        0                    d'          d(                                     Z1d) Z2ej'        (                    dd          d*             Z3d+ Z4d, Z5dS )-z'Testing for Spectral Clustering methods    N)sparseLinAlgError)check_random_state)assert_array_equal)SpectralClusteringspectral_clustering)
discretize
cluster_qr)img_to_graph)adjusted_rand_score)kernel_metrics
rbf_kernel)NearestNeighbors)
make_blobs)smoothed_aggregation_solverTF   
   <      g?)	n_samples
n_featurescenterscluster_stdshufflerandom_stateeigen_solver)arpacklobpcgassign_labels)kmeansr
   r   c           
          t          j        g dg dg dg dg dg dg dg          }|t          j        |          fD ]}t	          ddd| |                              |          }|j        }|d         dk    rd|z
  }t          |g d	          dk    sJ t          j	        t          j
        |                    }|j        |j        k    sJ |j        |j        k    sJ t          |j        |j                   d S )
N)      ?r$   r$   皙?        r&   r&   )r%   r%   r%   r$   r$   r$   r$   )r&   r&   r&   r$   r$   r$   r$   r   r   precomputed)r   
n_clustersaffinityr   r!   r   )r   r   r   r   r   r   r   )nparrayr   
csr_matrixr   fitlabels_r   pickleloadsdumpsr(   r   r   )r   r!   Smatmodellabels
model_copys          _/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clusteringr8   )   sW    	/////////////////////	

	 
	A 6$Q''( > >""%'
 
 
 #c(( 	 !9>>ZF"6+@+@+@AAQFFFF\&,u"5"566
$(88888&%*<<<<<:-u}====#> >    c                 :   t          ddddgddggd          \  }}t          |d          }t          j        |dz
  d          }t	          j        |          }t          dd	d
|                               |          j        }t          ||          dk    sJ d S )N   r   r   r   {Gz?r   r   r   r   )gammag-C6?r   r'   )r   r(   r)   r!   )
r   r   r*   maximumr   
coo_matrixr   r-   r.   r   )r!   Xyr2   r5   s        r7   test_spectral_clustering_sparserC   L   s    11vBx.@d  DAq 	1AA

1t8QA!A 	"'		
 	
 	
 
Q	  q&))Q......r9   c                     t          ddddgddggd          \  } }d}g }dD ]}t          ||z   	                              |           }|                    | d
          }t	          ddd|                              |          j        }|                    |           t          |d         |d                    d S )N   r   r   r   r<   r=   r   )r   r   )n_neighborsconnectivity)modeprecomputed_nearest_neighbors)r   r(   r)   rF   )r   r   r-   kneighbors_graphr   r.   appendr   )rA   rB   rF   resultsadditional_neighborsnngraphr5   s           r7   ,test_precomputed_nearest_neighbors_filteringrP   c   s    AAR/At  DAq KG '  +8L*LMMMQQRSTT##AN#;;8'	   SZZ 	 	vwqz71:.....r9   c                     t          ddddgddggd          \  } }t          ddd	          }t          j        t          d
          5  |                    |            d d d            n# 1 swxY w Y   t          ||j                  dk    sJ t          ddd          }|                    |           j        }t          ||          dk    sJ t          d          	                    dd          dz  } t                      }|D ]M}|dk    rEt          d|d	          }|                    |           j        }| j        d         f|j        k    sJ Nt          dd d	          }|                    |           j        }| j        d         f|j        k    sJ d }t          d|d	          }|                    |           j        }| j        d         f|j        k    sJ d S )Nr;   r   r   r   r<   r=   r   nearest_neighbors)r(   r)   r   znot fully connectedmatch)r(   r>   r   r      additive_chi2c                     dS )Nr    )xrB   s     r7   <lambda>z!test_affinities.<locals>.<lambda>   s     r9   c                 `    |i k    sJ t          j        | |                                          S N)r*   minimumsum)rY   rB   kwargss      r7   	histogramz"test_affinities.<locals>.histogram   s-    ||||z!Q##%%%r9   )r   r   pytestwarnsUserWarningr-   r   r.   r   randr   shape)rA   rB   spr5   kernels_availablekernr`   s          r7   test_affinitiesri   }   sJ    11vBx.@d  DAq 
q3FUV	W	W	WB	k)>	?	?	?  
q			              q"*--2222	q	B	B	BBVVAYYFq&))Q....2##B**R/A&((! 1 1 ?""#q4aPPPBVVAYY&FGAJ=FL0000	q>>PQ	R	R	RBVVAYYFGAJ=FL((((& & &
 
q91	M	M	MBVVAYYFGAJ=FL((((((s   
A,,A03A0c                     t           j                            d          } d\  }}|                     ||          }t	          |                    t           j                            }|j        |fk    sJ t          j        t          j	        |          t          j
        |                    sJ t	          |                    t           j                            }t          j        ||          sJ d S )N   seed)r   rU   )r*   randomRandomStaterandnr   astypefloat64re   array_equaluniquearangefloat32)r   r   n_componentsdatalabels_float64labels_float32s         r7   test_cluster_qrr{      s    
 9((a(00L#I|i66DBJ 7 788NI<////>")N33RY|5L5LMMMMMBJ 7 788N>..9999999r9   c                      t           j                            d          } d\  }}|                     ||          }|                     |          }t          j        t          |          |         t          ||                             sJ d S )Nrk   rl   )d   rU   )r*   rn   ro   rp   permutationrs   r   )r   r   rw   rx   perms        r7   &test_cluster_qr_permutation_invariancer      s    9((a(00L$I|i66D##I..D>44:      r9   r   )2   r}      i  c                 
   t           j                            d          }t          dd          D ]}|                    d|dz   |           }t          j        |t                    }t          j        t          j	        |           t          j
        |           |ff| |dz   f          }|                                d|                    | |dz             z  z   }t          ||	          }t          ||          d
k    sJ d S )Nrk   rl   r   r   r   r   )re   g?)r   g?)r*   rn   ro   rangerandintr+   floatr   r@   onesru   toarrayrp   r
   r   )r   r   n_classy_truey_indicatory_true_noisyy_preds          r7   test_discretizer      s    9((a(00LB<< 9 9%%a1i@@&%(('WY")I"6"6!?@gk*
 
 
 #**,,s\5G5Gw{6
 6
 0
 
 L|DDD"6622S888889 9r9   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                  4   t          j        d          \  } }d\  }}d\  }}| |d         z
  dz  ||d         z
  dz  z   |dz  k     }| |d         z
  dz  ||d         z
  dz  z   |dz  k     }||z  }|                                }	|                    t                    }
t          |
|	          }t          j        |j         |j                                        z            |_        t          |ddd	          }t          t          j        |                    dk    sJ t          r+t          |dd
d	          }t          ||          dk    sJ d S t          j        t                     5  t          |dd
d	           d d d            d S # 1 swxY w Y   d S )N)(   r   ))      )r;      )rk      r   r   r   )maskr   )r(   r   r   amg)r*   indicescopyrq   r   r   exprx   stdr	   lenrt   
amg_loadedr   ra   raises
ValueError)rY   rB   center1center2radius1radius2circle1circle2circlesr   imgrO   labels_arpack
labels_amgs                 r7   0test_spectral_clustering_with_arpack_amg_solversr      s     :hDAq)GWGW71:~!#q71:~!&;;gqjHG71:~!#q71:~!&;;gqjHGG<<>>D
..

C4(((Eejnn&6&6677EJ'!(  M ry''((A---- Y(ae!
 
 

 #=*==BBBBBB]:&& 	Y 	Y!%VWXXXX	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Ys   ,FFFc                     t          ddddgddggd          \  } }t          dd          }|                    |           j        }t          ddd	                              |           j        }t	          ||           t          dd
                              |           j        }t          j        ||          rJ d S )Nr;   r   r   r   r<   r=   r   )r(   r   )r(   rw   r   )rw   r   )r   r   r-   r.   r   r*   rs   )rA   rB   rf   r5   labels_same_ncomplabels_diff_ncomps         r7   test_n_componentsr   
  s     11vBx.@d  DAq 
qq	9	9	9BVVAYYF 	aaaHHHLLQOOW  v0111
 	:::>>qAAI  ~f&78888888r9   c                 h   t          ddddgddggd          \  }}t          ddd	                              |           |                                }t	          j        d
|j                  sJ | dk    r8t	          j        d|j                  sJ t	          j        d|j                  sJ d S d S )Nr;   r   r   r   r<   r=   r   *   )r(   r   verbosez Computing label assignment usingr"   zInitialization completezIteration [0-9]+, inertia)r   r   r-   
readouterrresearchout)r!   capsysrA   rB   captureds        r7   test_verboser   !  s     11vBx.@d  DAq !"a@@@DDQGGG  ""H98(,GGGGG  y3X\BBBBBy5x|DDDDD ! DDr9   c                      t          j        ddgddgg          } d}t          j        t          |          5  t          |            ddd           dS # 1 swxY w Y   dS )zbCheck that spectral_clustering raises an informative error when passed
    a np.matrix. See #10993r&   g       @zIspectral_clustering does not support passing in affinity as an np\.matrixrS   N)r*   matrixra   r   	TypeErrorr	   )rA   msgs     r7   )test_spectral_clustering_np_matrix_raisesr   3  s     		C:Sz*++A
VC	y	,	,	,  A                 s   AAAc                     d }|                     t          j        d|           t          j        d          }t	          j        t          d          5  t          |           ddd           dS # 1 swxY w Y   dS )zkCheck that discretize raises LinAlgError when svd never converges.

    Non-regression test for #21380
    c                      t                      r\   r   )argsr_   s     r7   new_svdz;test_spectral_clustering_not_infinite_loop.<locals>.new_svdC  s    mmr9   svd)r      zSVD did not convergerS   N)setattrr*   linalgr   ra   r   r   r
   )r   monkeypatchr   vectorss       r7   *test_spectral_clustering_not_infinite_loopr   =  s       	5'222ggG	{*@	A	A	A  7                 s   A11A58A5)6__doc__r   numpyr*   scipyr   scipy.linalgr   ra   r/   sklearn.utilsr   sklearn.utils._testingr   sklearn.clusterr   r	   sklearn.cluster._spectralr
   r   sklearn.feature_extractionr   sklearn.metricsr   sklearn.metrics.pairwiser   r   sklearn.neighborsr   sklearn.datasetsr   pyamgr   r   ImportErrorr+   r   rA   _markparametrizer8   rC   rP   ri   r{   r   r   filterwarningsr   r   r   r   r   rX   r9   r7   <module>r      s}   - - 				           $ $ $ $ $ $   , , , , , , 5 5 5 5 5 5 C C C C C C C C < < < < < < < < 3 3 3 3 3 3 / / / / / / ? ? ? ? ? ? ? ? . . . . . . ' ' ' ' ' '111111JJ   JJJ "(QFRHq"g.
/
/"
4z  1 )=>>*PQQ> > RQ ?>>B *PQQ/ / RQ/,/ / /4') ') ')T: : :$	 	 	 &9&9&9::9 9 ;:9* @  H  H !Y !Y 	 	 !YH9 9 9. *PQQE E RQE"      s   A% %A/.A/