Ë
    êÿæiÓ`  ã                   óœ  — d dl Z d dlZd dl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 d
lmZmZ d dlmZ ej8                  j;                  d «      ZdZddgdejA                  ed«      z  z   Z!ddgdejA                  ed«      z  z   Z"ddgdejA                  ed«      z  z   Z#ddgdejA                  ed«      z  z   Z$ddgdejA                  ed«      z  z   Z%ddgdejA                  ed«      z  z   Z& ejN                  e!e"e#e$e%e&f«      Z(ejR                  jU                  dg d¢dgg d¢d gdddd d!dejV                  gdgdddd d!dejV                  gdgg«      d"„ «       Z,ejR                  jU                  dddd#d$dd%d%ejV                  gdgddd#d$d&dd%d%ejV                  g	d gddd#dejV                  gd gddd#ejV                  gdgg«      d'„ «       Z-ejR                  jU                  d(g d)¢d dgddggg d*¢gg d)¢d dgddggg d+¢gg d)¢d dgddgd dggg d+¢gg d,¢d dgddgd dggg d-¢gg«      d.„ «       Z.d/„ Z/d0„ Z0ejR                  jU                  d1d2geD � cg c]  } | d3f‘Œ c} z   «      d4„ «       Z1d5„ Z2d6„ Z3d7„ Z4d8„ Z5d9„ Z6d:„ Z7d;„ Z8ejR                  jU                  d<g d=¢«      ejR                  jU                  d>g d?¢«      ejR                  jU                  d1d2d@geD � cg c]  } | d3f‘Œ c} z   «      dA„ «       «       «       Z9dB„ Z:ejR                  jU                  dC e;de(jx                  d    dz  dD«      «      dE„ «       Z=ejR                  jU                  dFe«      dG„ «       Z>dH„ Z?dI„ Z@dJ„ ZAejR                  jU                  dFdgez   «      dK„ «       ZBejR                  jU                  dFe«      dL„ «       ZCdM„ ZDyc c} w c c} w )Né    N)ÚDBSCANÚOPTICS)Ú_extend_regionÚ_extract_xi_labels)Úgenerate_clustered_data)Ú
make_blobs)ÚDataConversionWarningÚEfficiencyWarning)Úcontingency_matrix)Úpairwise_distances)Úshuffle)Úassert_allcloseÚassert_array_equal)ÚCSR_CONTAINERSé
   éûÿÿÿéþÿÿÿçš™™™™™é?é   é   éÿÿÿÿçš™™™™™¹?é   çš™™™™™É?é   ç333333Ó?gš™™™™™ù?é   é   )Úr_plotÚend)r   çÍÌÌÌÌÌ!@çš™™™™™!@çffffff!@é   r   )r   r!   r"   r#   g333333!@r$   r   r!   r"   r#   r$   c                 ó‚   — t        j                  | «      } | d d | dd  z  }|dk\  }|dk  }t        ||dd«      }||k(  sJ ‚y )Nr   r   grÇqÇñ?r   r   ©ÚnpÚarrayr   )r   r    ÚratioÚsteep_downwardÚupwardÚes         úv/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_optics.pyÚtest_extend_downwardr.      sV   € ô �X‰X�fÓ€FØ�3�BˆK˜&  ˜*Ñ$€EØ˜gÑ%€NØ�Q‰Y€Fä�~ v¨q°!Ó4€AØ�Š8€O‰8ó    gÍÌÌÌÌÌ @gš™™™™™@é   gffffff@c                 ó‚   — t        j                  | «      } | d d | dd  z  }|dk  }|dkD  }t        ||dd«      }||k(  sJ ‚y )Nr   r   gÍÌÌÌÌÌì?r   r   r&   )r   r    r)   Ústeep_upwardÚdownwardr,   s         r-   Útest_extend_upwardr4   2   sU   € ô �X‰X�fÓ€FØ�3�BˆK˜&  ˜*Ñ$€EØ˜C‘<€LØ�q‰y€Hä�| X¨q°!Ó4€AØ�Š8€O‰8r/   )ÚorderingÚclustersÚexpected©r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                 ó4   — t        | |«      }t        ||«       y ©N)r   r   )r5   r6   r7   Úlabelss       r-   Útest_the_extract_xi_labelsr<   E   s   € ô   ¨(Ó3€Fä�v˜xÕ(r/   c                 ón  — t         j                  j                  d«      }d}ddgd|j                  |d«      z  z   }ddgd	|j                  |d«      z  z   }d
dgd|j                  |d«      z  z   }ddgd|j                  |d«      z  z   }ddgd|j                  |d«      z  z   }ddgd|j                  |d«      z  z   }t        j                  |||||t        j
                  ddgg«      |f«      j                  | d¬«      }	t         j                  dgdz  dgdz  d
gdz  dgdz  d
gdz  ddgdz  f   }
t        |	|
|¬«      \  }	}
t        ddddd¬«      j                  |	«      }t        |j                  |
«       t        d	dddd¬«      j                  |	«      }t        |j                  |
«       t        j                  |||||t        j
                  ddggdz  «      |f«      j                  | d¬«      }	t         j                  d
gdz  dgdz  dgdz  dgdz  dgdz  dddgdz  f   }
t        |	|
|¬«      \  }	}
t        ddddd¬«      j                  |	«      }t        |j                  |
«       ddgdd	gddgd	dgg}ddgddgddgddgg}ddgddgddgddgg}t        j                  |||f«      j                  | d¬«      }	t         j                  dgdz  d
gdz  dgdz  f   }
t        |	|
|¬«      \  }	}
t        ddt         j                  dd¬«      j                  |	«      }t        |j                  |
«       y ) Nr   r   r   r   r   r   r   r   r   r   r   r   r   g333333ã?r   éd   F©Úcopy©Úrandom_stateé   Úxiçš™™™™™Ù?)Úmin_samplesÚmin_cluster_sizeÚmax_epsÚcluster_methodrD   g{®Gáz´?çš™™™™™¹¿r   é	   é   éZ   én   ç{®Gáz¤?)r'   ÚrandomÚRandomStateÚrandnÚvstackr(   ÚastypeÚr_r   r   Úfitr   Úlabels_Úinf)Úglobal_dtypeÚrngÚn_points_per_clusterÚC1ÚC2ÚC3ÚC4ÚC5ÚC6ÚXÚexpected_labelsÚclusts               r-   Útest_extract_xire   T   s™  € ô
 �)‰)×
Ñ
 Ó
"€CØÐà
ˆbˆ�C˜#Ÿ)™)Ð$8¸!Ó<Ñ<Ñ	<€BØ
ˆRˆ�3˜Ÿ™Ð#7¸Ó;Ñ;Ñ	;€BØ
ˆRˆ�3˜Ÿ™Ð#7¸Ó;Ñ;Ñ	;€BØ
ˆaˆ�3˜Ÿ™Ð#7¸Ó;Ñ;Ñ	;€BØ
ˆRˆ�3˜Ÿ™Ð#7¸Ó;Ñ;Ñ	;€BØ
ˆQˆ�#˜Ÿ	™	Ð"6¸Ó:Ñ:Ñ	:€Bä
�	‰	�2�r˜2˜r 2¤r§x¡x°#°s°°Ó'=¸rÐBÓC×JÑJØ˜5ð 	Kó 	€Aô —e‘e˜Q˜C !™G a S¨1¡W¨q¨c°A©g¸°s¸Q±wÀÀÀaÁÈÈaÈSÐSTÉWÐTÑU€OÜ   OÀ#ÔFÑ€A€äØ¨°2ÀdÈsôç	�cˆ!ƒfð 
ô �u—}‘} oÔ6ô Ø¨$¸È4ÐTWôç	�cˆ!ƒfð 
ô �u—}‘} oÔ6ä
�	‰	�2�r˜2˜r 2¤r§x¡x°#°s°°¸qÑ0@Ó'AÀ2ÐFÓG×NÑNØ˜5ð 	Oó 	€Aô —e‘eØ	
ˆˆa‰�!��q‘˜1˜# ™' A 3¨¡7¨Q¨C°!©G°R¸¸a¸SÀ1¹WÐDñ€Oô !  OÀ#ÔFÑ€A€äØ¨°2ÀdÈsôç	�cˆ!ƒfð 
ô �u—}‘} oÔ6àˆaˆ&�1�c�(˜Q ˜I¨¨Q xÐ	0€BØˆrˆ(�R˜�G˜b "˜X¨¨2 wÐ	/€BØ�ˆ*�s˜B�i # s ¨b°#¨YÐ	7€BÜ
�	‰	�2�r˜2�,Ó×&Ñ& |¸%Ð&Ó@€AÜ—e‘e˜Q˜C !™G a S¨1¡W¨q¨c°A©gÐ5Ñ6€OÜ   OÀ#ÔFÑ€A€äØ¨´2·6±6È$ÐSWôç	�cˆ!ƒfð 
ô �u—}‘} oÕ6r/   c                 ó:  — t         j                  j                  |«      }d}ddgd|j                  |d«      j	                  | d¬«      z  z   }ddgd|j                  |d«      j	                  | d¬«      z  z   }t        j
                  ||f«      }t        ||¬«      }t        dd	¬
«      j                  |«      j                  }|j                  dk(  sJ ‚dt        j                  |d   «      dz   cxk  rdk  sJ ‚ J ‚t        j                  |d   «      dz   dk(  sJ ‚y )Nr>   r   r   Fr?   é2   rA   rC   r   )rF   rD   )r   r   r   és   r   éÈ   )r'   rP   rQ   rR   rT   rS   r   r   rV   Úcluster_hierarchy_ÚshapeÚdiff)rY   Úglobal_random_seedrZ   r[   r\   r]   rb   r6   s           r-   Útest_cluster_hierarchyrn   �   s-  € Ü
�)‰)×
Ñ
Ð 2Ó
3€CØÐØ
ˆQˆ�!�c—i‘iÐ 4°aÓ8×?Ñ?Ø˜5ð @ó ñ ñ 
€Bð ˆQˆ�"�s—y‘yÐ!5°qÓ9×@Ñ@Ø˜5ð Aó ñ ñ 
€Bô 	�	‰	�2�r�(Ó€AÜ� Ô$€Aä "¨Ô-×1Ñ1°!Ó4×GÑG€HØ�>‰>˜VÒ#Ð#Ð#ð ”"—'‘'˜( 1™+Ó&¨Ñ*Ô1¨cÒ1Ð1Ñ1Ð1Ð1ä�7‰7�8˜B‘<Ó  1Ñ$¨Ò+Ð+Ñ+r/   zcsr_container, metric)NÚ	minkowskiÚ	euclideanc                 ó¨  — d}t        |¬«      }t        ddd| ¬«      }|j                  |� ||«      n|«       t        t	        |j
                  «      «      t        d|j
                  v «      z
  }||k(  sJ ‚|j
                  j                  t        |«      fk(  sJ ‚|j
                  j                  j                  dk(  sJ ‚|j                  j                  t        |«      fk(  sJ ‚|j                  j                  j                  d	k(  sJ ‚|j                  j                  t        |«      fk(  sJ ‚|j                  j                  j                  d	k(  sJ ‚|j                  j                  t        |«      fk(  sJ ‚|j                  j                  j                  dk(  sJ ‚t	        |j                  «      t	        t        t        |«      «      «      k(  sJ ‚y )
Nr   )Ú
n_clustersg      >@r   r   )rH   rF   rD   Úmetricr   ÚiÚf)r   r   rV   ÚlenÚsetrW   Úintrk   ÚdtypeÚkindÚreachability_Úcore_distances_Ú	ordering_Úrange)rs   Úcsr_containerrr   rb   rd   Ún_clusters_1s         r-   Útest_correct_number_of_clustersr�   ¥   s�  € ð €JÜ¨:Ô6€Aô ˜9°!¸ÀFÔK€EØ	‡I�I -Ð";‰m˜AÔÀÔCä”s˜5Ÿ=™=Ó)Ó*¬S°°u·}±}Ð1DÓ-EÑE€LØ˜:Ò%Ð%Ð%ð �=‰=×Ñ¤3 q£6 )Ò+Ð+Ð+Ø�=‰=×Ñ×#Ñ# sÒ*Ð*Ð*à×Ñ×$Ñ$¬¨Q«¨	Ò1Ð1Ð1Ø×Ñ×$Ñ$×)Ñ)¨SÒ0Ð0Ð0à× Ñ ×&Ñ&¬3¨q«6¨)Ò3Ð3Ð3Ø× Ñ ×&Ñ&×+Ñ+¨sÒ2Ð2Ð2à�?‰?× Ñ ¤S¨£V IÒ-Ð-Ð-Ø�?‰?× Ñ ×%Ñ%¨Ò,Ð,Ð,Üˆu�‰Ó¤3¤u¬S°«V£}Ó#5Ò5Ð5Ñ5r/   c                  ó°   — d} ddgg}t        ddd¬«      }t        j                  t        | ¬«      5  |j	                  |«       d d d «       y # 1 sw Y   y xY w)Nz#min_samples must be no greater thanr   g      ø?r   ç      ð?)rH   rF   rG   ©Úmatch)r   ÚpytestÚraisesÚ
ValueErrorrV   )Úmsgrb   rd   s      r-   Ú#test_minimum_number_of_sample_checkrŠ   Å   sI   € à
/€Cð ˆQˆˆ€AÜ˜9°"ÀsÔK€Eô 
�‰”z¨Ö	-Ø�	‰	�!Œ÷ 
.×	-Ñ	-ús   ±AÁAc                  óâ   — d} ddgddgddgg}t        d|dd¬«      \  }}t        dd	d
d¬«      }t        j                  t        | ¬«      5  |j                  |«       d d d «       y # 1 sw Y   y xY w)Nz.Specify an epsilon smaller than 0.15. Got 0.3.r   r   éî  rE   r   ©Ú	n_samplesÚcentersÚcluster_stdrB   g333333Ã?Údbscanr   r   ©rH   rI   ÚepsrF   r„   )r   r   r†   r‡   rˆ   rV   ©r‰   r�   rb   Úlabels_truerd   s        r-   Útest_bad_extractr–   Ò   sn   € à
:€CØ�1ˆv˜˜B�x ! R Ð)€GÜØ˜w°CÀaô�N€A€{ô
 ˜:°hÀCÐUWÔX€EÜ	�‰”z¨Ö	-Ø�	‰	�!Œ÷ 
.×	-Ñ	-ús   Á
A%Á%A.c                  óà   — d} ddgddgddgg}t        d|dd¬«      \  }}t        j                  t        | ¬«      5  t	        d	d
d	¬«      }|j                  |«       d d d «       y # 1 sw Y   y xY w)Nz6All reachability values are inf. Set a larger max_eps.r   r   rŒ   rE   r   r�   r„   g¸…ëQ¸Ž?r   )rH   rF   r“   )r   r†   ÚwarnsÚUserWarningr   rV   r”   s        r-   Útest_bad_reachabilityrš   à   sk   € Ø
B€CØ�1ˆv˜˜B�x ! R Ð)€GÜØ˜w°CÀaô�N€A€{ô 
�‰”k¨Ö	-Ü˜{¸ÀÔFˆØ�	‰	�!Œ÷ 
.×	-Ñ	-ús   » A$Á$A-c                  ó  — d} t         j                  j                  ddt        ¬«      }t	        j
                  «       5  t	        j                  dt        «       t        | ¬«      j                  |«       d d d «       y # 1 sw Y   y xY w)NÚrogerstanimotor   ©r   r   ©Úsizery   Úerror©rs   )
r'   rP   ÚrandintÚboolÚwarningsÚcatch_warningsÚsimplefilterr	   r   rV   )Úpairwise_metricrb   s     r-   Ú$test_nowarn_if_metric_bool_data_boolr¨   ì   s`   € ð
 '€OÜ
