§
    qŠtjpO  ã            	       óê  — d Z ddlZddlZddl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 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"m#Z#  edd¬¦  «        \  Z$Z% ee$e%d¬¦  «        \  Z$Z% e¦   «          &                    e$¦  «        Z$g d¢Z'dhd„  ej(        ¦   «         D ¦   «         z  Z)dSd„Z*ej+         ,                    de¦  «        d„ ¦   «         Z-d„ Z.ej+         ,                    dg e#¢e"¢¦  «        d„ ¦   «         Z/d„ Z0ej+         ,                    d e'¦  «        ej+         ,                    d!e¦  «        d"„ ¦   «         ¦   «         Z1d#„ Z2ej+         ,                    d$d%¦  «        d&„ ¦   «         Z3d'„ Z4d(„ Z5d)„ Z6d*„ Z7ej+         ,                    d+d,d-g¦  «        d.„ ¦   «         Z8ej+         ,                    d/e#¦  «        d0„ ¦   «         Z9ej+         ,                    d1e'¦  «        d2„ ¦   «         Z:d3„ Z;d4„ Z<ej+         ,                    d5d!d6i ej=        d7ej>        gej>        d7gg¦  «        fd!d6id7d8gd8d7ggfi d7d8gd9d:ggfg¦  «        d;„ ¦   «         Z?ej+         ,                    d/e#¦  «        d<„ ¦   «         Z@ej+         ,                    d/e#¦  «        d=„ ¦   «         ZAd>„ ZBd?„ ZCd@„ ZDej+         ,                    dAdBdCg¦  «        ej+         ,                    dDddEg¦  «        dF„ ¦   «         ¦   «         ZEdG„ ZFej+         ,                    dHdIdJg¦  «        dK„ ¦   «         ZGej+         ,                    dLdMdNg¦  «        dO„ ¦   «         ZHej+         ,                    dPd,d-g¦  «        dQ„ ¦   «         ZIdR„ ZJdS )TzF
Tests for HDBSCAN clustering algorithm
Based on the DBSCAN test code
é    N)Ústats)Údistance)ÚHDBSCAN)ÚCONDENSED_dtypeÚ_condense_treeÚ_do_labelling)Ú_OUTLIER_ENCODING)Ú
make_blobs)Úfowlkes_mallows_score)Ú_VALID_METRICSÚeuclidean_distances)ÚBallTreeÚKDTree)ÚStandardScaler)Úshuffle)Úassert_allcloseÚassert_array_equal)ÚCSC_CONTAINERSÚCSR_CONTAINERSéÈ   é
   )Ú	n_samplesÚrandom_stateé   )r   )Úkd_treeÚ	ball_treeÚbruteÚautoéÿÿÿÿc                 ó$   — h | ]\  }}|d          ’ŒS )Úlabel© )Ú.0Ú_Úouts      ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_hdbscan.pyú	<setcomp>r'   &   s    € ÐKÐKÐK¡v q¨#�c˜'”lÐKÐKÐKó    ç®Gáz®ï?c                 ó”   — t          t          | ¦  «        t          z
  ¦  «        }|dk    sJ ‚t          | t          ¦  «        |k    sJ ‚d S )Né   )ÚlenÚsetÚOUTLIER_SETr   Úy)ÚlabelsÚ	thresholdÚ
n_clusterss      r&   Úcheck_label_qualityr3   )   sH   € Ý•S˜‘[”[¥;Ñ.Ñ/Ô/€JØ˜Š?ˆ?ˆ?ˆ?Ý  ­Ñ+Ô+¨iÒ7Ð7Ð7Ð7Ð7Ð7r(   Úoutlier_typec                 ó  — t           j        t           j        dœ|          }d„ d„ dœ|          }t          |          d         }t          |          d         }t                               ¦   «         }|dg|d<   ||g|d<   t          d	¬
¦  «                             |¦  «        }|j        |k     	                    ¦   «         \  }t          |ddg¦  «          ||j        |¦  «         	                    ¦   «         \  }t          |ddg¦  «         t          t          dd¦  «        ¦  «        t          t          dd¦  «        ¦  «        z   }	t          d	¬
¦  «                             ||	         ¦  «        }
t          |
j        |j        |	         ¦  «         dS )úO
    Tests if np.inf and np.nan data are each treated as special outliers.
    )ÚinfiniteÚmissingc                 ó   — | |k    S ©Nr"   ©Úxr/   s     r&   ú<lambda>z#test_outlier_data.<locals>.<lambda>9   s
   €   a¢€ r(   c                 ó*   — t          j        | ¦  «        S r:   )ÚnpÚisnanr;   s     r&   r=   z#test_outlier_data.<locals>.<lambda>:   s   € ¥¤¨¡¤€ r(   r!   Úprobé   r   é   F©Úcopyé   r   N)r?   ÚinfÚnanr	   ÚXrE   r   ÚfitÚlabels_Únonzeror   Úprobabilities_ÚlistÚrange)r4   ÚoutlierÚ
