
    0Ph+                        d Z ddlZddlZddlZddl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 dd	lmZm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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e          ej(        )                    dd          ej(        )                    dd          d                                     Z*ej(        )                    de          ej(        )                    dd          d                         Z+d  Z,d! Z-d" Z.d# Z/ej(        )                    de          ej(        )                    d$g d%          d&                         Z0d' Z1d( Z2ej(        )                    dd          d)             Z3d* Z4d+ Z5dS ),z'Testing for Spectral Clustering methods    NLinAlgError)SpectralClusteringspectral_clustering)
cluster_qr
discretize)
make_blobs)img_to_graph)adjusted_rand_score)kernel_metrics
rbf_kernel)NearestNeighbors)check_random_state)assert_array_equal)COO_CONTAINERSCSR_CONTAINERS)smoothed_aggregation_solverTF   
   <      g?)	n_samples
n_featurescenterscluster_stdshufflerandom_statecsr_container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          }| ||          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   fitlabels_r   pickleloadsdumpsr*   r    r   )r    r#   r   Smatmodellabels
model_copys           c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_spectral.pytest_spectral_clusteringr9   '   sV    	/////////////////////	

	 
	A ==##$ > >""%'
 
 
 #c(( 	 !9>>ZF"6+@+@+@AAQFFFF\&,u"5"566
$(88888&%*<<<<<:-u}====#> >    coo_containerc                 (   t          ddddgddggd          \  }}t          |d          }t          j        |dz
  d          } ||          }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   r.   r/   r   )r#   r;   Xyr3   r6   s         r8   test_spectral_clustering_sparserD   K   s     11vBx.@d  DAq 	1AA

1t8QAaA 	"'		
 	
 	
 
Q	  q&))Q......r:   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+   rG   )r	   r   r.   kneighbors_graphr   r/   appendr   )rB   rC   rG   resultsadditional_neighborsnngraphr6   s           r8   ,test_precomputed_nearest_neighbors_filteringrQ   c   s    AAR/At  DAq KG '  +8L*LMMMQQRSTT##AN#;;8'	   SZZ 	 	vwqz71:.....r:   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    )xrC   s     r8   <lambda>z!test_affinities.<locals>.<lambda>   s     r:   c                 `    |i k    sJ t          j        | |                                          S N)r,   minimumsum)rZ   rC   kwargss      r8   	histogramz"test_affinities.<locals>.histogram   s-    ||||z!Q##%%%r:   )r	   r   pytestwarnsUserWarningr.   r   r/   r   randr   shape)rB   rC   spr6   kernels_availablekernra   s          r8   test_affinitiesrj   }   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   rV   )r,   randomRandomStaterandnr   astypefloat64rf   array_equaluniquearangefloat32)r   r   n_componentsdatalabels_float64labels_float32s         r8   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9r:   c                      t           j                            d          } d\  }}|                     ||          }|                     |          }t          j        t          |          |         t          ||                             sJ d S )Nrl   rm   )d   rV   )r,   ro   rp   rq   permutationrt   r   )r   r   rx   ry   perms        r8   &test_cluster_qr_permutation_invariancer      s    9((a(00L$I|i66D##I..D>44:      r:   r   )2   r~      i  c                    t           j                            d          }t          dd          D ]}|                    d|dz   |           }t          j        |t                    } |t          j        |           t          j        |           |ff| |dz   f          }|	                                d|
                    | |dz             z  z   }t          ||	          }t          ||          d
k    sJ d S )Nrl   rm   r   r   r   r   )rf   g?)r   g?)r,   ro   rp   rangerandintr-   floatonesrv   toarrayrq   r   r   )r   r;   r   n_classy_truey_indicatory_true_noisyy_preds           r8   test_discretizer      s    9((a(00LB<< 9 9%%a1i@@&%((#m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 9r:   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=      )rl      r   r   r   )maskr!   )r*   r    r   amg)r,   indicescopyrr   r   r
   expry   stdr   lenru   
amg_loadedr   rb   raises
ValueError)rZ   rC   center1center2radius1radius2circle1circle2circlesr   imgrP   labels_arpack
labels_amgs                 r8   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*   rx   r   )rx   r   )r	   r   r.   r/   r   r,   rt   )rB   rC   rg   r6   labels_same_ncomplabels_diff_ncomps         r8   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8r:   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#   capsysrB   rC   captureds        r8   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Dr:   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       @z<np\.matrix is not supported. Please convert to a numpy arrayrT   N)r,   matrixrb   r   	TypeErrorr   )rB   msgs     r8   )test_spectral_clustering_np_matrix_raisesr   '  s     		C:Sz*++A
IC	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     r8   new_svdz;test_spectral_clustering_not_infinite_loop.<locals>.new_svd7  s    mmr:   svd)r      zSVD did not convergerT   N)setattrr,   linalgr   rb   r   r   r   )r   monkeypatchr   vectorss       r8   *test_spectral_clustering_not_infinite_loopr   1  s       	5'222ggG	{*@	A	A	A  7                 s   A11A58A5)6__doc__r0   r   numpyr,   rb   scipy.linalgr   sklearn.clusterr   r   sklearn.cluster._spectralr   r   sklearn.datasetsr	   sklearn.feature_extractionr
   sklearn.metricsr   sklearn.metrics.pairwiser   r   sklearn.neighborsr   sklearn.utilsr   sklearn.utils._testingr   sklearn.utils.fixesr   r   pyamgr   r   ImportErrorr-   r   rB   _markparametrizer9   rD   rQ   rj   r|   r   r   r   r   r   r   r   rY   r:   r8   <module>r      sn   - -  				      $ $ $ $ $ $ C C C C C C C C < < < < < < < < ' ' ' ' ' ' 3 3 3 3 3 3 / / / / / / ? ? ? ? ? ? ? ? . . . . . . , , , , , , 5 5 5 5 5 5 > > > > > > > >111111JJ   JJJ "(QFRHq"g.
/
/"
4z  1 .99)=>>*PQQ> > RQ ?> :9>B .99*PQQ/ / RQ :9/,/ / /4') ') ')T: : :$	 	 	 .99&9&9&9::9 9 ;: :99&!Y !Y !YH9 9 9. *PQQE E RQE"      s   A' 'A10A1