�	‰	×Ñ˜! &´ÐÓ5€Aä	×	 Ñ	 Õ	"Ü×Ñ˜gÔ'<Ô=ä�oÔ&×*Ñ*¨1Ô-÷ 
#×	"Ñ	"ús   ½6A<Á<Bc                  ób  — d} t         j                  j                  ddt         j                  ¬«      }d| › �}t	        j
                  t        |¬«      5 }t        j                  ddt        ¬	«       t        | ¬
«      j                  |«       t        |«      dk(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nrœ   r   r�   rž   z-Data will be converted to boolean for metric r„   Úignorez+'asyncio.iscoroutinefunction' is deprecated)ÚmessageÚcategoryr¡   r   )r'   rP   r¢   Úint32r†   r˜   r	   r¤   ÚfilterwarningsÚDeprecationWarningr   rV   rv   )r§   rb   r‰   Úwarn_records       r-   Ú%test_warn_if_metric_bool_data_no_boolr±   ú   s‘   € ð '€OÜ
�	‰	×Ñ˜! &´·±ÐÓ9€AØ9¸/Ð9JÐ
K€Cä	�‰Ô+°3Õ	7¸;ä×ÑØØAÜ'õ	
ô
 	�oÔ&×*Ñ*¨1Ô-Ü�;Ó 1Ò$Ð$Ñ$÷ 