prob_checkr!   rA   Ú	X_outlierÚmodelÚmissing_labels_idxÚmissing_probs_idxÚclean_indicesÚclean_models              r&   Útest_outlier_datarX   /   s…  € õ ”FÝ”6ðð ð ô€Gð
 (Ð'Ø+Ð+ðð ð ô€Jõ ˜lÔ+¨GÔ4€EÝ˜\Ô*¨6Ô2€Då—’‘”€IØ˜Q�<€Iˆa�LØ˜WÐ%€Iˆa�LÝ˜ÐÑÔ×#Ò# IÑ.Ô.€Eà"œ]¨eÒ3×<Ò<Ñ>Ô>ÑÐÝÐ)¨A¨q¨6Ñ2Ô2Ð2à&˜J uÔ';¸TÑBÔB×KÒKÑMÔMÑÐÝÐ(¨1¨a¨&Ñ1Ô1Ð1å�˜q !™œÑ%Ô%­­U°1°c©]¬]Ñ(;Ô(;Ñ;€MÝ˜uÐ%Ñ%Ô%×)Ò)¨)°MÔ*BÑCÔC€KÝ�{Ô*¨E¬M¸-Ô,HÑIÔIÐIÐIÐIr(   c                  ó`  — t          t          ¦  «        } |                      ¦   «         }t          dd¬¦  «                             | ¦  «        }t          | |¦  «         t          |¦  «         d}t          j        t          |¬¦  «        5  t          dd¬¦  «                             t          ¦  «         ddd¦  «         n# 1 swxY w Y   d}d| d	<   d
| d<   t          j        t          |¬¦  «        5  t          dd¬¦  «                             | ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zy
    Tests that HDBSCAN works with precomputed distance matrices, and throws the
    appropriate errors when needed.
    ÚprecomputedT©ÚmetricrE   z*The precomputed distance matrix.*has shape©ÚmatchNz'The precomputed distance matrix.*valuesr   )r   rB   rB   )rB   r   F)
r   rI   rE   r   Úfit_predictr   r3   ÚpytestÚraisesÚ
ValueError)ÚDÚ
D_originalr0   Úmsgs       r&   Útest_hdbscan_distance_matrixrf   O   sÄ  € õ
 	�AÑÔ€AØ—’‘”€JÝ˜M°Ð5Ñ5Ô5×AÒAÀ!ÑDÔD€Få�A�zÑ"Ô"Ð"Ý˜ÑÔÐà
7€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð @ð @Ý�}¨4Ð0Ñ0Ô0×<Ò<½QÑ?Ô?Ð?ð@ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð 5€Cà€A€d�GØ€A€d�GÝ	Œ•z¨Ð	-Ñ	-Ô	-ð Að AÝ�}¨5Ð1Ñ1Ô1×=Ò=¸aÑ@Ô@Ð@ðAð Að Añ Aô Að Að Að Að Að Að Að Aøøøð Að Að Að Að Að As$   Â	*B?Â?CÃCÃ1%D#Ä#D'Ä*D'Úsparse_constructorc                 óŽ  — t          j        t          j        t          ¦  «        ¦  «        }|t	          j        |¦  «        z  }t          j        |                     ¦   «         d¦  «        }d|||k    <    | |¦  «        }| 	                    ¦   «          t          dd¬¦  «                             |¦  «        }t          |¦  «         dS )zA
    Tests that HDBSCAN works with sparse distance matrices.
    é2   ç        rZ   Fr[   N)r   Ú
squareformÚpdistrI   r?   Úmaxr   ÚscoreatpercentileÚflattenÚeliminate_zerosr   r_   r3   )rg   rc   r1   r0   s       r&   Ú#test_hdbscan_sparse_distance_matrixrq   g   s­   € õ
 	Ô�HœN­1Ñ-Ô-Ñ.Ô.€AØ�Œ�‰Œ�N€AåÔ'¨¯	ª	©¬°RÑ8Ô8€Ià€A€aˆ9‚nÑØÐ˜1ÑÔ€AØ×ÒÑÔÐå˜M°Ð6Ñ6Ô6×BÒBÀ1ÑEÔE€FÝ˜ÑÔÐÐÐr(   c                  ót   — t          d¬¦  «                             t          ¦  «        } t          | ¦  «         dS )z“
    Tests that HDBSCAN works with feature array, including an arbitrary
    goodness of fit check. Note that the check is a simple heuristic.
    FrD   N)r   r_   rI   r3   ©r0   s    r&   Útest_hdbscan_feature_arrayrt   y   s8   € õ
 ˜%Ð Ñ Ô ×,Ò,­QÑ/Ô/€Fõ ˜ÑÔÐÐÐr(   Úalgor\   c                 óp  — t          | d¬¦  «                             t          ¦  «        }t          |¦  «         | dv rdS t          t
          dœ}dt          j        t          j        d         ¦  «        idt          j	        t          j        d         ¦  «        idd	id	t          j	        t          j        d         ¦  «        d
œdœ 
                    |d¦  «        }t          | ||d¬¦  «        }|||          j        vrNt          j        t          ¦  «        5  |                     t          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS |dk    rNt          j        t"          ¦  «        5  |                     t          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS |                     t          ¦  «         dS )z
    Tests that HDBSCAN works with the expected combinations of algorithms and
    metrics, or raises the expected errors.
    F)Ú	algorithmrE   )r   r   N)r   r   ÚVrB   Úpé   )ry   Úw)ÚmahalanobisÚ
seuclideanÚ	minkowskiÚ
wminkowski)rw   r\   Úmetric_paramsrE   r   )r   r_   rI   r3   r   r   r?   ÚeyeÚshapeÚonesÚgetÚvalid_metricsr`   ra   rb   rJ   ÚwarnsÚFutureWarning)ru   r\   r0   ÚALGOS_TREESr€   Úhdbs         r&   Útest_hdbscan_algorithmsrŠ   …   s*  € õ ˜t¨%Ð0Ñ0Ô0×<Ò<½QÑ?Ô?€FÝ˜ÑÔÐð Ð Ð Ð Øˆõ Ýðð €Kð
 �RœV¥A¤G¨A¤JÑ/Ô/Ð0Ø�BœG¥A¤G¨A¤JÑ/Ô/Ð0Ø˜1�XØ¥B¤G­A¬G°A¬JÑ$7Ô$7Ð8Ð8ð	ð ÷
 
‚cˆ&�$ÑÔð õ ØØØ#Øð	ñ ô €Cð �[ Ô&Ô4Ð4Ð4ÝŒ]�:Ñ&Ô&ð 	ð 	Ø�GŠG•A‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	à	�<Ò	Ð	ÝŒ\�-Ñ(Ô(ð 	ð 	Ø�GŠG•A‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	�Š•‰
Œ
ˆ
ˆ
ˆ
s$   ÄD;Ä;D?ÅD?Å'FÆFÆFc                  ó¢   — t          d¬¦  «                             t          ¦  «        } |                      d¦  «        }t	          |d¬¦  «         dS )z˜
    Tests that HDBSCAN can generate a sufficiently accurate dbscan clustering.
    This test is more of a sanity check than a rigorous evaluation.
    FrD   ç333333Ó?gq=
×£pí?)r1   N)r   rJ   rI   Údbscan_clusteringr3   )Ú	clustererr0   s     r&   Útest_dbscan_clusteringr�   ¯   sP   € õ
 ˜UÐ#Ñ#Ô#×'Ò'­Ñ*Ô*€IØ×(Ò(¨Ñ-Ô-€Fõ ˜¨$Ð/Ñ/Ô/Ð/Ð/Ð/r(   Úcut_distance)çš™™™™™¹?ç      à?rB   c                 ó8  — t           d         d         }t           d         d         }t                               ¦   «         }t          j        dg|d<   dt          j        g|d<   t          j        t          j        g|d<   t          d¬	¦  «                             |¦  «        }|                     | ¬
