Ë
    ÷Q(hz.  ã                   ób  — d Z ddlZddlZddl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 dd	lmZ d
Z ej.                  ddgddgddgg«      dz   Z eddeddd¬«      \  ZZd„ Zd„ Zd„ Zd„ Zej>                  jA                  de«      d„ «       Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d „ Z)ej>                  jA                  d!eej.                  gz   «      d"„ «       Z*d#„ Z+ej>                  jA                  de«      d$„ «       Z,ej>                  jA                  de«      d%„ «       Z-d&„ Z.y)'z!
Testing for Clustering methods

é    N)ÚAffinityPropagationÚaffinity_propagation)Ú#_equal_similarities_and_preferences)Ú
make_blobs)ÚConvergenceWarningÚNotFittedError)Úeuclidean_distances)Úassert_allcloseÚassert_array_equal)ÚCSR_CONTAINERSé   é   éÿÿÿÿé
   é<   é   gš™™™™™Ù?T)Ú	n_samplesÚ
n_featuresÚcentersÚcluster_stdÚshuffleÚrandom_statec                 óÈ   — t        t        j                  |d¬«      d¬«       }t        j                  |«      dz  }t        ||| ¬«      \  }}t        |«      }t        |k(  sJ ‚y)z.Test consistency of the affinity propagations.F©ÚcopyT©Úsquaredr   ©Ú
preferencer   N)r	   ÚXÚastypeÚnpÚmedianr   ÚlenÚ
n_clusters)Úglobal_random_seedÚglobal_dtypeÚSr   Úcluster_centers_indicesÚlabelsÚn_clusters_s          úm/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_affinity_propagation.pyÚtest_affinity_propagationr-   #   sc   € ä	œQŸX™X l¸˜XÓ?ÈÔ	NÐN€AÜ—‘˜1“ Ñ"€JÜ&:Ø	�jÐ/Aô'Ñ#Ð˜Vô Ð-Ó.€Kä˜Ò$Ð$Ñ$ó    c                  ó¨  — t        t        d¬«       } t        j                  | «      dz  }t	        |dd¬«      }|j                  | «      j                  }t	        |dd¬«      }|j                  t        «      j                  }t        ||«       |j                  }t        |«      }t        j                  |«      j                  |k(  sJ ‚t        |k(  sJ ‚y	)
z^Check equality of precomputed affinity matrix to internally computed affinity
    matrix.
    Tr   r   Úprecomputedé   ©r   Úaffinityr   é%   ©r   Úverboser   N)r	   r    r"   r#   r   ÚfitÚlabels_r   Úcluster_centers_indices_r$   ÚuniqueÚsizer%   )r(   r   ÚafÚlabels_precomputedr*   r)   r+   s          r,   Ú%test_affinity_propagation_precomputedr>   0   sº   € ô 
œQ¨Ô	-Ð-€AÜ—‘˜1“ Ñ"€JÜ	Ø¨ÀBô
€Bð Ÿ™ ›×*Ñ*Ðä	¨
¸DÈrÔ	R€BØ�V‰V”A‹Y×Ñ€Fä�vÐ1Ô2à ×9Ñ9ÐäÐ-Ó.€KÜ�9‰9�VÓ×!Ñ! [Ò0Ð0Ð0Ü˜Ò$Ð$Ñ$r.   c                  óÂ  — t        t        d¬«       } | j                  «       }t        j                  | «      dz  }t        j
                  | j                  «       |«      rJ ‚t        | |dd¬«       t        | |«       t        j
                  | j                  «       |«      rJ ‚t        | j                  «       t        j                  | j                  d   «      «       t        | |dd¬«       t        | j                  «       |«       |j                  «       } t        |dd¬«      }|j                  t        «      j                  }t        | |dd¬«      \  }}t        ||«       y	)
