Ë
    êÿæiô-  ã                   ó„  — 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" ejH                  ddgddgddgg«      dz   Z% edde%ddd¬«      \  Z&Z'ejP                  jS                  de«      ejP                  jS                  dd«      ejP                  jS                  dd«      d„ «       «       «       Z*ejP                  jS                  de«      ejP                  jS                  dd«      d„ «       «       Z+d „ Z,d!„ Z-d"„ Z.d#„ Z/ejP                  jS                  de«      ejP                  jS                  d$g d%¢«      d&„ «       «       Z0d'„ Z1d(„ Z2ejP                  jS                  dd«      d)„ «       Z3d*„ Z4d+„ Z5y# e#$ r dZ"Y �ŒXw xY w),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| |¬«      j                  |«      }|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                  «       ŒÍ y )
N)ç      ð?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   r   )ÚnpÚarrayr   ÚfitÚlabels_r   ÚpickleÚloadsÚdumpsr*   r    r   )	r    r#   r   Úglobal_random_seedÚSÚmatÚmodelÚlabelsÚ
model_copys	            úx/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_spectral.pyÚtest_spectral_clusteringr:   '   sý   € ô 	�‰â/Ú/Ú/Ú/Ú/Ú/Ú/ð	
ó
	€Að ‘= Ó#Ó$ˆÜ"Ø+ØØ"Ø%Ø'ô
÷ ‰#ˆc‹(ð 	ð —‘ˆØ�!‰9˜Š>Ø˜‘ZˆFä" 6Ò+@ÓAÀQÒFÐFÐFä—\‘\¤&§,¡,¨uÓ"5Ó6ˆ
Ø×$Ñ$¨×(8Ñ(8Ò8Ð8Ð8Ø×&Ñ&¨%×*<Ñ*<Ò<Ð<Ð<Ü˜:×-Ñ-¨u¯}©}Õ=ñ# %ó    Úcoo_containerc                 ó  — t        d|ddgddggd¬«      \  }}t        |d¬«      }t        j                  |dz
  d«      } ||«      }t	        |d	d
| ¬«      j                  |«      j                  }t        ||«      dk(  sJ ‚y )Né   r   r   ç{®Gáz„?©r   r   r   r   )Úgammag-Cëâ6?r   r   r)   )r   r*   r+   r#   )r	   r   r,   Úmaximumr   r.   r/   r   )r#   r<   r3   ÚXÚyr4   r7   s          r9   Útest_spectral_clustering_sparserE   M   s™   € ô ØØ'Ø�Q�˜"˜b˜Ð"Øô	�D€A€qô 	�1˜AÔ€AÜ
�
‰
�1�t‘8˜QÓ€AÙ�aÓ€Aô 	Ø+ØØ"Ø'ô		
÷ 
‰ˆQ‹ß	‰ð ô ˜q &Ó)¨QÒ.Ð.Ñ.r;   c                 óB  — t        d| g d¢g d¢gd¬«      \  }}d}g }dD ]l  }t        ||z   ¬«      j                  |«      }|j                  |d	¬
«      }t	        | dd|¬«      j                  |«      j
                  }|j                  |«       Œn t        |d   |d   «       y )Néú   )r   r   r   )r   r   r   r?   r@   r   )r   r   )Ún_neighborsÚdistance)ÚmodeÚprecomputed_nearest_neighbors)r   r*   r+   rH   r   r   )r	   r   r.   Úkneighbors_graphr   r/   Úappendr   )	r3   rC   rD   rH   ÚresultsÚadditional_neighborsÚnnÚgraphr7   s	            r9   Ú,test_precomputed_nearest_neighbors_filteringrR   h   s´   € äØØ'ÚšLÐ)Øô	�D€A€qð €KØ€GÛ 'ÐÜ¨+Ð8LÑ*LÔM×QÑQÐRSÓTˆØ×#Ñ# A¨JÐ#Ó7ˆäØ/ØØ8Ø'ô	÷ ‰S�‹Zß‰Wð 	ð 	�‰�vÕð !(ô �w˜q‘z 7¨1¡:Õ.r;   c                 ó   — t        ddddgddggd¬«      \  }}t        ddd¬	«      }t        j                  t        d