8×	7Ñ	7ús   ÁAB%Â%B.c                  ó¦  — d} t         j                  j                  ddt        ¬«      }t         j                  j                  ddt         j                  ¬«      }t        j                  «       5  t        j                  dt        «       t        | ¬«      j                  |«       t        | ¬«      j                  |«       d d d «       y # 1 sw Y   y xY w)Nro   r   r�   rž   r    r¡   )r'   rP   r¢   r£   r­   r¤   r¥   r¦   r	   r   rV   )r§   ÚX_boolÚX_nums      r-   Útest_nowarn_if_metric_no_boolrµ     s”   € ð "€OÜ�Y‰Y×Ñ˜q v´TÐÓ:€FÜ�I‰I×Ñ˜a f´B·H±HÐÓ=€Eä	×	 Ñ	 Õ	"Ü×Ñ˜gÔ'<Ô=ô 	�oÔ&×*Ñ*¨6Ô2ä�oÔ&×*Ñ*¨5Ô1÷ 
#×	"Ñ	"ús   Á-ACÃCc                  ó®   — ddgddgddgg} t        d| dd¬«      \  }}t        ddd	d
¬«      j                  |«      }t        |j                  «      dk(  sJ ‚y )Nr   r   rŒ   rE   r   r�   rƒ   r‘   r   r   r’   r   )r   r   rV   ÚmaxrW   )r�   rb   r•   rd   s       r-   Útest_close_extractr¸     sh   € ð �1ˆv˜˜B�x ! R Ð)€GÜØ˜w°CÀaô�N€A€{ô
 ˜3¨x¸SÈbÔQ×UÑUÐVWÓX€Eäˆu�}‰}Ó Ò"Ð"Ñ"r/   r“   )r   r   ç      à?rF   )r   r   rC   )Nrp   c           	      ól  — ddgddgddgg}t        d|dd¬«      \  }}|� ||«      n|}|j                  |d¬«      }t        |d	| |¬