z.Check behaviour of not copying the input data.Tr   r   r   )r   r   r   Fr5   éJ   N)r	   r    r   r"   r#   ÚallcloseÚdiagonalr   r
   ÚzerosÚshaper   r7   r8   r   )r(   Ú
S_originalr   r<   r*   Ú_Úlabels_no_copys          r,   Ú!test_affinity_propagation_no_copyrH   G   s  € ä	œQ¨Ô	-Ð-€AØ—‘“€JÜ—‘˜1“ Ñ"€JÜ�{‰{˜1Ÿ:™:›<¨Ô4Ð4Ð4ô ˜ z¸È1ÕMÜ�A�zÔ"Ü�{‰{˜1Ÿ:™:›<¨Ô4Ð4Ð4Ü�A—J‘J“L¤"§(¡(¨1¯7©7°1©:Ó"6Ô7ô ˜ z¸ÈAÕNÜ�A—J‘J“L *Ô-ð 	�‰Ó€AÜ	¨
¸DÈqÔ	Q€Bà�V‰V”A‹Y×Ñ€FÜ,Ø	�j u¸2ôÑ€A€~ô �v˜~Õ.r.   c                  ó´   — t        t        d¬«       } d}t        j                  t        |¬«      5  t        | dd…dd…f   «       ddd«       y# 1 sw Y   yxY w)zHCheck the shape of the affinity matrix when using `affinity_propagation.Tr   z1The matrix of similarities must be a square array©ÚmatchNr   )r	   r    ÚpytestÚraisesÚ
ValueErrorr   )r(   Úerr_msgs     r,   Ú(test_affinity_propagation_affinity_shaperP   c   sM   € ä	œQ¨Ô	-Ð-€AØA€GÜ	�‰”z¨Ô	1ñ (Ü˜Qšq # 2 #˜v™YÔ'÷(÷ (ñ (ús   °AÁAÚcsr_containerc                 óª   — d}t        j                  t        |¬«      5  t        d¬«      j	                   | d«      «       d d d «       y # 1 sw Y   y xY w)Nz8Sparse data was passed for X, but dense data is requiredrJ   r0   ©r3   )r   r   )rL   rM   Ú	TypeErrorr   r7   )rQ   rO   s     r,   Ú7test_affinity_propagation_precomputed_with_sparse_inputrU   k   sF   € àH€GÜ	�‰”y¨Ô	0ñ OÜ ]Ô3×7Ñ7¹ÀfÓ8MÔN÷O÷ Oñ Oús   ž"A	Á	Ac                 ó¨   — t        d| ¬«      }t        j                  |d¬«      }|j                  |«      }|j	                  |«      }t        ||«       y )NÚ	euclidean©r3   r   Fr   )r   r    r!   Úfit_predictÚpredictr   )r&   r'   r<   ÚX_r*   Úlabels2s         r,   Ú!test_affinity_propagation_predictr]   r   sF   € ä	 kÐ@RÔ	S€BÜ	
�‰�, UˆÓ	+€BØ�^‰^˜BÓ€FØ�j‰j˜‹n€GÜ�v˜wÕ'r.   c                  ó¸  — t        d¬«      } t        j                  t        «      5  | j	                  t
        «       d d d «       t        j                  t
        t
        j                  «      }t        dd¬«      } | j                  |«       t        j                  t        d¬«      5  | j	                  t
        «       d d d «       y # 1 sw Y   Œ‰xY w# 1 sw Y   y xY w)NrW   rS   r0   é9   rX   zexpecting 60 features as inputrJ   )r   rL   rM   r   rZ   r    r"   ÚdotÚTr7   rN   )r<   r(   s     r,   Ú'test_affinity_propagation_predict_errorrb   {   sš   € ô 
 kÔ	2€BÜ	�‰”~Ó	&ñ Ø
�
‰
”1Œ÷ô 	�‰Œq”!—#‘#‹€AÜ	 mÀ"Ô	E€BØ‡F�Fˆ1„IÜ	�‰”zÐ)IÔ	Jñ Ø
�
‰
”1Œ÷ð ÷ð ú÷ð ús   ¦CÂ%CÃCÃCc                 ó†  — t        j                  ddgddgddgg| ¬«      }t        ddd¬«      }t        j                  t
        «      5  |j                  |«       d d d «       t        t        j                  d«      |j                  «       t        t        j                  g d	¢«      |j                  «       y # 1 sw Y   Œ^xY w)
Nr   r   éþÿÿÿ©ÚdtypeéöÿÿÿéR   ©r   Úmax_iterr   )r   r   ©r   r   r   )r"   Úarrayr   rL   Úwarnsr   r7   r
   ÚemptyÚcluster_centers_r   r8   )r'   r    r<   s      r,   Ú-test_affinity_propagation_fit_non_convergencerp   Š   s”   € ô 	�‰�1�a�&˜1˜a˜& 2 r (Ð+°<Ô@€Aô 