¦  «        }t          j	        ||k    ¦  «        }t          |ddg¦  «         t          j	        ||k    ¦  «        }t          |dg¦  «         t          t          t          d¦  «        ¦  «        t          ||z   ¦  «        z
  ¦  «        }t          d¬	¦  «                             ||         ¦  «        }	|	                     | ¬
¦  «        }
t          |
||         ¦  «         dS )r6   r8   r!   r7   rB   r   rz   rC   FrD   )r�   r   N)r	   rI   rE   r?   rG   rH   r   rJ   r�   Úflatnonzeror   rN   r-   rO   )r�   Úmissing_labelÚinfinite_labelrR   rS   r0   rT   Úinfinite_labels_idxÚ	clean_idxrW   Úclean_labelss              r&   Ú#test_dbscan_clustering_outlier_datarš   ¼   sf  € õ
 & iÔ0°Ô9€MÝ& zÔ2°7Ô;€Nå—’‘”€IÝ”F˜A�;€Iˆa�LØ•r”v�;€Iˆa�LÝ”F�BœFÐ#€Iˆa�LÝ˜ÐÑÔ×#Ò# IÑ.Ô.€EØ×$Ò$°,Ð$Ñ?Ô?€Fåœ¨°-Ò(?Ñ@Ô@ÐÝÐ)¨A¨q¨6Ñ2Ô2Ð2åœ.¨°>Ò)AÑBÔBÐÝÐ*¨Q¨CÑ0Ô0Ð0å•S�˜s™œ‘_”_¥sÐ+=Ð@SÑ+SÑ'TÔ'TÑTÑUÔU€IÝ˜uÐ%Ñ%Ô%×)Ò)¨)°IÔ*>Ñ?Ô?€KØ×0Ò0¸lÐ0ÑKÔK€LÝ�| V¨IÔ%6Ñ7Ô7Ð7Ð7Ð7r(   c                  óÀ   — t          ddt          j        t          j        d         ¦  «        id¬¦  «                             t          ¦  «        } t          | ¦  «         dS )z4
    Tests that HDBSCAN using `BallTree` works.
    r}   rx   rB   F)r\   r€   rE   N)r   r?   rƒ   rI   r‚   r_   r3   rs   s    r&   Ú!test_hdbscan_best_balltree_metricrœ   ×   sX   € õ Ø¨Cµ´½¼À¼Ñ1DÔ1DÐ+EÈEðñ ô ç‚k•!�n„nð õ ˜ÑÔÐÐÐr(   c                  óÔ   — t          t          t          ¦  «        dz
  d¬¦  «                             t          ¦  «        } t	          | ¦  «                             t          ¦  «        sJ ‚dS )zƒ
    Tests that HDBSCAN correctly does not generate a valid cluster when the
    `min_cluster_size` is too large for the data.
    rB   F©Úmin_cluster_sizerE   N)r   r,   rI   r_   r-   Úissubsetr.   rs   s    r&   Útest_hdbscan_no_clustersr¡   á   sT   € õ
 ¥c­!¡f¤f¨q¡j°uÐ=Ñ=Ô=×IÒIÍ!ÑLÔL€FÝˆv‰;Œ;×Ò¥Ñ,Ô,Ð,Ð,Ð,Ð,Ð,r(   c                  ó:  — t          dt          t          ¦  «        d¦  «        D ]v} t          | d¬¦  «                             t          ¦  «        }d„ |D ¦   «         }t          |¦  «        dk    r,t          j        t          j        |¦  «        ¦  «        | k    sJ ‚ŒwdS )zb
    Test that the smallest non-noise cluster has at least `min_cluster_size`
    many points
    rz   rB   Frž   c                 ó   — g | ]
}|d k    ¯|‘ŒS )r   r"   )r#   r!   s     r&   ú
<listcomp>z1test_hdbscan_min_cluster_size.<locals>.<listcomp>ñ   s   € Ð@Ð@Ð@ °E¸R²K°K�u°K°K°Kr(   r   N)rO   r,   rI   r   r_   r?   ÚminÚbincount)rŸ   r0   Útrue_labelss      r&   Útest_hdbscan_min_cluster_sizer¨   ê   s£   € õ
 " !¥S­¡V¤V¨QÑ/Ô/ð Hð HÐÝÐ*:ÀÐGÑGÔG×SÒSÕTUÑVÔVˆØ@Ð@¨&Ð@Ñ@Ô@ˆÝˆ{ÑÔ˜qÒ Ð Ý”6�"œ+ kÑ2Ô2Ñ3Ô3Ð7GÒGÐGÐGÐGøð	Hð Hr(   c                  óŽ   — t           j        } t          | d¬¦  «                             t          ¦  «        }t          |¦  «         dS )zA
    Tests that HDBSCAN works when passed a callable metric.
    Fr[   N)r   Ú	euclideanr   r_   rI   r3   )r\   r0   s     r&   Útest_hdbscan_callable_metricr«   ö   s@   € õ Ô€FÝ˜F¨Ð/Ñ/Ô/×;Ò;½AÑ>Ô>€FÝ˜ÑÔÐÐÐr(   Útreer   r   c                 óÊ   — t          d| d¬¦  «        }d}t          j        t          |¬¦  «        5  |                     t
          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z�
    Tests that HDBSCAN correctly raises an error when passing precomputed data
    while requesting a tree-based algorithm.
    rZ   F©r\   rw   rE   z%precomputed is not a valid metric forr]   N)r   r`   ra   rb   rJ   rI   )r¬   r‰   re   s      r&   Ú"test_hdbscan_precomputed_non_bruter¯   ÿ   s¥   € õ ˜°$¸UÐ
CÑ
CÔ
C€CØ
1€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø�Š•‰
Œ
ˆ
ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   °AÁAÁAÚcsr_containerc                 óº  — t          d¬¦  «                             t          ¦  «        j        }t	          |¦  «          | t          ¦  «        }|                     ¦   «         }t          d¬¦  «                             |¦  «        j        }t          ||¦  «         t          j        dft          j	        dffD ]Ê\  }}t                               ¦   «         }||d<   t          d¬¦  «                             |¦  «        j        }t	          |¦  «         |d         t          |         d         k    sJ ‚|                     ¦   «         }||d<   t          d¬¦  «                             |¦  «        j        }t          ||¦  «         ŒËd}t          j        t          |¬	¦  «        5  t          d
dd¬¦  «                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z¨
    Tests that HDBSCAN works correctly when passing sparse feature data.
    Evaluates correctness by comparing against the same data passed as a dense
    array.
    FrD   r7   r8   ©r   r   r   r!   z4Sparse data matrices only support algorithm `brute`.r]   rª   r   r®   N)r   rJ   rI   rK   r3   rE   r   r?   rG   rH   r	   r`   ra   rb   )	r°   Údense_labelsÚ	_X_sparseÚX_sparseÚsparse_labelsÚoutlier_valr4   ÚX_densere   s	            r&   Útest_hdbscan_sparser¹     s  € õ  Ð&Ñ&Ô&×*Ò*­1Ñ-Ô-Ô5€LÝ˜Ñ%Ô%Ð%à��aÑ Ô €IØ�~Š~ÑÔ€HÝ Ð'Ñ'Ô'×+Ò+¨HÑ5Ô5Ô=€MÝ�| ]Ñ3Ô3Ð3õ (*¤v¨zÐ&:½R¼VÀYÐ<OÐ%Pð 