¬«      5  |j                  |«       d d d «       t        ||j                  «      dk(  sJ ‚t        dd| ¬«      }|j                  |«      j                  }t        ||«      dk(  sJ ‚t        d«      j                  dd«      dz  }t        «       }|D ]P  }|dk7  sŒ	t        d|d¬	«      }|j                  |«      j                  }|j                  d   f|j                  k(  rŒPJ ‚ t        dd„ d¬	«      }|j                  |«      j                  }|j                  d   f|j                  k(  sJ ‚d„ }t        d|d¬	«      }|j                  |«      j                  }|j                  d   f|j                  k(  sJ ‚y # 1 sw Y   �ŒqxY w)Nr>   r   r   r   r?   r@   r   Únearest_neighbors)r*   r+   r   znot fully connected©Úmatch)r*   rA   r   r   é   Úadditive_chi2c                  ó   — y)Nr   © )ÚxrD   s     r9   Ú<lambda>z!test_affinities.<locals>.<lambda>¡   s   € Àr;   c                 óX   — |i k(  sJ ‚t        j                  | |«      j                  «       S ©N)r,   ÚminimumÚsum)r[   rD   Úkwargss      r9   Ú	histogramz"test_affinities.<locals>.histogram¥   s(   € à˜Š|Ðˆ|Ü�z‰z˜!˜QÓ×#Ñ#Ó%Ð%r;   )r	   r   ÚpytestÚwarnsÚUserWarningr.   r   r/   r   Úrandr   Úshape)r3   rC   rD   Úspr7   Úkernels_availableÚkernrb   s           r9   Útest_affinitiesrk   …   s®  € ô Ø 1°°1¨v¸¸B°xÐ.@Èdô�D€A€qô 
 qÐ3FÐUVÔ	W€BÜ	�‰”kÐ)>Ö	?Ø
�‰ˆqŒ	÷ 
@ä˜q "§*¡*Ó-°Ò2Ð2Ð2ä	 q°Ð@RÔ	S€BØ�V‰V�A‹Y×Ñ€FÜ˜q &Ó)¨QÒ.Ð.Ð.ä˜2Ó×#Ñ# B¨Ó*¨RÑ/€Aä&Ó(ÐÛ!ˆð �?Ó"Ü#¨q¸4ÈaÔPˆBØ—V‘V˜A“Y×&Ñ&ˆFØ—G‘G˜A‘J�= F§L¡LÓ0Ð0Ð0ð "ô 
 q±>ÐPQÔ	R€BØ�V‰V�A‹Y×Ñ€FØ�G‰G�A‰Jˆ=˜FŸL™LÒ(Ð(Ð(ò&ô
 
 q°9È1Ô	M€BØ�V‰V�A‹Y×Ñ€FØ�G‰G�A‰Jˆ=˜FŸL™LÒ(Ð(Ñ(÷= 
@Ñ	?ús   ÁGÇGc                 óâ  — t         j                  j                  | ¬«      }d\  }}|j                  ||«      }t	        |j                  t         j                  «      «      }|j                  |fk(  sJ ‚t        j                  t        j                  |«      t        j                  |«      «      sJ ‚t	        |j                  t         j                  «      «      }t        j                  ||«      sJ ‚y )N©Úseed)r   rW   )r,   ÚrandomÚRandomStateÚrandnr   ÚastypeÚfloat64rg   Úarray_equalÚuniqueÚarangeÚfloat32)r3   r   r   Ún_componentsÚdataÚlabels_float64Úlabels_float32s          r9   Útest_cluster_qrr|   ¯   s¶   € ô
 —9‘9×(Ñ(Ð.@Ð(ÓA€LØ#Ñ€Iˆ|Ø×Ñ˜i¨Ó6€DÜ §¡¬B¯J©JÓ 7Ó8€Nà×Ñ I <Ò/Ð/Ð/ä�>‰>œ"Ÿ)™) NÓ3´R·Y±Y¸|Ó5LÔMÐMÐMä §¡¬B¯J©JÓ 7Ó8€NÜ�>‰>˜.¨.Ô9Ð9Ñ9r;   c                 óô   — t         j                  j                  | ¬«      }d\  }}|j                  ||«      }|j	                  |«      }t        j
                  t        |«      |   t        ||   «      «      sJ ‚y )Nrm   )éd   rW   )r,   ro   rp   rq   Úpermutationrt   r   )r3   r   r   rx   ry   Úperms         r9   Ú&test_cluster_qr_permutation_invariancer�   Á   su   € ä—9‘9×(Ñ(Ð.@Ð(ÓA€LØ$Ñ€Iˆ|Ø×Ñ˜i¨Ó6€DØ×#Ñ# IÓ.€DÜ�>‰>Ü�4Ó˜ÑÜ�4˜‘:Óôð ñ r;   r   )é2   r~   é–   iô  c                 óÆ  — t         j                  j                  |¬«      }t        dd«      D ]²  }|j	                  d|dz   | «      }t        j
                  |t        «      } |t        j                  | «      t        j                  | «      |ff| |dz   f¬«      }|j                  «       d|j                  | |dz   «      z  z   }t        ||¬«      }t        ||«      d	kD  rŒ²J ‚ y )