¨°aÀbÔ	I€Bä	�‰Ô(Ó	)ñ Ø
�‰ˆqŒ	÷ä”B—H‘H˜VÓ$ b×&9Ñ&9Ô:Ü”r—x‘x¢Ó-¨r¯z©zÕ:÷ð ús   ÁB7Â7C c                 óª  — t        j                  ddgddgg| ¬«      }t        |d¬«       }t        j                  t
        d¬«      5  t        |d¬	«      \  }}d d d «       t        ddg«       t        ddg«       t        j                  t
        d¬«      5  t        |d
¬	«      \  }}d d d «       t        dg|«       t        ddg|«       t        j                  «       5  t        j                  dt
        «       t        |dd
gd¬«      \  }}d d d «       t        dg|«       t        ddg|«       y # 1 sw Y   ŒÚxY w# 1 sw Y   Œ–xY w# 1 sw Y   Œ=xY w)Nr   r   re   Tr   zmutually equalrJ   r   )r   rg   Úerroriìÿÿÿr4   r   )r"   rl   r	   rL   rm   ÚUserWarningr   r   ÚwarningsÚcatch_warningsÚsimplefilter)r'   r    r(   Úcluster_center_indicesr*   s        r,   Ú3test_affinity_propagation_equal_mutual_similaritiesrx   ™   sM  € Ü
�‰�2�q�'˜A˜r˜7Ð#¨<Ô8€AÜ	˜Q¨Ô	-Ð-€Aô 
�‰”kÐ)9Ô	:ñ OÜ)=¸aÈAÔ)NÑ&Ð ÷Oô ˜˜1�vÐ5Ô6Ü˜˜1�v˜vÔ&ô 
�‰”kÐ)9Ô	:ñ QÜ)=¸aÈCÔ)PÑ&Ð ÷Qô ˜�sÐ2Ô3Ü˜˜1�v˜vÔ&ô 
×	 Ñ	 Ó	"ñ 
Ü×Ñ˜g¤{Ô3Ü)=Ø˜3 ˜*°2ô*
Ñ&Ð ÷
ô ˜�sÐ2Ô3Ü˜˜1�v˜vÕ&÷1Oð Oú÷Qð Qú÷
ð 
ús$   ÁD1ÂD=Ã.E	Ä1D:Ä=EÅ	Ec                 óÖ  — t        j                  ddgddgddgg| ¬«      }t        j                  t        «      5  t        ddd¬«      j                  |«      }d d d «       t        j                  ddgd	d	gd
d
gg«      }t        j                  t        «      5  j                  |«      }d d d «       t        t        j                  g d¢«      «       y # 1 sw Y   Œ|xY w# 1 sw Y   Œ7xY w)Nr   r   rd   re   rg   éK   ri   r   r   é   rk   )	r"   rl   rL   rm   r   r   r7   rZ   r   )r'   r    r<   Ú
to_predictÚys        r,   Ú1test_affinity_propagation_predict_non_convergencer~   ¹   sÏ   € ô 	�‰�1�a�&˜1˜a˜& 2 r (Ð+°<Ô@€Aô 
�‰Ô(Ó	)ñ UÜ ¨C¸!È"ÔM×QÑQÐRSÓTˆ÷Uô
 —‘˜A˜q˜6 A q 6¨A¨q¨6Ð2Ó3€JÜ	�‰Ô(Ó	)ñ #Ø�J‰J�zÓ"ˆ÷#ä”r—x‘x¢Ó-¨qÕ1÷Uð Uú÷#ð #ús   ºCÂCÃCÃC(c                 ó<  — t        j                  g d¢g d¢g d¢g| ¬«      }t        ddd¬«      }d	}t        j                  t
        |¬
«      5  |j                  |«       d d d «       t        t        j                  g d¢«      |j                  «       y # 1 sw Y   Œ5xY w)N)r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   re   rW   r   é"   )r3   rj   r   zcAffinity propagation did not converge, this model may return degenerate cluster centers and labels.rJ   )r   r   r   )	r"   rl   r   rL   rm   r   r7   r   r8   )r'   r    r<   Úmsgs       r,   Ú8test_affinity_propagation_non_convergence_regressiontestr‚   Ê   s‚   € Ü
�‰Ú	Ò/Ò1CÐDÈLô	€Aô 
 k¸AÈBÔ	O€Bð	'ð ô 
�‰Ô(°Ô	4ñ Ø
�‰ˆqŒ	÷ô ”r—x‘x¢	Ó*¨B¯J©JÕ7÷ð ús   ÁBÂBc                 óR  — t        j                  ddgddgddgg| ¬«      }t        |d¬«       }t        |t        j                  d«      «      rJ ‚t        |t        j                  ddg«      «      rJ ‚t        |t        j                  ddg«      «      rJ ‚t        j                  ddgddgg| ¬«      }t        |d¬«       }t        |t        j                  ddg«      «      rJ ‚t        |t        j                  ddg«      «      sJ ‚t        |t        j                  d«      «      sJ ‚y )Nr   r   rd   re   Tr   )r"   rl   r	   r   )r'   r    r(   s      r,   Ú'test_equal_similarities_and_preferencesr„   Ù   s
  € ä