8ð 
8Ñ!ˆ�\Ý—&’&‘(”(ˆØ#ˆ�‰Ý EÐ*Ñ*Ô*×.Ò.¨wÑ7Ô7Ô?ˆÝ˜LÑ)Ô)Ð)Ø˜AŒÕ"3°LÔ"AÀ'Ô"JÒJÐJÐJÐJà—>’>Ñ#Ô#ˆØ$ˆ�‰Ý UÐ+Ñ+Ô+×/Ò/°Ñ9Ô9ÔAˆÝ˜<¨Ñ7Ô7Ð7Ð7à
@€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð Uð UÝ�{¨kÀÐFÑFÔF×JÒJÈ8ÑTÔTÐTðUð Uð Uñ Uô Uð Uð Uð Uð Uð Uð Uð Uøøøð Uð Uð Uð Uð Uð Us   Æ&GÇGÇGrw   c                 óè  — ddg}t          dd|d¬¦  «        \  }}t          dd¬	¦  «                             |¦  «        }t          ||j        |j        ¦  «        D ],\  }}}t          ||d
d¬¦  «         t          ||d
d¬¦  «         Œ-t          | dt          j        d         d¬¦  «                             t          ¦  «        }|j        j        d         dk    sJ ‚|j        j        d         dk    sJ ‚dS )zj
    Tests that HDBSCAN centers are calculated and stored properly, and are
    accurate to the data.
    )rj   rj   )ç      @r»   iÐ  r   r’   )r   r   ÚcentersÚcluster_stdÚbothF)Ústore_centersrE   rB   gš™™™™™©?)ÚrtolÚatol)rw   r¿   rŸ   rE   N)	r
   r   rJ   ÚzipÚ