«      j                  |«      }t	        | |¬«      j                  |«      }	t        |	j                  |j                  «      }
t        t        j                  t        j                  |
d¬«      «      t        j                  t        j                  |
d¬«      «      «      }|j                  d   |z
  }t        j                  |dz
  |j                  d   z  d«      }|dk  sJ ‚y )Nr   r   é–   rE   r   r�   Fr?   r‘   )rF   rI   r“   rs   )r“   rF   )Úaxisr   gš™™™™™©?)r   rT   r   rV   r   r   rW   Úminr'   Úsumr·   rk   Úround)r“   rF   rs   rY   r   r�   rb   r•   ÚopÚdbÚcontingencyÚagreeÚdisagreeÚpercent_mismatchs                 r-   Útest_dbscan_optics_parityrÆ   -  s#  € ð �1ˆv˜˜B�x ! R Ð)€GÜØ˜w°CÀaô�N€A€{ð *Ð5‰�aÔ¸1€Aà	�‰� EˆÓ*€Aô 
Ø°¸cÈ&ô
ç	�cˆ!ƒfð ô
 
�C [Ô	1×	5Ñ	5°aÓ	8€Bä$ R§Z¡Z°·±Ó<€KÜÜ
�‰Œr�v‰v�k¨Ô*Ó+¬R¯V©V´B·F±F¸;ÈQÔ4OÓ-Pó€Eð �w‰w�q‰z˜EÑ!€Hä—x‘x ¨A¡°·±¸±Ñ ;¸QÓ?Ðð ˜tÒ#Ð#Ñ#r/   c                 óæ  — ddgddgddgg}ddgddgddgg}ddgddgdd	gg}t        j                  |||f«      j                  | d
¬«      }t         j                  dgdz  dgdz  dgdz  f   }t	        dddd¬«      j                  |«      }t        |j                  |«       t         j                  dgdz  dgdz  dgdz  f   }t	        dddd¬«      j                  |«      }t        |j                  |«       t         j                  dgdz     }t        j                  t        d¬«      5  t	        dddd¬«      j                  |«      }t        |j                  |«       d d d «       y # 1 sw Y   y xY w)Nr   r   rJ   r   rK   rL   r>   é`   éj   Fr?   r   r   r   r$   rD   rO   )rF   rH   rI   rD   r   zAll reachability valuesr„   r   )r'   rS   rT   rU   r   rV   r   rW   r†   r˜   r™   )rY   r\   r]   r^   rb   rc   rd   s          r-   Útest_min_samples_edge_caserÊ   S  sg  € Øˆaˆ&�1�c�(˜Q ˜IÐ	&€BØˆrˆ(�R˜�G˜b "˜XÐ	&€BØ�ˆ*�s˜B�i # s Ð	,€BÜ
�	‰	�2�r˜2�,Ó×&Ñ& |¸%Ð&Ó@€Aä—e‘e˜Q˜C !™G a S¨1¡W¨q¨c°A©gÐ5Ñ6€OÜ˜q¨!¸DÀTÔJ×NÑNÈqÓQ€EÜ�u—}‘} oÔ6ä—e‘e˜Q˜C !™G a S¨1¡W¨r¨d°Q©hÐ6Ñ7€OÜ˜q¨!¸DÀTÔJ×NÑNÈqÓQ€EÜ�u—}‘} oÔ6ä—e‘e˜R˜D 1™H‘o€OÜ	�‰”kÐ)BÖ	CÜ 1¨aÀÈÔN×RÑRÐSTÓUˆÜ˜5Ÿ=™=¨/Ô:÷ 
D×	CÑ	Cús   Ä)5E'Å'E0rG   é   c                 ó¨  — t         d d d…   j                  |d¬«      }t        d| ¬«      j                  |«      }t	        j
                  |j                  |j                  dk7     «      }|j                  rt        |«      | k\  sJ ‚t        d| |j                  d   z  ¬«      }|j                  |«       t        |j                  |j                  «       y )Nr   Fr?   rK   )rF   rG   r   r   )rb   rT   r   rV   r'   ÚbincountrW   rŸ   r½   rk   r   )rG   rY   ÚredXrd   Úcluster_sizesÚ