�‰�1�a�&˜1˜a˜& 2 r (Ð+°<Ô@€AÜ	˜Q¨Ô	-Ð-€Aä2°1´b·h±h¸q³kÔBÐBÐBÜ2°1´b·h±hÀÀ1¸vÓ6FÔGÐGÐGÜ2°1´b·h±hÀÀ1¸vÓ6FÔGÐGÐGô 	�‰�1�a�&˜1˜a˜&Ð!¨Ô6€AÜ	˜Q¨Ô	-Ð-€Aô 3°1´b·h±hÀÀ1¸vÓ6FÔGÐGÐGô /¨q´"·(±(¸A¸q¸6Ó2BÔCÐCÐCÜ.¨q´"·(±(¸1³+Ô>Ð>Ñ>r.   c                  ó*  — ddgddgddgg} t        d| dd¬«      \  }}t        ddd¬«      }|j                  |«       |j                  }t        ddd	¬«      }|j                  |«       |j                  }t	        j
                  ||z
  dz  «      dkD  sJ ‚y
)z†Check that different random states lead to different initialisations
    by looking at the center locations after two iterations.
    r   r   i,  ç      à?r   )r   r   r   r   r   )Úconvergence_iterrj   r   éL   N)r   r   r7   ro   r"   Úmean)r   r    Úlabels_trueÚapÚcenters0Ú	centers76s         r,   Ú&test_affinity_propagation_random_staterŽ   î   s    € ð �1ˆv˜˜B�x ! R Ð)€GÜØ˜w°CÀaô�N€A€{ô 
¨a¸!È!Ô	L€BØ‡F�Fˆ1„IØ×"Ñ"€Hô 
¨a¸!È"Ô	M€BØ‡F�Fˆ1„IØ×#Ñ#€Iä�7‰7�H˜yÑ(¨QÑ.Ó/°!Ò3Ð3Ñ3r.   Ú	containerc                 ó^  —  | t        j                  d«      «      }t         j                  j                  d«      }|j	                  dd«      j                  |d¬«      }d|j	                  d«      z  j                  t        «      }t        d¬	«      }|j                  ||«       ||_	        t        j                  «       5  t        j                  d
t        «       t        |j                  |«      t        j                  |j                   d   t        ¬«      «       ddd«       y# 1 sw Y   yxY w)zŒ
    Check that having sparse or dense `centers` format should not
    influence the convergence.
    Non-regression test for gh-13334.
    )r   r   é*   é(   r   Fr   r{   é.   )r   rr   r   re   N)r"   rC   ÚrandomÚRandomStateÚrandr!   Úintr   r7   ro   rt   ru   rv   r   r   rZ   rD   )r�   r'   r   Úrngr    r}   r‹   s          r,   Ú:test_affinity_propagation_convergence_warning_dense_sparser™     sâ   € ñ œŸ™ Ó)Ó*€GÜ
�)‰)×
Ñ
 Ó