centroids_Úmedoids_r   rI   r‚   )rw   r¼   ÚHr$   r‰   ÚcenterÚcentroidÚmedoids           r&   Útest_hdbscan_centersrÉ   .  s  € ð ˜:Ð&€GÝ °1¸gÐSVÐWÑWÔW�D€A€qÝ
 ¨UÐ
3Ñ
3Ô
3×
7Ò
7¸Ñ
:Ô
:€Cå$'¨°´ÀÄÑ$NÔ$Nð ;ð ;Ñ ˆ�˜&Ý˜ ¨q°tÐ<Ñ<Ô<Ð<Ý˜ ¨Q°TÐ:Ñ:Ô:Ð:Ð:õ ØØÝœ œØð	ñ ô ÷
 
‚c�!�f„fð ð Œ>Ô Ô" aÒ'Ð'Ð'Ð'ØŒ<Ô˜aÔ  AÒ%Ð%Ð%Ð%Ð%Ð%r(   c                  ó  — t           j                             d¦  «        } |                      dd¦  «        }t	          ddddd¬	¦  «                             |¦  «        }t          j        |d¬
¦  «        \  }}t          |¦  «        dk    sJ ‚||dk             dk    sJ ‚t	          dddddd¬¦  «                             |¦  «        }t          j        |d¬
¦  «        \  }}t          |¦  «        dk    sJ ‚||dk             dk    sJ ‚dS )zS
    Tests that HDBSCAN single-cluster selection with epsilon works correctly.
    r   é–   rz   rC   rj   ÚeomTF)rŸ   Úcluster_selection_epsilonÚcluster_selection_methodÚallow_single_clusterrE   )Úreturn_countsr   é   g
×£p=
Ç?r   )rŸ   rÍ   rÎ   rÏ   rw   rE   N)r?   ÚrandomÚRandomStateÚrandr   r_   Úuniquer,   )ÚrngÚno_structurer0   Úunique_labelsÚcountss        r&   Ú.test_hdbscan_allow_single_cluster_with_epsilonrÚ   G  sA  € õ Œ)×
Ò
 Ñ
"Ô
"€CØ—8’8˜C Ñ#Ô#€LåØØ"%Ø!&Ø!Øðñ ô ÷ ‚k�,ÑÔð õ œI f¸DÐAÑAÔAÑ€M�6Ýˆ}ÑÔ Ò"Ð"Ð"Ð"ð �- 2Ò%Ô&¨Ò+Ð+Ð+Ð+õ ØØ"&Ø!&Ø!ØØðñ ô ÷ ‚k�,ÑÔð õ œI f¸DÐAÑAÔAÑ€M�6Ýˆ}ÑÔ Ò"Ð"Ð"Ð"Ø�- 2Ò%Ô&¨!Ò+Ð+Ð+Ð+Ð+Ð+r(   c                  ó6  — ddgddgddgddgg} t          d| g d¢d¬¦  «        \  }}t          d	¬
¦  «                             |¦  «        j        }t	          t          |¦  «        ¦  «        t          d|v ¦  «        z
  }|dk    sJ ‚t          ||¦  «        dk     dS )zœ
    Validate that HDBSCAN can properly cluster this difficult synthetic
    dataset. Note that DBSCAN fails on this (see HDBSCAN plotting
    example)
    g333333ë¿g333333ë?r+   éýÿÿÿiî  )çš™™™™™É?gffffffÖ?çš™™™™™õ?rÞ   r   )r   r¼   r½   r   FrD   r   é   r)   N)r
   r   rJ   rK   r,   r-   Úintr   )r¼   rI   r/   r0   r2   s        r&   Útest_hdbscan_better_than_dbscanrá   j  s»   € ð �uˆ~  t˜}¨q°!¨f°q¸"°gÐ>€GÝØØØ+Ð+Ð+Øð	ñ ô �D€A€qõ ˜%Ð Ñ Ô ×$Ò$ QÑ'Ô'Ô/€Få•S˜‘[”[Ñ!Ô!¥C¨¨f¨Ñ$5Ô$5Ñ5€JØ˜Š?ˆ?ˆ?ˆ?Ý˜& !Ñ$Ô$ tÒ+Ð+Ð+Ð+r(   z	kwargs, XrZ   rB   rz   r+   rß   c                 óJ   — t          ddddœ|¤Ž                     | ¦  «         dS )zo
    Tests that HDBSCAN works correctly for array-likes and precomputed inputs
    with non-finite points.
    rB   F©Úmin_samplesrE   Nr"   )r   rJ   )rI   Úkwargss     r&   Útest_hdbscan_usable_inputsræ   ~  s3   € õ Ð0˜ Ð0Ð0¨Ð0Ð0×4Ò4°QÑ7Ô7Ð7Ð7Ð7r(   c                 óô   —  | t          j        d¦  «        ¦  «        }d}t          j        t          |¬¦  «        5  t          dd¬¦  «                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zd
    Tests that HDBSCAN raises the correct error when there are too few
    non-zero distances.
    )r   r   z#There exists points with fewer thanr]   rZ   Fr[   N)r?   Úzerosr`   ra   rb   r   rJ   ©r°   rI   re   s      r&   Ú-test_hdbscan_sparse_distances_too_few_nonzerorê   Ž  s¼   € ð 	ˆ•b”h˜xÑ(Ô(Ñ)Ô)€Aà