Nrm   r   r   r   r   )rg   gš™™™™™¹?)r   gš™™™™™é?)r,   ro   rp   ÚrangeÚrandintr-   ÚfloatÚonesrv   Útoarrayrq   r   r   )	r   r<   r3   r   Ún_classÚy_trueÚy_indicatorÚy_true_noisyÚy_preds	            r9   Útest_discretizer�   Í   sÞ   € ô —9‘9×(Ñ(Ð.@Ð(ÓA€LÜ˜˜B–<ˆà×%Ñ% a¨°1©°iÓ@ˆÜ—‘˜&¤%Ó(ˆá#Ü�W‰W�YÓ¤"§)¡)¨IÓ"6¸Ð!?Ð@Ø˜g¨™kÐ*ô
ˆð #×*Ñ*Ó,¨s°\×5GÑ5GØ�w ‘{ó6
ñ 0
ñ 
ˆô ˜L°|ÔDˆÜ" 6¨6Ó2°SÓ8Ð8Ð8ñ  r;   c                 óÖ  — 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  }	|	j                  «       }
|	j                  t        «      }t        ||
¬«      }t        j                  |j                   |j                  j                  «       z  «      |_        t        |dd| ¬	«      }t        t        j                  |«      «      dk(  sJ ‚t        r!t        |dd
| ¬	«      }t        ||«      dk(  sJ ‚y t        j                  t         «      5  t        |dd
d¬	«       d d d «       y # 1 sw Y   y xY w)N)é(   r‘   ))é   é   )r>   é   )é   é   r   r   r   )Úmaskr!   )r*   r    r   Úamg)r,   ÚindicesÚcopyrr   r‡   r
   Úexpry   Ústdr   Úlenru   Ú
amg_loadedr   rc   ÚraisesÚ
ValueError)r3   r[   rD   Úcenter1Úcenter2Úradius1Úradius2Úcircle1Úcircle2Úcirclesr—   ÚimgrQ   Úlabels_arpackÚ
labels_amgs                  r9   Ú0test_spectral_clustering_with_arpack_amg_solversr«   â   s`  € ô
 �:‰:�hÓ�D€A€qà)Ñ€GˆWØÑ€GˆWà�7˜1‘:‰~ !Ñ# q¨7°1©:¡~¸!Ñ&;Ñ;¸gÀq¹jÑH€GØ�7˜1‘:‰~ !Ñ# q¨7°1©:¡~¸!Ñ&;Ñ;¸gÀq¹jÑH€Gà˜Ñ€GØ�<‰<‹>€DØ
�.‰.œÓ
€Cä˜ 4Ô(€EÜ—‘˜Ÿ™˜ e§j¡j§n¡nÓ&6Ñ6Ó7€E„Jä'Ø˜!¨(ÐASô€Mô Œr�y‰y˜Ó'Ó(¨AÒ-Ð-Ð-åÜ(Ø˜a¨eÐBTô
ˆ
ô # =°*Ó=ÀÒBÐBÑBä�]‰]œ:Õ&Ü °!À%ÐVWÕX÷ '×&Ñ&ús   ÅEÅE(c                 óf  — t        d| ddgddggd¬«      \  }}t        d| ¬«      }|j                  |«      j                  }t        dd| ¬«      j                  |«      j                  }t	        ||«       t        d| ¬	«      j                  |«      j                  }t        j                  ||«      rJ ‚y )
Nr>   r   r   r?   r@   r   )r*   r   )r*   rx   r   )rx   r   )r	   r   r.   r/   r   r,   rt   )r3   rC   rD   rh   r7   Úlabels_same_ncompÚlabels_diff_ncomps          r9   Útest_n_componentsr¯     s»   € ô ØØ'Ø�Q�˜"˜b˜Ð"Øô	�D€A€qô 
 qÐ7IÔ	J€BØ�V‰V�A‹Y×Ñ€Fô 	Ø qÐ7Iô	
÷ 
‰ˆQ‹ß	‰ð ô �vÐ0Ô1ô
 	¨Ð8JÔKß	‰ˆQ‹ß	‰ð ô
 �~‰~˜fÐ&7Ô8Ð8Ð8Ð8r;   c                 óf  — t        ddddgddggd¬«      \  }}t        ddd¬	«      j                  |«       |j                  «       }t	        j
                  d
|j                  «      sJ ‚| dk(  rEt	        j
                  d|j                  «      sJ ‚t	        j
                  d|j                  «      sJ ‚y y )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#   ÚcapsysrC   rD   Úcaptureds        r9   Útest_verboser¹   &  s§   € ô Ø 1°°1¨v¸¸B°xÐ.@Èdô�D€A€qô  !°"¸aÔ@×DÑDÀQÔGà× Ñ Ó"€Hä�9‰9Ð8¸(¿,¹,ÔGÐGÐGà˜Ò Ü�y‰yÐ3°X·\±\ÔBÐBÐBÜ�y‰yÐ5°x·|±|ÔDÐDÑDð !r;   c                  ó´   — t        j                  ddgddgg«      } d}t        j                  t        |¬«      5  t        | «       ddd«       y# 1 sw Y   yxY w)zcCheck that spectral_clustering raises an informative error when passed
    an np.matrix. See #10993r(   g       @z<np\.matrix is not supported. Please convert to a numpy arrayrU   N)r,   Úmatrixrc   rŸ   Ú	TypeErrorr   )rC   Úmsgs     r9   Ú)test_spectral_clustering_np_matrix_raisesr¾   8  sF   € ô 	�	‰	�C˜�:  S˜zÐ*Ó+€Aà
I€CÜ	�‰”y¨Ö	,Ü˜AÔ÷ 
-×	,Ñ	,ús   ¹AÁAc                 óì   — d„ }|j                  t        j                  d|«       t        j                  d«      }t	        j
                  t        d¬«      5  t        |«       ddd«       y# 1 sw Y   yxY w)zkCheck that discretize raises LinAlgError when svd never converges.

    Non-regression test for #21380
    c                  ó   — t        «       ‚r^   r   )Úargsra   s     r9   Únew_svdz;test_spectral_clustering_not_infinite_loop.<locals>.new_svdH  s
   € Ü‹mÐr;   Úsvd)r   é   zSVD did not convergerU   N)Úsetattrr,   Úlinalgrˆ   rc   rŸ   r   r   )r·   ÚmonkeypatchrÂ   Úvectorss       r9   Ú*test_spectral_clustering_not_infinite_looprÉ   B  sQ   € òð ×ÑœŸ	™	 5¨'Ô2Ü�g‰g�gÓ€Gä	�‰”{Ð*@Ö	AÜ�7Ô÷ 
B×	AÑ	Aús   ÁA*Á*A3)6Ú__doc__r0   r´   Únumpyr,   rc   Ú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   rC   Ú_ÚmarkÚparametrizer:   rE   rR   rk   r|   r�   r�   r«   r¯   r¹   r¾   rÉ   rZ   r;   r9   Ú<module>rÜ      sÒ  ðÙ -ã Û 	ã Û Ý $ç Cß <Ý 'Ý 3Ý /ß ?Ý .Ý ,Ý 5ß >ðÝ1à€Jð ˆ"�(‰(�Q˜�F˜R ˜H q¨" gÐ.Ó
/°"Ñ
4€ÙØØØØØØô�€€1ð ‡�×Ñ˜¨.Ó9Ø‡�×Ñ˜Ð)=Ó>Ø‡�×Ñ˜Ð*PÓQñ >ó Ró ?ó :ð >ðF ‡�×Ñ˜¨.Ó9Ø‡�×Ñ˜Ð*PÓQñ/ó Ró :ð/ò2/ò:')òT:ò$	ð ‡�×Ñ˜¨.Ó9Ø‡�×Ñ˜Ò&9Ó:ñ9ó ;ó :ð9ò&!YòH9ð@ ‡�×Ñ˜Ð*PÓQñEó RðEò"óøðS	 ò ØƒJðús   ÁF4 Æ4F?Æ>F?