clust_fracs         r-   Útest_min_cluster_sizerÑ   h  s°   € ä‰SˆqˆS‰6�=‰=˜¨Eˆ=Ó2€DÜ˜qÐ3CÔD×HÑHÈÓN€EÜ—K‘K §¡¨e¯m©m¸rÑ.AÑ BÓC€MØ×ÒÜ�=Ó!Ð%5Ò5Ð5Ð5äØØ)¨D¯J©J°q©MÑ9ô€Jð ‡N�N�4ÔÜ�u—}‘} j×&8Ñ&8Õ9r/   r   c                 ó–  — t        t        t        «      dz   ¬«      }t        j                  t
        d¬«      5  |j                  t        «       d d d «       t        t        t        «      dz   d¬«      }t        j                  t
        d¬«      5  |j                   | t        «      «       d d d «       y # 1 sw Y   ŒfxY w# 1 sw Y   y xY w)Nr   )rG   zmust be no greater than the r„   rp   )rG   rs   )r   rv   rb   r†   r‡   rˆ   rV   )r   rd   s     r-   Útest_min_cluster_size_invalid2rÓ   x  s‡   € ä¤C¬£F¨Q¡JÔ/€EÜ	�‰”zÐ)GÖ	HØ�	‰	”!Œ÷ 