/€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð 9ð 9Ý�}¨5Ð1Ñ1Ô1×5Ò5°aÑ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9s   »%A-Á-A1Á4A1c                 ó8  — t          j        d¦  «        }d|dd…dd…f<   d|dd…dd…f<   ||j        z   } | |¦  «        }d}t          j        t
          |¬¦  «        5  t          dd	¬
¦  «                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zu
    Tests that HDBSCAN raises the correct error when the distance matrix
    has multiple connected components.
    )é   rì   rB   NrC   é   z3HDBSCAN cannot be performed on a disconnected graphr]   rZ   Fr[   )r?   rè   ÚTr`   ra   rb   r   rJ   ré   s      r&   Ú0test_hdbscan_sparse_distances_disconnected_graphrï   ›  sö   € õ 	Œ�ÑÔ€AØ€A€b€q€bˆ"ˆ1ˆ"€f�IØ€A€a€b€bˆ"ˆ#ˆ#€g�JØ	ˆAŒC‰€AØˆ�aÑÔ€AØ
?€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð 9ð 9Ý�}¨5Ð1Ñ1Ô1×5Ò5°aÑ8Ô8Ð8ð9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9s   Á%BÂBÂBc                  óö  — d„ } d}t          j        t          |¬¦  «        5  t          d| d¬¦  «                             t
          ¦  «         ddd¦  «         n# 1 swxY w Y   t          j        t          |¬¦  «        5  t          d| d¬¦  «                             t
          ¦  «         ddd¦  «         n# 1 swxY w Y   t          t          t          j	        ¦  «        t          t          j	        ¦  «        z
  ¦  «        }t          |¦  «        d	k    rft          j        t          |¬¦  «        5  t          d|d	         d¬¦  «                             t
          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS dS )
zR
    Tests that HDBSCAN correctly raises an error for invalid metric choices.
    c                 ó   — | S r:   r"   )r<   s    r&   r=   z2test_hdbscan_tree_invalid_metric.<locals>.<lambda>°  s   €  € r(   zV.* is not a valid metric for a .*-based algorithm\. Please select a different metric\.r]   r   F)rw   r\   rE   Nr   r   )r`   ra   rb   r   rJ   rI   rN   r-   r   r…   r   r,   )Úmetric_callablere   Úmetrics_not_kds      r&   Ú test_hdbscan_tree_invalid_metricrô   ¬  sN  € ð "�k€Oð	ð õ 
Œ•z¨Ð	-Ñ	-Ô	-ð Pð PÝ˜)¨OÀ%ÐHÑHÔH×LÒLÍQÑOÔOÐOðPð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð På	Œ•z¨Ð	-Ñ	-Ô	-ð Rð RÝ˜+¨oÀEÐJÑJÔJ×NÒNÍqÑQÔQÐQðRð Rð Rñ Rô Rð Rð Rð Rð Rð Rð Røøøð Rð Rð Rð Rõ
 �#�hÔ4Ñ5Ô5½½FÔ<PÑ8QÔ8QÑQÑRÔR€NÝ
ˆ>ÑÔ˜QÒÐÝŒ]�:¨SÐ1Ñ1Ô1ð 	Vð 	VÝ˜i°¸qÔ0AÈÐNÑNÔN×RÒRÕSTÑUÔUÐUð	Vð 	Vð 	Vñ 	Vô 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vøøøð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð Ðs5   ¡+AÁAÁAÁ>+B5Â5B9Â<B9Ä.1E,Å,E0Å3E0c                  óò   — t          t          t          ¦  «        dz   d¬¦  «        } d}t          j        t
          |¬¦  «        5  |                      t          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zx
    Tests that HDBSCAN correctly raises an error when setting `min_samples`
    larger than the number of samples.
    rB   Frã   z min_samples (.*) must be at mostr]   N)r   r,   rI   r`   ra   rb   rJ   )r‰   re   s     r&   Ú!test_hdbscan_too_many_min_samplesrö   Ä  s­   € õ
 �c¥!™fœf q™j¨uÐ
5Ñ
5Ô
5€CØ
-€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø�Š•‰
Œ
ˆ
ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA,Á,A0Á3A0c                  ó  — t                                ¦   «         } t          j        | d<   d}t	          dd¬¦  «        }t          j        t          |¬¦  «        5  |                     | ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zu
    Tests that HDBSCAN correctly raises an error when providing precomputed
    distances with `np.nan` values.
    r²   z(np.nan values found in precomputed-denserZ   Fr[   r]   N)	rI   rE   r?   rH   r   r`   ra   rb   rJ   )ÚX_nanre   r‰   s      r&   Ú"test_hdbscan_precomputed_dense_nanrù   Ï  s»   € õ
 �FŠF‰HŒH€EÝ”&€Eˆ$�KØ
4€CÝ
˜¨UÐ
3Ñ
3Ô
3€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø�Š�‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA:Á:A>ÂA>rÏ   TFÚepsilonr‘   c                 ó4  ‡‡‡— d}t          || ddgddgddgg¬¦  «        \  }Št          d¬¦  «                             |¦  «        }t          |j        |j        ¬¦  «        }|dz   |d	z   |d
z   h}|dz   d|d	z   d|d
z   di}t          |||||¬¦  «        Šˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         Šˆˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }	 t          j
        |	j        ¦  «        ‰¦  «        }