#€CØ�‰��RÓ×Ñ °5ÐÓ9€AØ	
ˆS�X‰X�b‹\Ñ	×!Ñ!¤#Ó&€AÜ	¨"Ô	-€BØ‡F�Fˆ1ˆa„LØ!€BÔÜ	×	 Ñ	 Ó	"ñ KÜ×Ñ˜gÔ'9Ô:Ü˜2Ÿ:™: a›=¬"¯(©(°1·7±7¸1±:ÄSÔ*IÔJ÷K÷ Kñ Kús   Â>AD#Ä#D,c                 óÞ   — t        j                  g d¢g d¢g d¢g d¢g| ¬«      }t        ddd¬«      j                  |«      }t        j                  g d	¢«      }t	        |j
                  |«       y )
N)r   r   r   r   )r   r   r   r   )r   r   r   r   re   r   r0   r   r2   )r   r   r   r   )r"   rl   r   r7   r   r8   )r'   r    ÚafpÚexpecteds       r,   Útest_correct_clustersr�     s]   € ô 	�‰Ú	’|¢\²<Ð@Èô	€Aô ¨°]ÐQRÔ
S×
WÑ
WØ	ó€Cô �x‰xšÓ%€HÜ�s—{‘{ HÕ-r.   c                 óŽ   — t        dd¬«      }|j                  t        «       |j                   | d«      «      }t	        |d«       y )NrW   r‘   rX   )r   r   )r   r7   r    rZ   r   )rQ   r<   r*   s      r,   Útest_sparse_input_for_predictrŸ   $  s8   € ô 
 kÀÔ	C€BØ‡F�FŒ1„IØ�Z‰Z™ fÓ-Ó.€FÜ�v˜vÕ&r.   c                 óÊ   — t        dd¬«      }t        j                  j                  d«      } | |j	                  ddd¬«      «      }|j                  |«      }t        |d«       y )	NrW   r‘   rX   r   r   )é   r¡   )r;   )r   r   r   r   r   )r   r"   r”   r•   ÚrandintrY   r   )rQ   r<   r˜   r    r*   s        r,   Ú!test_sparse_input_for_fit_predictr£   .  sU   € ô 
 kÀÔ	C€BÜ
�)‰)×
Ñ
 Ó
#€CÙ�c—k‘k ! Q¨V�kÓ4Ó5€AØ�^‰^˜AÓ€FÜ�v˜Õ/r.   c                  ó°   — t        j                  d«      } t        ddd¬«      j                  | «      }t        j                  |j
                  dk(  «      sJ ‚y)zœMake sure we do not assign multiple clusters to equal points.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/pull/20043
    )é   r   rW   r†   r‘   )r3   Údampingr   r   N)r"   rC   r   r7   Úallr8   )r    r<   s     r,   Ú&test_affinity_propagation_equal_pointsr¨   9  sF   € ô 	�‰�Ó€AÜ	 k¸3ÈRÔ	P×	TÑ	TÐUVÓ	W€BÜ�6‰6�"—*‘* ‘/Ô"Ð"Ñ"r.   )/Ú__doc__rt   Únumpyr"   rL   Úsklearn.clusterr   r   Ú%sklearn.cluster._affinity_propagationr   Úsklearn.datasetsr   Úsklearn.exceptionsr   r   Úsklearn.metricsr	   Úsklearn.utils._testingr
   r   Úsklearn.utils.fixesr   r%   rl   r   r    rF   r-   r>   rH   rP   ÚmarkÚparametrizerU   r]   rb   rp   rx   r~   r‚   r„   rŽ   r™   r�   rŸ   r£   r¨   © r.   r,   ú<module>rµ      sb  ðñó
 ã Û ç EÝ UÝ 'ß AÝ /ß FÝ .à€
Ø
ˆ"�(‰(�Q˜�F˜R ˜H q¨" gÐ.Ó
/°"Ñ
4€ÙØØØØØØô�€€1ò
%ò%ò./ò8(ð ‡�×Ñ˜¨.Ó9ñOó :ðOò(òò;ò'ò@2ò"8ò?ò*4ð* ‡�×Ñ˜ n¸¿¹°zÑ&AÓBñKó CðKò&
.ð ‡�×Ñ˜¨.Ó9ñ'ó :ð'ð ‡�×Ñ˜¨.Ó9ñ0ó :ð0ó#r.   