Iô ¤C¬£F¨Q¡J°{ÔC€EÜ	�‰”zÐ)GÖ	HØ�	‰	‘-¤Ó"Ô#÷ 
IÐ	H÷	 
IÐ	Hú÷ 
IÐ	Hús   ¸B3ÂB?Â3B<Â?Cc                  ó<  — dgdgdgdgg} t        dd¬«      j                  | «      }t        |j                  t        j
                  dddg«       t        |j                  ddt        j
                  t        j
                  g«       t        |j                  g d¢«       y )	Nr   r   iöÿÿÿé   r   é   ©rF   rH   r8   )r   rV   r   r{   r'   rX   r|   r}   )ÚYrd   s     r-   Útest_processing_orderrÙ   ƒ  s}   € ð ˆˆrˆd�S�E˜B˜4Ð €Aä˜q¨"Ô-×1Ñ1°!Ó4€EÜ�u×*Ñ*¬R¯V©V°R¸¸RÐ,@ÔAÜ�u×,Ñ,¨r°2´r·v±v¼r¿v¹vÐ.FÔGÜ�u—‘ªÕ5r/   c                  óx	  — g t         j                  ‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d	‘d	‘d
‘d
‘d
‘d	‘d	‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d ‘d‘d!‘d"‘d#‘d$‘d%‘d%‘d%‘d%‘d&‘d&‘d&‘d'‘} g d(¢}g d)¢}t        d*¬+«      j                  t        «      }t        |j                  t        j                  |«      «       t        |j                  |j                     t        j                  |«      «       t        |j                  |j                     t        j                  | «      «       |j                  d,d  D ]0  }|j                  |   |j                  |j                  |      k\  rŒ0J ‚ g t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d‘d-‘t         j                  ‘d.‘d‘d‘d‘d‘d/‘d‘d‘d‘t         j                  ‘d	‘d	‘d
‘d
‘d
‘d	‘d	‘d‘d0‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘t         j                  ‘}g d1¢}g d2¢}t        d*d3¬4«      j                  t        «      }t        |j                  t        j                  |«      «       t        |j                  |j                     t        j                  |«      «       t        |j                  |j                     t        j                  |«      «       t        j                  |j                  d3k  «      d5   }	t        |j                  |	   |j                  |	   «       y )6NgÕÓ@zëð?g­¯N	Hè?gÞ‡~NTç?gšu™õå?gæµ”åE²í?g#íšrýËò?gÜž™„2¯
@g`ÒzÁß?gP{¾
„VÐ?gØ:×“ÚíÏ?g}~ aÁÓ?gÊ$Ôáï¦@gÐ°{änøù?göŒ Ý?g€ŒuûºLÐ?gÀ»*æëÙÌ?g$¼ý&È?gÛÐ{æ˜PÇ?gÔê¦x²¬Ì?g\xð·*xò?gù~)ÔN{õ?göÞe’E,õ?go°¸F‹ë?g–Ç>E”kÑ?gPñÖRùÀ?g�ŒBåQ¹?g‚÷òªWÁ?gÃ@¸‹*Ä?g´r©2\kÆ?gúØhGÆ?g[Øœ]N†ã?g!ì´Lõ?gª´ƒá@g¿wÏc?�@g;¹Ã©fh@gK�!Q¡œ@gó,@ùM@gÄåZôvÄ@gr/É%ñA@)<r   r   r   r   r$   r0   r   rK   r   r   é   é   é    é"   é!   é&   é'   é#   é%   é$   é,   é   rË   é   é   rÕ   é   é   é   é   rC   é(   é-   é.   r   rÖ   rL   é   é   é   é   é   é   é   é/   é1   é+   é0   é*   é)   é5   é9   é3   é4   é8   é;   é6   é7   é:   rg   )<r   r   r   r   r   r   r0   r   r$   r   r   rÛ   rÜ   rÜ   rÞ   rÞ   rÞ   rÝ   rÝ   rã   rä   rå   ræ   rË   rç   rè   rÕ   rÕ   rè   rè   rè   ræ   rí   rî   rï   r   rÖ   rÖ   rð   rð   rÖ   rL   rò   rÖ   r   r÷   rô   rî   rö   rù   rû   rý   rþ   rþ   rþ   rþ   r  r  r  r  r   )rF   r   gÄ9'Ê%Šß?g�ÉÎ–FÑ?gx»ôåÕôÇ?gÑ*üùÖ?)<r   r   r   r   r   r   r   r$   r0   rK   r   rÖ   rL   rð   rñ   rò   ró   rô   rõ   rö   r÷   rï   rC   rè   rÕ   rË   ré   rê   rç   rë   rì   ræ   rÜ   rÝ   rÞ   rß   rà   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   r   r   r   r   r   r   rÖ   rÖ   rð   rð   rÖ   rL   rò   rÖ   r   r÷   r   rC   rè   rÕ   rÕ   rÕ   rÕ   rè   rè   rË   r   rÜ   rÜ   rÞ   rÞ   rÞ   rÝ   rÝ   rã   rà   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r¹   r×   r   )r'   rX   r   rV   rb   r   r}   r(   Úpredecessor_r   r{   r|   Úwhere)
Úr1Úo1Úp1Úclust1rt   Úr2Úo2Úp2Úclust2Úindexs
             r-   Útest_compare_to_ELKIr  Ž  sA  € ð
=
Ü
�‰ð=
àð=
ð 	ð=
ð 	ð	=
ð
 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð  	ð!=
ð" 	ð#=
ð$ 	ð%=
ð& 	ð'=
ð( 	ð)=
ð* 	ð+=
ð, 	ð-=
ð. 	ð/=
ð0 	ð1=
ð2 	ð3=
ð4 	ð5=
ð6 	ð7=
ð8 	ð9=
ð: 	ð;=
ð< 	ð==
ð> 	ð?=
ð@ 	ðA=
ðB 	ðC=
ðD 	ðE=
ðF 	ðG=
ðH 	ðI=
ðJ 	ðK=
ðL 	ðM=
ðN 	ðO=
ðP 	ðQ=
ðR 	ðS=
ðT 	ðU=
ðV 	ðW=
ðX 	ðY=
ðZ 	ð[=
ð\ 	ð]=
ð^ 	ð_=
ð` 	ða=
ðb 	ðc=
ðd 	ðe=
ðf 	ðg=
ðh 	ði=
ðj 	ðk=
ðl 	ðm=
ðn 	ðo=
ðp 	ðq=
ðr 	ðs=
ðt 	ðu=
ðv 	ðw=
ðx 	ðy=
€Bò|=
€Bò|=
€BôD  Ô"×&Ñ&¤qÓ)€Fä�v×'Ñ'¬¯©°"«Ô6Ü�v×*Ñ*¨6×+;Ñ+;Ñ<¼b¿h¹hÀr»lÔKÜ�F×(Ñ(¨×)9Ñ)9Ñ:¼B¿H¹HÀR»LÔIð ×Ñ˜a˜bÓ!ˆØ×#Ñ# AÑ&¨&×*@Ñ*@À×ATÑATÐUVÑAWÑ*XÓXÐXÐXð "ð=
Ü
�‰ð=
ä
�‰ð=
ô 	�‰ð=
ô 	�‰ð	=
ô
 	�‰ð=