t          ‰|
¦  «         dS )zR
    Tests that the `_do_labelling` helper function correctly assigns labels.
    é0   r   r   )r   r¼   FrD   ©rŸ   rz   r+   rß   rB   ©Úcondensed_treeÚclustersÚcluster_label_maprÏ   rÍ   c                 óZ   •— i | ]'}|t          j        ‰|k    ¦  «        d          d          “Œ(S )r   )r?   Úwhere)r#   Ú_yr/   s     €r&   ú
<dictcomp>z+test_labelling_distinct.<locals>.<dictcomp>ü  s3   ø€ ÐKÐKÐK¸˜�BœH Q¨"¢WÑ-Ô-¨aÔ0°Ô3ÐKÐKÐKr(   c                 ó.   •— i | ]}|‰‰|                  “ŒS r"   r"   )r#   r  Úfirst_with_labelr0   s     €€r&   r  z+test_labelling_distinct.<locals>.<dictcomp>ý  s&   ø€ ÐKÐKÐK¸�2�vÐ.¨rÔ2Ô3ÐKÐKÐKr(   N)r
   r   rJ   r   Ú_single_linkage_tree_rŸ   r   rN   r-   r?   Ú	vectorizer„   r   )Úglobal_random_seedrÏ   rú   r   rI   Úestrÿ   r   r  Úy_to_labelsÚaligned_targetr  r0   r/   s              @@@r&   Útest_labelling_distinctr  Ü  sc  øøø€ ð €IÝØØ'ð �ˆFØ�ˆGØ�ˆGð
ð		ñ 	ô 	�D€A€qõ �uÐ
Ñ
Ô
×
!Ò
! !Ñ
$Ô
$€CÝ#ØÔ!°CÔ4Hðñ ô €Nð ˜A‘˜y¨1™}¨i¸!©mÐ<€HØ" Q™¨¨9°q©=¸!¸YÈ¹]ÈAÐNÐÝØ%ØØ+Ø1Ø")ðñ ô €Fð LÐKÐKÐK½dÅ3ÀqÁ6Ä6¹l¼lÐKÑKÔKÐØKÐKÐKÐKÐK½dÅ3ÀqÁ6Ä6¹l¼lÐKÑKÔK€KØ2•R”\ +¤/Ñ2Ô2°1Ñ5Ô5€NÝ�v˜~Ñ.Ô.Ð.Ð.Ð.r(   c                  ó–  — d} d}t          j        dd|dfddd|dfddgt          ¬	¦  «        }t          || h| d| dz   did
d¬¦  «        }|d         dk     }t	          |¦  «        t	          |dk    ¦  «        k    sJ ‚t          || h| d| dz   did
d¬¦  «        }|d         |k     }t	          |¦  «        t	          |dk    ¦  «        k    sJ ‚dS )zž
    Tests that the `_do_labelling` helper function correctly thresholds the
    incoming lambda values given various `cluster_selection_epsilon` values.
    rC   g      ø?rz   rB   )rC   rB   r‘   rB   r   )rC   r+   rÝ   rB   )rC   rß   rŒ   rB   )ÚdtypeTrþ   Úvaluer   N)r?   Úarrayr   r   Úsum)r   Ú
MAX_LAMBDArÿ   r0   Ú	num_noises        r&   Útest_labelling_thresholdingr    s#  € ð
 €IØ€JÝ”Xà��:˜qÐ!ØØ��:˜qÐ!ØØð	
õ ð	ñ 	ô 	€Nõ Ø%Ø�Ø$ a¨°Q©¸Ð:Ø!Ø"#ðñ ô €Fð ˜wÔ'¨!Ò+€IÝˆy‰>Œ>�S ¨2¢Ñ.Ô.Ò.Ð.Ð.Ð.åØ%Ø�Ø$ a¨°Q©¸Ð:Ø!Ø"#ðñ ô €Fð ˜wÔ'¨*Ò4€IÝˆy‰>Œ>�S ¨2¢Ñ.Ô.Ò.Ð.Ð.Ð.Ð.Ð.r(   r¿   rÇ   rÈ   c                 óB  — t           j                             d¦  «        }|                     d¦  «        }t          |¦  «        }d}t	          j        t          |¬¦  «        5  t          d| d¬¦  «                             |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )	zÈCheck that we raise an error if the centers are requested together with
    a precomputed input matrix.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27893
    r   ©éd   rz   z>Cannot store centers when using a precomputed distance matrix.r]   rZ   F)r\   r¿   rE   N)	r?   rÒ   rÓ   r   r`   ra   rb   r   rJ   )r¿   rÖ   rI   ÚX_distÚerr_msgs        r&   Ú0test_hdbscan_error_precomputed_and_store_centersr  +  sß   € õ Œ)×
Ò
 Ñ
"Ô
"€CØ�
Š
�8ÑÔ€AÝ  Ñ#Ô#€FØN€GÝ	Œ•z¨Ð	1Ñ	1Ô	1ð ð ÝØ Ø'Øð	
ñ 	
ô 	
÷ Š#ˆf‰+Œ+ˆ+ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Á!&BÂBÂBÚ
valid_algor   r   c                 óZ   — t          d| d¬¦  «                             t          ¦  «         dS )z“Test that HDBSCAN works with the "cosine" metric when the algorithm is set
    to "brute" or "auto".

    Non-regression test for issue #28631
    ÚcosineFr®   N)r   r_   rI   )r  s    r&   Ú*test_hdbscan_cosine_metric_valid_algorithmr   ?  s-   € õ �8 z¸Ð>Ñ>Ô>×JÒJÍ1ÑMÔMÐMÐMÐMr(   Úinvalid_algoc                 óÆ   — t          d| d¬¦  «        }t          j        t          d¬¦  «        5  |                     t
          ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z€Test that HDBSCAN raises an informative error is raised when an unsupported
    algorithm is used with the "cosine" metric.
    r  Fr®   zcosine is not a valid metricr]   N)r   r`   ra   rb   r_   rI   )r!  Úhdbscans     r&   Ú,test_hdbscan_cosine_metric_invalid_algorithmr$  I  s¦   € õ
 ˜X°ÀEÐJÑJÔJ€GÝ	Œ•zÐ)GÐ	HÑ	HÔ	Hð ð Ø×Ò�AÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ®AÁAÁAc                  ó   — t           j                             d¦  «                             d¦  «        } d}t          j        t
          |¬¦  «        5  t          d¬¦  «        }|                     | ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z\
    Test that HDBSCAN raises a FutureWarning when the `copy`
    parameter is not set.
    r   r  zCThe default value of `copy` will change from False to True in 1.10.r]   rì   rý   N)r?   rÒ   rÓ   r`   r†   r‡   r   rJ   )rI   re   r‰   s      r&   Ú!test_hdbscan_default_copy_warningr&  T  sÄ   € õ
 	Œ	×Ò˜aÑ Ô ×'Ò'¨Ñ1Ô1€AØ
P€CÝ	Œ•m¨3Ð	/Ñ	/Ô	/ð ð Ý rÐ*Ñ*Ô*ˆØ�Š�‰
Œ
ˆ
ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Á&BÂBÂ
B)r)   )KÚ__doc__Únumpyr?   r`   Úscipyr   Úscipy.spatialr   Úsklearn.clusterr   Úsklearn.cluster._hdbscan._treer   r   r   Ú sklearn.cluster._hdbscan.hdbscanr	   Úsklearn.datasetsr
   Úsklearn.metricsr   Úsklearn.metrics.pairwiser   r   Úsklearn.neighborsr   r   Úsklearn.preprocessingr   Úsklearn.utilsr   Úsklearn.utils._testingr   r   Úsklearn.utils.fixesr   r   rI   r/   Úfit_transformÚ
ALGORITHMSÚitemsr.   r3   ÚmarkÚparametrizerX   rf   rq   rt   rŠ   r�   rš   rœ   r¡   r¨   r«   r¯   r¹   rÉ   rÚ   rá   r  rG   ræ   rê   rï   rô   rö   rù   r  r  r  r   r$  r&  r"   r(   r&   ú<module>r;     s(  ððð ð
 Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð
 ?Ð >Ð >Ð >Ð >Ð >Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø !Ð !Ð !Ð !Ð !Ð !Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ >Ð >Ð >Ð >Ð >Ð >Ð >Ð >à€z˜C¨bÐ1Ñ1Ô1�€€1Ø€wˆq�! !Ð$Ñ$Ô$�€€1Ø€NÑÔ×"Ò" 1Ñ%Ô%€ðð ð €
ð ˆdÐKÐKÐ1HÐ1BÔ1HÑ1JÔ1JÐKÑKÔKÑK€ð8ð 8ð 8ð 8ð „×Ò˜Ð):Ñ;Ô;ðJð Jñ <Ô;ðJð>Að Að Að0 „×ÒÐ-Ð/Q°Ð/QÀ.Ð/QÑRÔRð ð  ñ SÔRð ð"	 ð 	 ð 	 ð „×Ò˜ Ñ,Ô,Ø„×Ò˜ >Ñ2Ô2ð%ð %ñ 3Ô2ñ -Ô,ð%ðP
0ð 
0ð 
0ð „×Ò˜¨Ñ7Ô7ð8ð 8ñ 8Ô7ð8ð4 ð  ð  ð-ð -ð -ð	Hð 	Hð 	Hð ð  ð  ð „×Ò˜ )¨[Ð!9Ñ:Ô:ðð ñ ;Ô:ðð „×Ò˜¨.Ñ9Ô9ðUð Uñ :Ô9ðUðD „×Ò˜ jÑ1Ô1ð&ð &ñ 2Ô1ð&ð0 ,ð  ,ð  ,ðF,ð ,ð ,ð( „×ÒØà
�MÐ	" H B¤H¨q°"´&¨k¸B¼FÀA¸;Ð-GÑ$HÔ$HÐIØ
�MÐ	" a¨ V¨a°¨VÐ$4Ð5Ø	ˆq�!ˆf�q˜!�fÐÐðñô ð8ð 8ñô ð8ð „×Ò˜¨.Ñ9Ô9ð	9ð 	9ñ :Ô9ð	9ð „×Ò˜¨.Ñ9Ô9ð9ð 9ñ :Ô9ð9ð Vð Vð Vð0ð ð ð
ð 
ð 
ð „×ÒÐ/°$¸°Ñ?Ô?Ø„×Ò˜ Q¨ HÑ-Ô-ð!/ð !/ñ .Ô-ñ @Ô?ð!/ðH&/ð &/ð &/ðR „×Ò˜¨:°xÐ*@ÑAÔAðð ñ BÔAðð& „×Ò˜¨°Ð'8Ñ9Ô9ðNð Nñ :Ô9ðNð „×Ò˜¨)°[Ð)AÑBÔBðð ñ CÔBðð	ð 	ð 	ð 	ð 	r(   