ô 	�‰ð=
ô 	�‰ð=
ô 	�‰ð=
ô 	�‰ð=
ô 	�‰ð=
ô 	�‰ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð 	ð=
ð  	ð!=
ð" 	ð#=
ð$ 	ð%=
ð& 	ð'=
ð( 	ð)=
ð* 	ð+=
ð, 	ð-=
ô. 	�‰ð/=
ð0 	ð1=
ð2 	ð3=
ð4 	ð5=
ð6 	ð7=
ð8 	ð9=
ð: 	ð;=
ð< 	ð==
ð> 	ð?=
ð@ 	ðA=
ôB 	�‰ðC=
ðD 	ðE=
ðF 	ðG=
ðH 	ðI=
ðJ 	ðK=
ðL 	ðM=
ðN 	ðO=
ðP 	ðQ=
ðR 	ðS=
ðT 	ðU=
ôV 	�‰ðW=
ôX 	�‰ðY=
ôZ 	�‰ð[=
ô\ 	�‰ð]=
ô^ 	�‰ð_=
ô` 	�‰ða=
ôb 	�‰ðc=
ôd 	�‰ðe=
ôf 	�‰ðg=
ôh 	�‰ði=
ôj 	�‰ðk=
ôl 	�‰ðm=
ôn 	�‰ðo=
ôp 	�‰ðq=
ôr 	�‰ðs=
ôt 	�‰ðu=
ôv 	�‰ðw=
ôx 	�‰ðy=
€Bò|=
€Bò|=
€Bô|  ¨3Ô/×3Ñ3´AÓ6€Fä�v×'Ñ'¬¯©°"«Ô6Ü�v×*Ñ*¨6×+;Ñ+;Ñ<¼b¿h¹hÀr»lÔKÜ�F×(Ñ(¨×)9Ñ)9Ñ:¼B¿H¹HÀR»LÔIä�H‰H�V×+Ñ+¨sÑ2Ó3°AÑ6€EÜ�F×*Ñ*¨5Ñ1°6×3IÑ3IÈ%Ñ3PÕQr/   c           	      ó>  — t         j                  j                  |«      }d}ddgd|j                  |d«      z  z   }ddgd|j                  |d«      z  z   }ddgd|j                  |d«      z  z   }dd	gd|j                  |d«      z  z   }t        j                  ||||f«      j                  | d
¬«      }t        dd¬«      j                  |«      }	t        t        j                  t        j                  |	j                  |	j                  dk7     «      «      g d¢«       y )NrC   r   r   r   r   r   r   r   r   Fr?   r‘   r¹   )rI   r“   r8   )r'   rP   rQ   rR   rS   rT   r   rV   r   ÚsortÚuniquerW   )
rY   rm   rZ   r[   r\   r]   r^   r_   rb   rd   s
             r-   Útest_extract_dbscanr     s
  € ô �)‰)×
Ñ
Ð 2Ó
3€CØÐØ
ˆbˆ�C˜#Ÿ)™)Ð$8¸!Ó<Ñ<Ñ	<€BØ
ˆRˆ�3˜Ÿ™Ð#7¸Ó;Ñ;Ñ	;€BØ
ˆQˆ�#˜Ÿ	™	Ð"6¸Ó:Ñ:Ñ	:€BØ
ˆaˆ�3˜Ÿ™Ð#7¸Ó;Ñ;Ñ	;€BÜ
�	‰	�2�r˜2˜rÐ"Ó#×*Ñ*¨<¸eÐ*ÓD€Aä (°Ô4×8Ñ8¸Ó;€EÜÜ
�‰”—	‘	˜%Ÿ-™-¨¯©¸Ñ(;Ñ<Ó=Ó>Âõr/   c                 óê  — t         d d d…   j                  | d¬«      }t        |d¬«      }|� ||«      n|}t        j                  «       5  t        j
                  dt        «       t        ddd	¬
«      j                  |«      }d d d «       t        ddd¬
«      j                  |«      }t        j                  |j                  «       t        |j                  |j                  «       y # 1 sw Y   ŒgxY w)Nr   Fr?   rp   r¡   rª   r   ÚbruteÚprecomputed)rF   Ú	algorithmrs   )rb   rT   r   r¤   r¥   r¦   r
   r   rV   r   r{   r   rW   )rY   r   rÎ   Údistsr  r  s         r-   Útest_precomputed_distsr  1  sÃ   € ä‰SˆqˆS‰6�=‰=˜¨Eˆ=Ó2€DÜ˜t¨KÔ8€EØ$1Ð$=‰M˜%Ô À5€EÜ	×	 Ñ	 Õ	"Ü×Ñ˜hÔ(9Ô:Ü B°'À-ÔP×TÑTØó
ˆ÷ 
#ô
  ¨g¸kÔJ×NÑNÈtÓT€Fä�F×(Ñ(¨&×*>Ñ*>Ô?Ü�v—~‘~ v§~¡~Õ6÷ 
#Ð	"ús   Á8C)Ã)C2c                 óÊ  — t         j                  j                  |«      j                  dd«      }t        j                  |d«        | |«      }t        d„ t        |j                  «       Ž D «       «      sJ ‚|j                  «       }t        d¬«      j                  |«       |j                  |j                  k(  sJ ‚t        |j                  «       |j                  «       «       y)z£Check that we don't modify in-place the pre-computed sparse matrix.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/27508
    r   r   c              3   ó,   K  — | ]  \  }}||k7  –— Œ y ­wr:   © )Ú.0ÚrowÚcols      r-   Ú	<genexpr>zKtest_optics_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>O  s   è ø€ Ð<Ñ*;™h˜c 3ˆs�c�zÑ*;ùs   ‚r  r¡   N)r'   rP   rQ   ÚrandÚfill_diagonalÚallÚzipÚnonzeror@   r   rV   Únnzr   Útoarray)r   rm   rb   ÚX_copys       r-   Ú8test_optics_input_not_modified_precomputed_sparse_nodiagr+  A  s®   € ô 	�	‰	×ÑÐ0Ó1×6Ñ6°q¸!Ó<€Aô ×Ñ�Q˜ÔÙ�aÓ€AÜÑ<¬#¨q¯y©y«{Ñ*;Ó<Ô<Ð<Ð<Ø�V‰V‹X€FÜ
�-Ô ×$Ñ$ QÔ'ð �5‰5�F—J‘JÒÐÐÜ�q—y‘y“{ F§N¡NÓ$4Õ5r/   c                  ó  — t        j                  g d¢«      j                  dd«      } g d¢}| |   }t        dd¬«      j	                  | «      }t        dd¬«      j	                  |«      }t        |j                  |   |j                  «       y)	aƒ  Check that cluster correction using predecessor is working as expected.

    In the following example, the predecessor correction was not working properly
    since it was not using the right indices.

    This non-regression test check that reordering the data does not change the results.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/26324
    )r   r   r   r   r0   r0   r$   r>   r   r   )r   r   r   r   r   r   r$   r   r   rp   )rF   rs   N)r'   r(   Úreshaper   rV   r   rW   )ÚX_1ÚreorderÚX_2Úoptics_1Úoptics_2s        r-   Ú+test_optics_predecessor_correction_orderingr3  X  sw   € ô �(‰(Ò-Ó
.×
6Ñ
6°r¸1Ó
=€CÚ&€GØ
ˆg‰,€Cä !¨KÔ8×<Ñ<¸SÓA€HÜ !¨KÔ8×<Ñ<¸SÓA€Hä�x×'Ñ'¨Ñ0°(×2BÑ2BÕCr/   )Er¤   Únumpyr'   r†   Úsklearn.clusterr   r   Úsklearn.cluster._opticsr   r   Úsklearn.cluster.tests.commonr   Úsklearn.datasetsr   Úsklearn.exceptionsr	   r
   Úsklearn.metrics.clusterr   Úsklearn.metrics.pairwiser   Úsklearn.utilsr   Úsklearn.utils._testingr   r   Úsklearn.utils.fixesr   rP   rQ   rZ   r[   rR   r\   r]   r^   r_   r`   ra   rS   rb   ÚmarkÚparametrizerX   r.   r4   r<   re   rn   r�   rŠ   r–   rš   r¨   r±   rµ   r¸   rÆ   rÊ   r~   rk   rÑ   rÓ   rÙ   r  r  r  r+  r3  )Ú	containers   0r-   Ú<module>rB     s†  ðó ã Û ç *ß FÝ @Ý 'ß GÝ 6Ý 7Ý !ß FÝ .à‡i�i×Ñ˜AÓ€ØÐ Øˆ"€X��c—i‘iÐ 4°aÓ8Ñ8Ñ8€Øˆ€Wˆs�S—Y‘YÐ3°QÓ7Ñ7Ñ7€Øˆ€Wˆs�S—Y‘YÐ3°QÓ7Ñ7Ñ7€Øˆ!€Wˆs�S—Y‘YÐ3°QÓ7Ñ7Ñ7€Øˆ€Wˆs�S—Y‘YÐ3°QÓ7Ñ7Ñ7€Øˆ€Vˆa�#—)‘)Ð0°!Ó4Ñ4Ñ4€Ø€B‡I�Iˆr�2�r˜2˜r 2Ð&Ó'€ð ‡�×ÑØâ	# QÐ'Ú	(¨!Ð,Ø
ˆc�3˜˜Q  2§6¡6Ð	*¨AÐ.Ø
ˆc�3˜˜Q  2§6¡6Ð	*¨AÐ.ð	óñóðð ‡�×ÑØà
ˆQ��S˜!˜Q  2§6¡6Ð	*¨AÐ.Ø
ˆQ��S˜#˜q ! Q¨¯©Ð	/°Ð3Ø
ˆQ��Q˜Ÿ™Ð	 Ð#Ø
ˆQ��R—V‘VÐ	˜aÐ ð	óñóðð ‡�×ÑØ(â	˜˜A˜  A Ð'ªÐ6Ú	˜˜A˜  A Ð'ªÐ7Ú	˜˜A˜  A ¨¨A¨Ð/²Ð?Ú	˜˜A˜  A ¨¨A¨Ð/²Ð?ð	óñ)óð)ò87òv,ð, ‡�×ÑØØÐÁ~ÓVÁ~¸)˜i¨Ò5À~ÑVÑVóñ6ó	ð6ò8
òò	ò.ò%ò*2ò #ð ‡�×Ñ˜¢Ó0Ø‡�×Ñ˜ªÓ4Ø‡�×ÑØØÐ-Ð.Ù1?Ó@± Iˆ	�;Ò°Ñ@ñAóñ
$óó 5ó 1ð$ò>;ð* ‡�×ÑÐ+©U°1°a·g±g¸a±jÀBÑ6FÈÓ-KÓLñ:ó Mð:ð ‡�×Ñ˜¨.Ó9ñ$ó :ð$ò6òORòdð" ‡�×Ñ˜¨4¨&°>Ñ*AÓBñ7ó Cð7ð ‡�×Ñ˜¨.Ó9ñ6ó :ð6ó,Dùòc WùòV As   É(OË.O	