Ë
    âQ(h�Ë  ã                   óŠ  — d dl Zd dlmZmZmZmZmZ d dlZd dlm	Z
 d dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 d d	l2m3Z3 d
dl4m5Z5 	 d dl6Z6 e6jn                  d«       d dl8m9Z: dZ;e.ejz                  j}                  d«      gZ?ejz                  j€                  Z@ G d„ d«      ZA e@d¬«       G d„ d«      «       ZB e@d¬«       G d„ d«      «       ZC e@d¬«       G d„ d«      «       ZD G d„ d«      ZE e@d¬«       G d„ d«      «       ZF e@d¬«       G d„ d«      «       ZG e@dd¬ «       G d!„ d"«      «       ZH e@d¬«       G d#„ d$«      «       ZI e@d¬«       G d%„ d&«      «       ZJ G d'„ d(«      ZK e@d¬«       G d)„ d*«      «       ZL e@d¬«       G d+„ d,«      «       ZM e@d¬«       G d-„ d.«      «       ZN e@d¬«       G d/„ d0«      «       ZO G d1„ d2«      ZP G d3„ d4«      ZQ e@d¬«       G d5„ d6«      «       ZRd7„ ZSd8efd9„ZTejz                  jª                   e@d¬«      d:„ «       «       ZVd;„ ZW e@d¬«      d<„ «       ZX e@d¬«      d=„ «       ZY e@dd>¬ «      d?„ «       ZZ e@d¬«      d@„ «       Z[ e@ddA¬ «      dB„ «       Z\ e@d¬«      dC„ «       Z]y# e<$ r dZ;Y �Œw xY w)Dé    N)Úassert_allcloseÚassert_equalÚassert_array_equalÚassert_Úassert_warns)Úraises)ÚClusterWarningÚlinkageÚfrom_mlab_linkageÚto_mlab_linkageÚnum_obs_linkageÚinconsistentÚcophenetÚfclusterdataÚfclusterÚis_isomorphicÚsingleÚleadersÚ
correspondÚis_monotonicÚmaxdistsÚmaxinconstsÚmaxRstatÚis_valid_linkageÚis_valid_imÚto_treeÚleaves_listÚ
dendrogramÚset_link_color_paletteÚcut_treeÚoptimal_leaf_orderingÚ_order_cluster_treeÚ
_hierarchyÚ_LINKAGE_METHODS)Úpdist)ÚHeap)Úarray_api_compatible)Úxp_assert_closeÚxp_assert_equal©ÚLocké   )Úhierarchy_test_dataÚAggTFÚskip_xp_backendsc                   óÌ   — e Zd Z ed¬«      d„ «       Z ed¬«      d„ «       Z ed¬«      d„ «       Zd„ Z ed¬«      d„ «       Zd„ Z	 ed¬«      d	„ «       Z
 ed¬«      d
„ «       Zy)ÚTestLinkageT©Úcpu_onlyc                 ót   — |j                  |j                  gdgdz  z   «      }t        t        t        |«       y )Nç        é   )ÚasarrayÚnanÚassert_raisesÚ
ValueErrorr
   ©ÚselfÚxpÚys      ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/cluster/tests/test_hierarchy.pyÚ3test_linkage_non_finite_elements_in_distance_matrixz?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixN   s/   € ð �J‰J˜Ÿ™�x 3 %¨¡'Ñ)Ó*ˆÜ”j¤'¨1Õ-ó    c                 óP   — |j                  d«      }t        t        t        |«       y )N©r   )Úzerosr9   r:   r
   r;   s      r?   Ú"test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixU   s   € ð �H‰H�T‹NˆÜ”j¤'¨1Õ-rA   c                 ó6   — dD ]  }| j                  ||«       Œ y )N)r   ÚcompleteÚaverageÚweighted)Úcheck_linkage_tdist©r<   r=   Úmethods      r?   Útest_linkage_tdistzTestLinkage.test_linkage_tdist[   s!   € àCò 	1ˆFØ×$Ñ$ V¨RÕ0ñ	1rA   c                 ó¶   — t        |j                  t        j                  «      |«      }t	        t        d|z   «      }t        ||j                  |«      d¬«       y )NÚlinkage_ytdist_ç»½×Ùß|Û=©Úatol©r
   r7   r-   ÚytdistÚgetattrr(   )r<   rL   r=   ÚZÚ	expectedZs        r?   rJ   zTestLinkage.check_linkage_tdist`   sF   € ä�B—J‘JÔ2×9Ñ9Ó:¸FÓCˆÜÔ/Ð1BÀVÑ1KÓLˆ	Ü˜˜2Ÿ:™: iÓ0°uÖ=rA   c                 ó6   — dD ]  }| j                  ||«       Œ y )N)ÚcentroidÚmedianÚward)Úcheck_linkage_qrK   s      r?   Útest_linkage_XzTestLinkage.test_linkage_Xf   s!   € à4ò 	-ˆFØ× Ñ  ¨Õ,ñ	-rA   c                 ó˜  — t        |j                  t        j                  «      |«      }t	        t        d|z   «      }t        ||j                  |«      d¬«       t        j                  j                  j                  t        j                  d¬«      }t        |j                  |«      |«      }t        ||j                  |«      d¬«       y )NÚ
linkage_X_ç�íµ ÷Æ°>rQ   Ú	euclidean)Úmetric)
r
   r7   r-   ÚXrU   r(   ÚscipyÚspatialÚdistancer%   )r<   rL   r=   rV   rW   r>   s         r?   r\   zTestLinkage.check_linkage_qk   s™   € ä�B—J‘JÔ2×4Ñ4Ó5°vÓ>ˆÜÔ/°ÀÑ1FÓGˆ	Ü˜˜2Ÿ:™: iÓ0°uÕ=ä�M‰M×"Ñ"×(Ñ(Ô)<×)>Ñ)>Ø0;ð )ó =ˆä�B—J‘J˜q“M 6Ó*ˆÜ˜˜2Ÿ:™: iÓ0°uÖ=rA   c                 óX  — t         j                  j                  d«      }d}|j                  |d«      }t	        |«      }t        j                  «       D ]U  \  }}t        j                  |||«      }t        |j                  |«      |«      }	t        |	|j                  |«      dd¬«       ŒW y )Nr   é   é   g›+¡†›„=çVçž¯Ò<)ÚrtolrR   )ÚnpÚrandomÚRandomStateÚrandr%   r$   Úitemsr#   r
   r7   r(   )
r<   r=   ÚrngÚnrc   ÚdrL   ÚcodeÚ	Z_trivialrV   s
             r?   Útest_compare_with_trivialz%TestLinkage.test_compare_with_trivialv   s�   € ä�i‰i×#Ñ# AÓ&ˆØˆØ�H‰H�Q˜‹NˆÜ�!‹Hˆä,×2Ñ2Ó4ò 	N‰LˆF�DÜ"×*Ñ*¨1¨a°Ó6ˆIÜ˜Ÿ
™
 1› vÓ.ˆAÜ˜A˜rŸz™z¨)Ó4¸5ÀuÖMñ	NrA   c                 ó²   — t        |j                  t        j                  «      d¬«      }t	        t        d«      }t        ||j                  |«      d¬«       y )NT)Úoptimal_orderingÚlinkage_ytdist_single_olorP   rQ   rS   )r<   r=   rV   rW   s       r?   Útest_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_ordering‚   sA   € ä�B—J‘JÔ2×9Ñ9Ó:ÈTÔRˆÜÔ/Ð1LÓMˆ	Ü˜˜2Ÿ:™: iÓ0°uÖ=rA   N)Ú__name__Ú
__module__Ú__qualname__r/   r@   rE   rM   rJ   r]   r\   rv   rz   © rA   r?   r1   r1   L   s¢   „ á˜tÔ$ñ.ó %ð.ñ ˜tÔ$ñ.ó %ð.ñ
 ˜tÔ$ñ1ó %ð1ò>ñ ˜tÔ$ñ-ó %ð-ò	>ñ ˜tÔ$ñ	Nó %ð	Nñ ˜tÔ$ñ>ó %ñ>rA   r1   r2   c                   ó`  — e Zd Z ej                  g d¢g d¢g«       ej                  g d¢g d¢g«       ej                  g d¢g d¢g«       ej                  g d¢g d¢g«       ej                  g d¢g d¢g«       ej                  g d¢g d¢g«       ej                  g d¢g d¢g«      dœZd„ Zd„ Zy	)
ÚTestLinkageTies)r   r,   çß'Üež ö?ri   )ri   é   r�   r‚   )ri   r‚   gß'Üež @r‚   )ri   r‚   gçeÌvø @r‚   )ri   r‚   g€©Ž˜@r‚   ©r   rG   rH   rI   rY   rZ   r[   c                 ó6   — dD ]  }| j                  ||«       Œ y ©Nrƒ   )Úcheck_linkage_tiesrK   s      r?   Útest_linkage_tiesz!TestLinkageTies.test_linkage_ties�   s#   € ð5ò 	0ˆFà×#Ñ# F¨BÕ/ñ	0rA   c                 óª   — |j                  ddgddgddgg«      }t        ||¬«      }| j                  |   }t        ||j                  |«      d¬«       y )Néÿÿÿÿr   r,   ©rL   r`   rQ   )r7   r
   Ú_expectationsr(   )r<   rL   r=   rc   rV   rW   s         r?   r†   z"TestLinkageTies.check_linkage_ties¢   sT   € Ø�J‰J˜˜R˜ 1 a &¨1¨a¨&Ð1Ó2ˆÜ�A˜fÔ%ˆØ×&Ñ& vÑ.ˆ	Ü˜˜2Ÿ:™: iÓ0°uÖ=rA   N)r{   r|   r}   rl   Úarrayr‹   r‡   r†   r~   rA   r?   r€   r€   ‰   sÄ   „ ð �"—(‘(Ò1Ú1ð3ó 4à�B—H‘HÒ3Ú3ð5ó 6à�2—8‘8Ò2Ú2ð4ó 5à�B—H‘HÒ3Ú3ð5ó 6à�B—H‘HÒ3Ú3ð5ó 6à�"—(‘(Ò1Ú1ð3ó 4à�—‘Ò/Ú/ð1ó 2ñ€Mò"0ó
>rA   r€   c                   ó   — e Zd Zd„ Zd„ Zy)ÚTestInconsistentc                 óR   — t         j                  D ]  }| j                  ||«       Œ y ©N)r-   Úinconsistent_ytdistÚcheck_inconsistent_tdist)r<   r=   Údepths      r?   Útest_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdist¬   s'   € Ü(×<Ñ<ò 	5ˆEØ×)Ñ)¨%°Õ4ñ	5rA   c                 ó®   — |j                  t        j                  «      }t        t	        ||«      |j                  t        j
                  |   «      «       y r�   )r7   r-   Úlinkage_ytdist_singler(   r   r‘   )r<   r“   r=   rV   s       r?   r’   z)TestInconsistent.check_inconsistent_tdist°   sA   € Ø�J‰JÔ*×@Ñ@ÓAˆÜœ Q¨Ó.ØŸ
™
Ô#6×#JÑ#JÈ5Ñ#QÓRõ	TrA   N)r{   r|   r}   r”   r’   r~   rA   r?   rŽ   rŽ   ©   s   „ ò5óTrA   rŽ   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestCopheneticDistancec                 óÐ   — |j                  g d¢«      }|j                  t        j                  «      }t        |«      }t	        ||j                  ||j
                  ¬«      d¬«       y )N©é  é'  éÿ   r�   rœ   rœ   r›   r›   rœ   rœ   rœ   éŠ   éÛ   rœ   rœ   ©ÚdtyperP   rQ   )r7   r-   r–   r   r(   Úfloat64)r<   r=   Ú	expectedMrV   ÚMs        r?   Útest_linkage_cophenet_tdist_Zz4TestCopheneticDistance.test_linkage_cophenet_tdist_Z¹   sP   € à—J‘Jò  9ó :ˆ	à�J‰JÔ*×@Ñ@ÓAˆÜ�Q‹KˆÜ˜˜2Ÿ:™: i°r·z±z˜:ÓBÈÖOrA   c                 óP  — |j                  t        j                  «      }t        ||j                  t        j                  «      «      \  }}|j                  g d¢|j
                  ¬«      }|j                  d|j
                  ¬«      d   }t        ||d¬«       t        ||d¬«       y )Nrš   r    g*É»2Qzä?r~   rP   rQ   )r7   r-   r–   r   rT   r¢   r(   )r<   r=   rV   Úcr¤   r£   Ú	expectedcs          r?   Útest_linkage_cophenet_tdist_Z_Yz6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_YÁ   sŒ   € à�J‰JÔ*×@Ñ@ÓAˆÜ˜!˜RŸZ™ZÔ(;×(BÑ(BÓCÓD‰ˆˆAØ—J‘Jò  9Ø@BÇ
Á
ð ó Lˆ	à—J‘JÐ?ÀrÇzÁz�JÓRÐSUÑVˆ	Ü˜˜9¨5Õ1Ü˜˜9¨5Ö1rA   c                 óÞ   — g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g}t        j                  t        d¬«      5  t        |j	                  |«      «       d d d «       y # 1 sw Y   y xY w)N)r5   ç      ð?r«   ç       @)r¬   ç      (@r«   ç      @)r®   ç      @r«   r¬   )ç      @g      ,@r«   r®   )ç      @ç      @r«   r¬   )ç       @g      0@r«   r®   )ç      "@ç      $@r«   r¬   )g      &@g      2@r«   r®   )g      *@ç      .@r¬   r±   )g      1@g      4@r¬   g      @@)g      3@g      5@r¬   r­   zexcessive observations©Úmatch)Úpytestr   r:   r   r7   )r<   r=   Úarrs      r?   Útest_gh_22183z$TestCopheneticDistance.test_gh_22183Ë   sb   € ò
 "Ú"Ú!Ú"Ú!Ú"Ú"Ú#Ú#Ú$Ú$ð
&ˆô �]‰]œ:Ð-EÔFñ 	&Ü�R—Z‘Z “_Ô%÷	&÷ 	&ñ 	&ús   ¿A#Á#A,N)r{   r|   r}   r¥   r©   r»   r~   rA   r?   r˜   r˜   ¶   s   „ òPò2ó&rA   r˜   c                   óN   — e Zd Zd„ Z ed¬«      d„ «       Z ed¬«      d„ «       Zy)ÚTestMLabLinkageConversionc                 ó’   — |j                  g |j                  ¬«      }t        t        |«      |«       t        t	        |«      |«       y )Nr    )r7   r¢   r)   r   r   )r<   r=   rc   s      r?   Ú"test_mlab_linkage_conversion_emptyz<TestMLabLinkageConversion.test_mlab_linkage_conversion_emptyá   s7   € à�J‰J�r §¡ˆJÓ,ˆÜÔ)¨!Ó,¨aÔ0Üœ¨Ó*¨AÕ.rA   Tr2   c                 ó  — |j                  g d¢g«      }|j                  g d¢g«      }t        t        |«      |j                  ||j                  ¬«      d¬«       t        t	        |«      |j                  ||j                  ¬«      d¬«       y )N)r5   r«   r®   r¬   ©r,   ri   r‚   r    rj   ©rk   )r7   r(   r   r¢   r   )r<   r=   rV   ÚZms       r?   Ú'test_mlab_linkage_conversion_single_rowzATestMLabLinkageConversion.test_mlab_linkage_conversion_single_rowç   sq   € ð �J‰JÒ(Ð)Ó*ˆØ�Z‰Zš˜Ó$ˆÜÔ)¨"Ó-¨r¯z©z¸!À2Ç:Á:¨zÓ/NØ"õ	$äœ¨Ó*¨B¯J©J°rÀÇÁ¨JÓ,LØ"ö	$rA   c                 ó.  — |j                  g d¢g d¢g d¢g d¢g d¢g«      }|j                  g d¢g d¢g d¢g d	¢g d
¢g|j                  ¬«      }t        t        |«      |d¬«       t        t	        |«      |j                  ||j                  ¬«      d¬«       y )N)r‚   é   rž   )é   r6   rŸ   )r,   é   r�   )ri   é	   r›   )é   é
   rœ   )r¬   r°   ç     @a@r¬   )r®   r¯   ç     `k@r¬   )r5   r²   ç     ào@r®   )r«   r³   ç     Àp@r¯   )r±   r´   ç     pr@r±   r    rj   rÂ   )r7   r¢   r(   r   r   )r<   r=   rÃ   rV   s       r?   Ú*test_mlab_linkage_conversion_multiple_rowszDTestMLabLinkageConversion.test_mlab_linkage_conversion_multiple_rowsñ   s�   € ð �Z‰Zš¢kÚ$¢k²<ðAó Bˆà�J‰JÒ*Ú*Ú*Ú*Ú*ð	,ð
  ŸZ™Zð ó )ˆô 	Ô)¨"Ó-¨q°uÕ=Üœ¨Ó*¨B¯J©J°rÀÇÁ¨JÓ,LØ"ö	$rA   N)r{   r|   r}   r¿   r/   rÄ   rÑ   r~   rA   r?   r½   r½   ß   s9   „ ò/ñ ˜tÔ$ñ$ó %ð$ñ ˜tÔ$ñ$ó %ñ$rA   r½   c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTestFclusterc                 óô   — t         j                  D ]  }| j                  |d|«       Œ t         j                  D ]  }| j                  |d|«       Œ t         j                  D ]  }| j                  |d|«       Œ y ©Nr   rf   Úmaxclust)r-   Úfcluster_inconsistentÚcheck_fclusterdataÚfcluster_distanceÚfcluster_maxclust©r<   r=   Úts      r?   Útest_fclusterdatazTestFcluster.test_fclusterdata  sw   € Ü$×:Ñ:ò 	;ˆAØ×#Ñ# A ~°rÕ:ð	;ä$×6Ñ6ò 	7ˆAØ×#Ñ# A z°2Õ6ð	7ä$×6Ñ6ò 	7ˆAØ×#Ñ# A z°2Õ6ñ	7rA   c                 óÒ   — |j                  t        t        d|z   «      |   «      }|j                  t        j                  «      }t	        |||¬«      }t        t        ||«      «       y ©NÚ	fcluster_©Ú	criterionrÜ   )r7   rU   r-   ÚQ_Xr   r   r   )r<   rÜ   râ   r=   Ú	expectedTrc   ÚTs          r?   rØ   zTestFcluster.check_fclusterdata  sU   € à—J‘JœwÔ':¸KÈ)Ñ<SÓTÐUVÑWÓXˆ	Ø�J‰JÔ*×.Ñ.Ó/ˆÜ˜ i°1Ô5ˆÜ”˜a Ó+Õ,rA   c                 óô   — t         j                  D ]  }| j                  |d|«       Œ t         j                  D ]  }| j                  |d|«       Œ t         j                  D ]  }| j                  |d|«       Œ y rÕ   )r-   r×   Úcheck_fclusterrÙ   rÚ   rÛ   s      r?   Útest_fclusterzTestFcluster.test_fcluster  sw   € Ü$×:Ñ:ò 	7ˆAØ×Ñ  >°2Õ6ð	7ä$×6Ñ6ò 	3ˆAØ×Ñ  :¨rÕ2ð	3ä$×6Ñ6ò 	3ˆAØ×Ñ  :¨rÕ2ñ	3rA   c                 óä   — |j                  t        t        d|z   «      |   «      }t        |j                  t        j                  «      «      }t        |||¬«      }t        t        ||«      «       y rß   )r7   rU   r-   r   rã   r   r   r   )r<   rÜ   râ   r=   rä   rV   rå   s          r?   rç   zTestFcluster.check_fcluster  sZ   € à—J‘JœwÔ':¸KÈ)Ñ<SÓTÐUVÑWÓXˆ	Ü�2—:‘:Ô1×5Ñ5Ó6Ó7ˆÜ�Q )¨qÔ1ˆÜ”˜a Ó+Õ,rA   c                 ó    — t         j                  D ]  }| j                  ||«       Œ t         j                  D ]  }| j	                  ||«       Œ y r�   )r-   rÙ   Úcheck_fcluster_monocritrÚ   Ú check_fcluster_maxclust_monocritrÛ   s      r?   Útest_fcluster_monocritz#TestFcluster.test_fcluster_monocrit"  sL   € Ü$×6Ñ6ò 	0ˆAØ×(Ñ(¨¨BÕ/ð	0ä$×6Ñ6ò 	9ˆAØ×1Ñ1°!°RÕ8ñ	9rA   c                 óò   — |j                  t        j                  |   «      }t        |j                  t        j                  «      «      }t        ||dt        |«      ¬«      }t        t        ||«      «       y )NÚmonocrit©râ   rï   )	r7   r-   rÙ   r   rã   r   r   r   r   ©r<   rÜ   r=   rä   rV   rå   s         r?   rë   z$TestFcluster.check_fcluster_monocrit(  sY   € Ø—J‘JÔ2×DÑDÀQÑGÓHˆ	Ü�2—:‘:Ô1×5Ñ5Ó6Ó7ˆÜ�Q˜ Z¼(À1»+ÔFˆÜ”˜a Ó+Õ,rA   c                 óò   — |j                  t        j                  |   «      }t        |j                  t        j                  «      «      }t        ||dt        |«      ¬«      }t        t        ||«      «       y )NÚmaxclust_monocritrð   )	r7   r-   rÚ   r   rã   r   r   r   r   rñ   s         r?   rì   z-TestFcluster.check_fcluster_maxclust_monocrit.  sZ   € Ø—J‘JÔ2×DÑDÀQÑGÓHˆ	Ü�2—:‘:Ô1×5Ñ5Ó6Ó7ˆÜ�Q˜Ð%8Ä8ÈAÃ;ÔOˆÜ”˜a Ó+Õ,rA   c                 ó�  — |j                  dgdgdgg«      }t        |«      }t        t        |dd¬«      |j                  g d¢«      «       t        t        |dd¬«      |j                  g d¢«      «       t        t        |d	d¬«      |j                  g d
¢«      «       t        t        |dd¬«      |j                  g d
¢«      «       y )Nr,   rÇ   r6   rÖ   )rÜ   râ   ©r,   r,   r,   ri   )ri   r,   r,   r‚   rÁ   )r7   r   r   r   ©r<   r=   r>   rV   s       r?   Útest_fcluster_maxclust_gh_12651z,TestFcluster.test_fcluster_maxclust_gh_126514  s¡   € Ø�J‰J˜˜˜a˜S 1 #�Ó'ˆÜ�1‹IˆÜœ8 A¨°jÔAØŸ:™:¢iÓ0ô	2äœ8 A¨°jÔAØŸ:™:¢iÓ0ô	2äœ8 A¨°jÔAØŸ:™:¢iÓ0ô	2äœ8 A¨°jÔAØŸ:™:¢iÓ0õ	2rA   N)r{   r|   r}   rÝ   rØ   rè   rç   rí   rë   rì   r÷   r~   rA   r?   rÓ   rÓ     s*   „ ò7ò-ò3ò-ò9ò-ò-ó
2rA   rÓ   c                   ó   — e Zd Zd„ Zy)ÚTestLeadersc                 ó”  — t         j                  }t        |«      }|j                  |«      }t	        |«      }t        |dd¬«      }|j                  g d¢«      |j                  g d¢«      f}|j                  ||j                  ¬«      }t        ||«      }t        t        j                  |«      t        j                  |«      d¬«       y )	NrÖ   r‚   rá   )é5   é7   é8   )ri   r‚   r,   r    rj   rÂ   )r-   rã   r%   r7   r
   r   Úint32r   r   rl   Úconcatenate)r<   r=   rc   ÚYrV   rå   ÚLrightÚLs           r?   Útest_leaders_singlezTestLeaders.test_leaders_singleD  s•   € ä×#Ñ#ˆÜ�!‹HˆØ�J‰J�q‹MˆÜ�A‹JˆÜ�Q *°Ô2ˆØ—*‘*š\Ó*¨B¯J©J²yÓ,AÐBˆØ�J‰J�q §¡ˆJÓ)ˆÜ�A�q‹MˆÜœŸ™ qÓ)¬2¯>©>¸&Ó+AÈÖNrA   N)r{   r|   r}   r  r~   rA   r?   rù   rù   A  s   „ ó
OrA   rù   z+`is_isomorphic` only supports NumPy backend©Únp_onlyÚreasonc                   ój   — e Zd Z edd¬«      d„ «       Zd„ Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zdd„Zy)ÚTestIsIsomorphicTz,array-likes only supported for NumPy backendr  c                 óD   — t        g d¢g d¢«      sJ ‚t        g g «      sJ ‚y ©Nrõ   )ri   ri   ri   )r   )r<   r=   s     r?   Útest_array_likez TestIsIsomorphic.test_array_likeU  s$   € ô šYª	Ô2Ð2Ð2Ü˜R Ô$Ð$Ñ$rA   c                 óˆ   — |j                  g d¢«      }|j                  g d¢«      }t        ||«      sJ ‚t        ||«      sJ ‚y r
  ©r7   r   ©r<   r=   ÚaÚbs       r?   Útest_is_isomorphic_1z%TestIsIsomorphic.test_is_isomorphic_1[  ó>   € à�J‰J’yÓ!ˆØ�J‰J’yÓ!ˆÜ˜Q Ô"Ð"Ð"Ü˜Q Ô"Ð"Ñ"rA   c                 óˆ   — |j                  g d¢«      }|j                  g d¢«      }t        ||«      sJ ‚t        ||«      sJ ‚y )N)r,   rÊ   r,   )ri   r‚   ri   r  r  s       r?   Útest_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2b  r  rA   c                 ód   — |j                  g «      }|j                  g «      }t        ||«      sJ ‚y r�   r  r  s       r?   Útest_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3i  s,   € à�J‰J�r‹NˆØ�J‰J�r‹NˆÜ˜Q Ô"Ð"Ñ"rA   c                 óˆ   — |j                  g d¢«      }|j                  g d¢«      }t        ||«      sJ ‚t        ||«      sJ ‚y )NrÁ   )r,   r‚   ri   r  r  s       r?   Útest_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4Ao  ó@   € ð �J‰J’yÓ!ˆØ�J‰J’yÓ!ˆÜ˜Q Ô"Ð"Ð"Ü˜Q Ô"Ð"Ñ"rA   c                 ó�   — |j                  g d¢«      }|j                  g d¢«      }t        ||«      du sJ ‚t        ||«      du sJ ‚y )N)r,   ri   r‚   r‚   )r,   r‚   ri   r‚   Fr  r  s       r?   Útest_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4Bw  sJ   € ð �J‰J’|Ó$ˆØ�J‰J’|Ó$ˆÜ˜Q Ó" eÑ+Ð+Ð+Ü˜Q Ó" eÑ+Ð+Ñ+rA   c                 óˆ   — |j                  g d¢«      }|j                  g d¢«      }t        ||«      sJ ‚t        ||«      sJ ‚y )N)rÊ   ri   r‚   )rÆ   r‚   ri   r  r  s       r?   Útest_is_isomorphic_4Cz&TestIsIsomorphic.test_is_isomorphic_4C  r  rA   c                 ó:   — dD ]  }| j                  d||¬«       Œ y )N©ri   r‚   r6   éè  ©r=   ©Úhelp_is_isomorphic_randperm©r<   r=   Úncs      r?   Útest_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5‡  s(   € ð ò 	>ˆBØ×,Ñ,¨T°2¸"Ð,Õ=ñ	>rA   c                 ó>   — dD ]  }| j                  d|dd|¬«       Œ y )Nr  r   Tr6   r!  r"  r$  s      r?   Útest_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6�  s.   € ð ò 	GˆBØ×,Ñ,¨T°2°t¸QÀ2Ð,ÕFñ	GrA   c                 ól   — |j                  g d¢«      }|j                  g d¢«      }t        ||«      rJ ‚y )NrÁ   rõ   r  r  s       r?   Útest_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7”  s1   € à�J‰J’yÓ!ˆØ�J‰J’yÓ!ˆÜ   AÔ&Ð&Ð&Ð&rA   c                óz  — t        d«      D �],  }t        j                  j                  |«      |z  j	                  t
        «      }t        j                  |j                  t
        ¬«      }t        j                  j                  |«      }	t        d|j                  d   «      D ]  }
|	||
      ||
<   Œ |r?t        j                  j                  |«      }||d| xx   dz  cc<   ||d| xx   |z  cc<   |j                  |«      }|j                  |«      }t        ||«      | k(  sJ ‚t        ||«      | k(  r�Œ-J ‚ y )Nr‚   r    r   r,   )Úrangerl   rm   ro   ÚastypeÚintrD   ÚsizeÚpermutationÚshaper7   r   )r<   ÚnobsÚ	nclustersÚnonisoÚnerrorsr=   Úkr  r  ÚPÚiÚQs               r?   r#  z,TestIsIsomorphic.help_is_isomorphic_randpermš  s  € ä�q“ó 	7ˆAÜ—‘—‘ Ó%¨	Ñ1×9Ñ9¼#Ó>ˆAÜ—‘˜Ÿ™¤sÔ+ˆAÜ—	‘	×%Ñ% iÓ0ˆAÜ˜1˜aŸg™g a™jÓ)ò �Ø˜˜1™‘w��!’ðáÜ—I‘I×)Ñ)¨$Ó/�Ø�!�A�g�,“ 1Ñ$“Ø�!�A�g�,“ 9Ñ,“Ø—
‘
˜1“ˆAØ—
‘
˜1“ˆAÜ   AÓ&¨v¨:Ò6Ð6Ð6Ü   AÓ&¨v¨:Ô6Ð6Ð6ñ	7rA   N)Fr   )r{   r|   r}   r/   r  r  r  r  r  r  r  r&  r(  r*  r#  r~   rA   r?   r  r  Q  sU   „ ñ ˜dØKôMñ%óMð%ò#ò#ò#ò#ò,ò#ò>òGò'ô7rA   r  c                   óª   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Z edd¬«      d	„ «       Z	 edd¬«      d
„ «       Z
 edd¬«      d„ «       Z edd¬«      d„ «       Zy)ÚTestIsValidLinkagec                 óB   — dD ]  \  }}}| j                  ||||«       Œ y ©N))ri   r6   F)ri   r‚   F)r,   rÇ   T)ri   rÇ   T)Ú#check_is_valid_linkage_various_size©r<   r=   ÚnrowÚncolÚvalids        r?   Ú"test_is_valid_linkage_various_sizez5TestIsValidLinkage.test_is_valid_linkage_various_size¯  s0   € ð">ò 	LÑˆD�$˜à×4Ñ4°T¸4ÀÈÕKñ	LrA   c                 óÂ   — |j                  g d¢g d¢g|j                  ¬«      }|d |…d |…f   }t        t        |«      |k(  «       |st	        t
        t        |d¬«       y y ©N)r   r,   r®   ri   r6   )r‚   ri   r¯   r‚   r‚   r    T©Úthrow)r7   r¢   r   r   r9   r:   )r<   r@  rA  rB  r=   rV   s         r?   r>  z6TestIsValidLinkage.check_is_valid_linkage_various_size´  sf   € à�J‰JÒ)Ú)ð+Ø24·*±*ð ó >ˆàˆeˆtˆe�U�d�Uˆl‰OˆÜÔ  Ó# uÑ,Ô-ÙÜœ*Ô&6¸ÀÖFð rA   c                 ó¤   — |j                  g d¢g d¢g|j                  ¬«      }t        t        |«      du «       t	        t
        t        |d¬«       y ©N©r   r,   r®   ri   ©r‚   ri   r¯   r‚   r    FTrF  )r7   Úint64r   r   r9   Ú	TypeError©r<   r=   rV   s      r?   Útest_is_valid_linkage_int_typez1TestIsValidLinkage.test_is_valid_linkage_int_type½  sH   € à�J‰JšÚ&ð(Ø/1¯x©xð ó 9ˆäÔ  Ó# uÐ,Ô-Ü”iÔ!1°1¸DÖArA   c                 ó˜   — |j                  d|j                  ¬«      }t        t        |«      du «       t	        t
        t        |d¬«       y ©N©r   rÇ   r    FTrF  )rD   r¢   r   r   r9   r:   rN  s      r?   Útest_is_valid_linkage_emptyz.TestIsValidLinkage.test_is_valid_linkage_emptyÄ  s:   € à�H‰H�V 2§:¡:ˆHÓ.ˆÜÔ  Ó# uÐ,Ô-Ü”jÔ"2°A¸TÖBrA   c                 óÜ   — t        ddd«      D ]\  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        t        |«      du «       Œ^ y ©NrÇ   é   r‚   r,   ri   T)r,  rl   rm   ro   r7   r
   r   r   ©r<   r=   r8  r>   rV   s        r?   Útest_is_valid_linkage_4_and_upz1TestIsValidLinkage.test_is_valid_linkage_4_and_upÊ  sb   € ô �q˜"˜a“ò 	1ˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAÜÔ$ QÓ'¨4Ð/Õ0ñ		1rA   ú	jax.numpyú)jax arrays do not support item assignment©r  c                 ó  — t        ddd«      D ]}  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }d||dz  df<   t        t        |«      du «       t        t        t        |d	¬
«       Œ y )NrÇ   rV  r‚   r,   ri   éþÿÿÿr   FTrF  ©
r,  rl   rm   ro   r7   r
   r   r   r9   r:   rW  s        r?   Ú-test_is_valid_linkage_4_and_up_neg_index_leftz@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_leftÓ  ó„   € ô
 �q˜"˜a“ò 	GˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAØˆAˆa�‰d�1ˆf‰IÜÔ$ QÓ'¨5Ð0Ô1Üœ*Ô&6¸ÀÖFñ	GrA   c                 ó  — t        ddd«      D ]}  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }d||dz  df<   t        t        |«      du «       t        t        t        |d¬	«       Œ y ©
NrÇ   rV  r‚   r,   ri   r]  FTrF  r^  rW  s        r?   Ú.test_is_valid_linkage_4_and_up_neg_index_rightzATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_rightà  r`  rA   c                 ó  — t        ddd«      D ]}  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }d||dz  df<   t        t        |«      du «       t        t        t        |d¬	«       Œ y ©
NrÇ   rV  r‚   r,   ri   g      à¿FTrF  r^  rW  s        r?   Ú'test_is_valid_linkage_4_and_up_neg_distz:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_distí  s„   € ô
 �q˜"˜a“ò 	GˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAØˆAˆa�‰d�1ˆf‰IÜÔ$ QÓ'¨5Ð0Ô1Üœ*Ô&6¸ÀÖFñ	GrA   c                 ó  — t        ddd«      D ]}  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }d||dz  df<   t        t        |«      du «       t        t        t        |d¬	«       Œ y rb  r^  rW  s        r?   Ú)test_is_valid_linkage_4_and_up_neg_countsz<TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_countsú  r`  rA   N)r{   r|   r}   rC  r>  rO  rS  rX  r/   r_  rc  rf  rh  r~   rA   r?   r;  r;  ¬  s§   „ òLò
GòBòCò1ñ �kØHôJñ	GóJð	Gñ �kØHôJñ	GóJð	Gñ �kØHôJñ	GóJð	Gñ �kØHôJñ	GóJñ	GrA   r;  c                   óŠ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Z edd¬«      d	„ «       Z	 edd¬«      d
„ «       Z
 edd¬«      d„ «       Zy)ÚTestIsValidInconsistentc                 ó¤   — |j                  g d¢g d¢g|j                  ¬«      }t        t        |«      du «       t	        t
        t        |d¬«       y rI  )r7   rL  r   r   r9   rM  ©r<   r=   ÚRs      r?   Útest_is_valid_im_int_typez1TestIsValidInconsistent.test_is_valid_im_int_type  sE   € à�J‰JšÚ&ð(Ø/1¯x©xð ó 9ˆä”˜A“ %Ð'Ô(Ü”i¤¨a°tÖ<rA   c                 óB   — dD ]  \  }}}| j                  ||||«       Œ y r=  )Úcheck_is_valid_im_various_sizer?  s        r?   Útest_is_valid_im_various_sizez5TestIsValidInconsistent.test_is_valid_im_various_size  s0   € ð">ò 	GÑˆD�$˜à×/Ñ/°°d¸EÀ2ÕFñ	GrA   c                 óÂ   — |j                  g d¢g d¢g|j                  ¬«      }|d |…d |…f   }t        t        |«      |k(  «       |st	        t
        t        |d¬«       y y rE  )r7   r¢   r   r   r9   r:   )r<   r@  rA  rB  r=   rm  s         r?   rp  z6TestIsValidInconsistent.check_is_valid_im_various_size  sc   € à�J‰JÒ)Ú)ð+Ø24·*±*ð ó >ˆàˆeˆtˆe�U�d�Uˆl‰OˆÜ”˜A“ %Ñ'Ô(ÙÜœ*¤k°1¸DÖAð rA   c                 ó˜   — |j                  d|j                  ¬«      }t        t        |«      du «       t	        t
        t        |d¬«       y rQ  )rD   r¢   r   r   r9   r:   rl  s      r?   Útest_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_empty   s7   € à�H‰H�V 2§:¡:ˆHÓ.ˆÜ”˜A“ %Ð'Ô(Ü”j¤+¨q¸Ö=rA   c                 óò   — t        ddd«      D ]g  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        |«      }t        t        |«      du «       Œi y rU  )	r,  rl   rm   ro   r7   r
   r   r   r   ©r<   r=   r8  r>   rV   rm  s         r?   Útest_is_valid_im_4_and_upz1TestIsValidInconsistent.test_is_valid_im_4_and_up&  si   € ô �q˜"˜a“ò 	,ˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAÜ˜Q“ˆAÜ”K “N dÐ*Õ+ñ	,rA   rY  rZ  r[  c                 ó4  — t        ddd«      D ]ˆ  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        |«      }d||dz  df<   t        t        |«      du «       t        t        t        |d	¬
«       ŒŠ y )NrÇ   rV  r‚   r,   ri   ç       Àr   FTrF  ©r,  rl   rm   ro   r7   r
   r   r   r   r9   r:   rv  s         r?   Ú(test_is_valid_im_4_and_up_neg_index_leftz@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_left0  óŠ   € ô �q˜"˜a“ò 	BˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAÜ˜Q“ˆAØˆAˆa�‰d�1ˆf‰IÜ”K “N eÐ+Ô,Üœ*¤k°1¸DÖAñ	BrA   c                 ó4  — t        ddd«      D ]ˆ  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        |«      }d||dz  df<   t        t        |«      du «       t        t        t        |d¬	«       ŒŠ y )
NrÇ   rV  r‚   r,   ri   ry  FTrF  rz  rv  s         r?   Ú)test_is_valid_im_4_and_up_neg_index_rightzATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_right=  r|  rA   c                 ó4  — t        ddd«      D ]ˆ  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        |«      }d||dz  df<   t        t        |«      du «       t        t        t        |d¬	«       ŒŠ y re  rz  rv  s         r?   Ú"test_is_valid_im_4_and_up_neg_distz:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distJ  r|  rA   N)r{   r|   r}   rn  rq  rp  rt  rw  r/   r{  r~  r€  r~   rA   r?   rj  rj    sz   „ ò=òGò
Bò>ò,ñ �kÐ*UÔVñ
Bó Wð
Bñ �kÐ*UÔVñ
Bó Wð
Bñ �kÐ*UÔVñ
Bó Wñ
BrA   rj  c                   óT   — e Zd Z ed¬«      d„ «       Zd„ Zd„ Z ed¬«      d„ «       Zy)ÚTestNumObsLinkageTr2   c                 óh   — |j                  d|j                  ¬«      }t        t        t        |«       y ©NrR  r    )rD   r¢   r9   r:   r   rN  s      r?   Útest_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_emptyZ  s&   € ð �H‰H�V 2§:¡:ˆHÓ.ˆÜ”j¤/°1Õ5rA   c                 ón   — |j                  g d¢g|j                  ¬«      }t        t        |«      d«       y )NrJ  r    ri   ©r7   r¢   r   r   rN  s      r?   Útest_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4`  s*   € à�J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ”_ QÓ'¨Õ+rA   c                 ót   — |j                  g d¢g d¢g|j                  ¬«      }t        t        |«      d«       y )NrJ  rK  r    r‚   r‡  rN  s      r?   Útest_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4e  s5   € à�J‰JšÚ&ð(Ø/1¯z©zð ó ;ˆä”_ QÓ'¨Õ+rA   c                 óÚ   — t        ddd«      D ][  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        t        |«      |«       Œ] y )NrÇ   rV  r‚   r,   ri   )r,  rl   rm   ro   r7   r
   r   r   rW  s        r?   Útest_num_obs_linkage_4_and_upz/TestNumObsLinkage.test_num_obs_linkage_4_and_upk  s^   € ô �q˜"˜a“ò 	0ˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAÜœ¨Ó+¨QÕ/ñ		0rA   N)r{   r|   r}   r/   r…  rˆ  rŠ  rŒ  r~   rA   r?   r‚  r‚  X  s<   „ á˜tÔ$ñ6ó %ð6ò
,ò
,ñ ˜tÔ$ñ0ó %ñ0rA   r‚  c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestLeavesListc                 óŒ   — |j                  g d¢g|j                  ¬«      }t        |«       t        t	        |«      ddgd¬«       y )NrJ  r    r   r,   rj   rÂ   ©r7   r¢   r   r   r   rN  s      r?   Útest_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4y  s6   € à�J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ�Œ
Üœ A›¨¨A¨°UÖ;rA   c                 ó’   — |j                  g d¢g d¢g|j                  ¬«      }t        |«       t        t	        |«      g d¢d¬«       y )NrJ  rK  r    )r   r,   ri   rj   rÂ   r�  rN  s      r?   Útest_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4  s=   € à�J‰JšÚ&ð(Ø/1¯z©zð ó ;ˆä�Œ
Üœ A›ª	¸Ö>rA   c                 ó6   — dD ]  }| j                  ||«       Œ y r…   )Úcheck_leaves_list_QrK   s      r?   Útest_leaves_list_Qz!TestLeavesList.test_leaves_list_Q†  s#   € ð)ò 	1ˆFà×$Ñ$ V¨RÕ0ñ	1rA   c                 óº   — |j                  t        j                  «      }t        ||«      }t	        |«      }t        |j                  «       t        |«      d¬«       y )Nrj   rÂ   )r7   r-   rã   r
   r   r   Ú	pre_orderr   )r<   rL   r=   rc   rV   Únodes         r?   r•  z"TestLeavesList.check_leaves_list_Q‹  sC   € à�J‰JÔ*×.Ñ.Ó/ˆÜ�A�vÓˆÜ�q‹zˆÜ˜Ÿ™Ó(¬+°a«.¸uÖErA   c                 ó  — |j                  t        j                  «      }t        |d«      }t	        |«      }t        |j                  «       |j                  «       j                  «       |j                  «       j                  «       z   d¬«       y )Nr   rj   rÂ   )	r7   r-   rã   r
   r   r   r˜  Úget_leftÚ	get_right)r<   r=   rc   rV   r™  s        r?   Útest_Q_subtree_pre_orderz'TestLeavesList.test_Q_subtree_pre_order’  sj   € à�J‰JÔ*×.Ñ.Ó/ˆÜ�A�xÓ ˆÜ�q‹zˆÜ˜Ÿ™Ó(¨4¯=©=«?×+DÑ+DÓ+FØ-1¯^©^Ó-=×-GÑ-GÓ-Iñ,Jà"ö	$rA   N)r{   r|   r}   r‘  r“  r–  r•  r�  r~   rA   r?   rŽ  rŽ  v  s   „ ò<ò?ò1ò
Fó$rA   rŽ  c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestCorrespondc                 ó¤   — |j                  d|j                  ¬«      }|j                  d|j                  ¬«      }t        t        t        ||«       y )NrC   r    rR  )rD   r¢   r9   r:   r   rö   s       r?   Útest_correspond_emptyz$TestCorrespond.test_correspond_emptyŸ  s<   € à�H‰H�T §¡ˆHÓ,ˆØ�H‰H�U "§*¡*ˆHÓ-ˆÜ”j¤*¨a°Õ3rA   c                 ó®  — t        dd«      D ][  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        t        ||«      «       Œ] t        ddd«      D ][  }t        j                  j                  ||dz
  z  dz  «      }|j	                  |«      }t        |«      }t        t        ||«      «       Œ] y )Nri   rÇ   r,   rV  r‚   )r,  rl   rm   ro   r7   r
   r   r   rW  s        r?   Útest_correspond_2_and_upz'TestCorrespond.test_correspond_2_and_up¥  s¸   € ô �q˜!“ò 	&ˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAÜ”J˜q !Ó$Õ%ð		&ô
 �q˜"˜a“ò 	&ˆAÜ—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAÜ”J˜q !Ó$Õ%ñ		&rA   c                 óJ  — t        t        t        t        dd«      «      t        t        dd«      «      «      «      t        t        t        t        dd«      «      t        t        dd«      «      «      «      z   D ]©  \  }}t        j                  j                  ||dz
  z  dz  «      }t        j                  j                  ||dz
  z  dz  «      }|j                  |«      }|j                  |«      }t        |«      }t        |«      }t        ||«      rJ ‚t        ||«      sŒ©J ‚ y )Nri   rÇ   r‚   r6   r,   ©	ÚlistÚzipr,  rl   rm   ro   r7   r
   r   ©r<   r=   r8  Újr>   Úy2rV   ÚZ2s           r?   Útest_correspond_4_and_upz'TestCorrespond.test_correspond_4_and_up³  sì   € ô œC¤¤U¨1¨a£[Ó 1´4¼¸aÀ»Ó3DÓEÓFÜœC¤¤U¨1¨a£[Ó 1´4¼¸aÀ»Ó3DÓEÓFñGò 		)‰FˆQ�ä—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAÜ—‘—‘  1 Q¡3¡¨¡
Ó+ˆBØ—
‘
˜1“ˆAØ—‘˜B“ˆBÜ˜“
ˆAÜ˜“ˆBÜ! ! RÔ(Ð(Ð(Ü! " aÕ(Ð(Ð(ñ		)rA   c                 óJ  — t        t        t        t        dd«      «      t        t        dd«      «      «      «      t        t        t        t        dd«      «      t        t        dd«      «      «      «      z   D ]©  \  }}t        j                  j                  ||dz
  z  dz  «      }t        j                  j                  ||dz
  z  dz  «      }|j                  |«      }|j                  |«      }t        |«      }t        |«      }t        ||«      rJ ‚t        ||«      sŒ©J ‚ y )Nri   rÊ   é   é   r,   r¥  r¨  s           r?   Útest_correspond_4_and_up_2z)TestCorrespond.test_correspond_4_and_up_2Á  sì   € ô œC¤¤U¨1¨a£[Ó 1´4¼¸bÀ"»Ó3FÓGÓHÜœC¤¤U¨1¨a£[Ó 1´4¼¸bÀ"»Ó3FÓGÓHñIò 		)‰FˆQ�ä—	‘	—‘˜q ! A¡#™w¨™zÓ*ˆAÜ—‘—‘  1 Q¡3¡¨¡
Ó+ˆBØ—
‘
˜1“ˆAØ—‘˜B“ˆBÜ˜“
ˆAÜ˜“ˆBÜ! ! RÔ(Ð(Ð(Ü! " aÕ(Ð(Ð(ñ		)rA   c                 óÞ   — t        dd«      D ]^  }t        j                  j                  |d«      }t	        |«      }|j                  |«      }t        |«      }t        t        |«      |«       Œ` y )Nri   rË   rÇ   )	r,  rl   rm   ro   r%   r7   r
   r   r   )r<   r=   rr   rc   r   rV   s         r?   Ú!test_num_obs_linkage_multi_matrixz0TestCorrespond.test_num_obs_linkage_multi_matrixÏ  sY   € ä�q˜"“ò 	0ˆAÜ—	‘	—‘˜q !Ó$ˆAÜ�a“ˆAØ—
‘
˜1“ˆAÜ˜“
ˆAÜœ¨Ó+¨QÕ/ñ	0rA   N)r{   r|   r}   r¡  r£  r¬  r°  r²  r~   rA   r?   rŸ  rŸ  œ  s   „ ò4ò&ò)ò)ó0rA   rŸ  c                   óh   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Z ed
d¬«      d„ «       Zd„ Zy)ÚTestIsMonotonicc                 óh   — |j                  d|j                  ¬«      }t        t        t        |«       y r„  )rD   r¢   r9   r:   r   rN  s      r?   Útest_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_emptyÜ  s$   € à�H‰H�V 2§:¡:ˆHÓ.ˆÜ”j¤,°Õ2rA   c                 ó^   — |j                  g d¢g|j                  ¬«      }t        |«      sJ ‚y )N©r   r,   ç333333Ó?ri   r    ©r7   r¢   r   rN  s      r?   Útest_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4á  s'   € à�J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ˜AŒÐ‰rA   c                 ód   — |j                  g d¢g d¢g|j                  ¬«      }t        |«      sJ ‚y )Nr¸  )ri   r‚   çš™™™™™Ù?r‚   r    rº  rN  s      r?   Útest_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_Tæ  s2   € à�J‰JšÚ&ð(Ø/1¯z©zð ó ;ˆä˜AŒÐ‰rA   c                 ód   — |j                  g d¢g d¢g|j                  ¬«      }t        |«      rJ ‚y )N)r   r,   r½  ri   )ri   r‚   r¹  r‚   r    rº  rN  s      r?   Útest_is_monotonic_2x4_Fz'TestIsMonotonic.test_is_monotonic_2x4_Fì  s5   € à�J‰JšÚ&ð(Ø/1¯z©zð ó ;ˆä ”?Ð"Ð"�?rA   c                 ój   — |j                  g d¢g d¢g d¢g|j                  ¬«      }t        |«      sJ ‚y )Nr¸  ©ri   r‚   r½  ri   ©rÇ   r6   g333333ã?rÇ   r    rº  rN  s      r?   Útest_is_monotonic_3x4_Tz'TestIsMonotonic.test_is_monotonic_3x4_Tò  s7   € à�J‰JšÚ&Ú&ð(à/1¯z©zð ó ;ˆô ˜AŒÐ‰rA   c                 ój   — |j                  g d¢g d¢g d¢g|j                  ¬«      }t        |«      rJ ‚y )Nr¸  )ri   r‚   çš™™™™™É?ri   rÃ  r    rº  rN  s      r?   Útest_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1ù  ó:   € à�J‰JšÚ&Ú&ð(à/1¯z©zð ó ;ˆô   ”?Ð"Ð"�?rA   c                 ój   — |j                  g d¢g d¢g d¢g|j                  ¬«      }t        |«      rJ ‚y )N)r   r,   gš™™™™™é?ri   rÂ  rÃ  r    rº  rN  s      r?   Útest_is_monotonic_3x4_F2z(TestIsMonotonic.test_is_monotonic_3x4_F2   rÈ  rA   c                 ój   — |j                  g d¢g d¢g d¢g|j                  ¬«      }t        |«      rJ ‚y )Nr¸  rÂ  )rÇ   r6   rÆ  rÇ   r    rº  rN  s      r?   Útest_is_monotonic_3x4_F3z(TestIsMonotonic.test_is_monotonic_3x4_F3  rÈ  rA   c                 óp   — t        |j                  t        j                  «      d«      }t	        |«      sJ ‚y ©Nr   ©r
   r7   r-   rT   r   rN  s      r?   Ú test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1  s,   € ô �B—J‘JÔ2×9Ñ9Ó:¸HÓEˆÜ˜AŒÐ‰rA   rY  rZ  r[  c                 óz   — t        |j                  t        j                  «      d«      }d|d<   t	        |«      rJ ‚y )Nr   r5   )ri   ri   rÏ  rN  s      r?   Ú test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2  s8   € ô �B—J‘JÔ2×9Ñ9Ó:¸HÓEˆØˆˆ#‰Ü ”?Ð"Ð"�?rA   c                 ót   — |j                  t        j                  «      }t        |d«      }t	        |«      sJ ‚y rÎ  )r7   r-   rã   r
   r   )r<   r=   rc   rV   s       r?   Útest_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkage  s1   € ð �J‰JÔ*×.Ñ.Ó/ˆÜ�A�xÓ ˆÜ˜AŒÐ‰rA   N)r{   r|   r}   r¶  r»  r¾  rÀ  rÄ  rÇ  rÊ  rÌ  rÐ  r/   rÒ  rÔ  r~   rA   r?   r´  r´  Ù  sQ   „ ò3ò
ò
ò#òò#ò#ò#òñ �kÐ*UÔVñ#ó Wð#órA   r´  c                   óX   — e Zd Zd„ Z edd¬«      d„ «       Z edd¬«      d„ «       Zd„ Zy)	ÚTestMaxDistsc                 óh   — |j                  d|j                  ¬«      }t        t        t        |«       y r„  )rD   r¢   r9   r:   r   rN  s      r?   Útest_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkage'  s$   € à�H‰H�V 2§:¡:ˆHÓ.ˆÜ”j¤(¨AÕ.rA   rY  rZ  r[  c                 óŽ   — |j                  g d¢g|j                  ¬«      }t        |«      }t        ||«      }t	        ||d¬«       y )N©r   r,   r¹  rÇ   r    rj   rQ   )r7   r¢   r   Úcalculate_maximum_distancesr(   )r<   r=   rV   ÚMDÚ
expectedMDs        r?   Ú!test_maxdists_one_cluster_linkagez.TestMaxDists.test_maxdists_one_cluster_linkage,  s>   € ð �J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ�a‹[ˆÜ0°°BÓ7ˆ
Ü˜˜J¨UÖ3rA   c                 ó6   — dD ]  }| j                  ||«       Œ y ©N©r   rG   r[   rY   rZ   )Úcheck_maxdists_Q_linkagerK   s      r?   Útest_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage4  s!   € àJò 	6ˆFØ×)Ñ)¨&°"Õ5ñ	6rA   c                 ó¤   — |j                  t        j                  «      }t        ||«      }t	        |«      }t        ||«      }t        ||d¬«       y )Nrj   rQ   )r7   r-   rã   r
   r   rÛ  r(   )r<   rL   r=   rc   rV   rÜ  rÝ  s          r?   râ  z%TestMaxDists.check_maxdists_Q_linkage9  sD   € à�J‰JÔ*×.Ñ.Ó/ˆÜ�A�vÓˆÜ�a‹[ˆÜ0°°BÓ7ˆ
Ü˜˜J¨UÖ3rA   N)r{   r|   r}   rØ  r/   rÞ  rã  râ  r~   rA   r?   rÖ  rÖ  $  sF   „ ò/ñ
 �kÐ*UÔVñ4ó Wð4ñ �kÐ*UÔVñ6ó Wð6ó4rA   rÖ  c                   óz   — e Zd Z ed¬«      d„ «       Zd„ Z eddd¬«      d„ «       Z eddd¬«      d	„ «       Zd
„ Zy)ÚTestMaxInconstsTr2   c                 ó¤   — |j                  d|j                  ¬«      }|j                  d|j                  ¬«      }t        t        t        ||«       y r„  )rD   r¢   r9   r:   r   ©r<   r=   rV   rm  s       r?   Útest_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkageD  s>   € ð �H‰H�V 2§:¡:ˆHÓ.ˆØ�H‰H�V 2§:¡:ˆHÓ.ˆÜ”j¤+¨q°!Õ4rA   c                 óÒ   — |j                  g d¢g|j                  ¬«      }t        j                  j	                  dd«      }|j                  |«      }t        t        t        ||«       y ©NrÚ  r    ri   rÇ   )r7   r¢   rl   rm   ro   r9   r:   r   rè  s       r?   Útest_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkageK  sL   € ð �J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ�I‰I�N‰N˜1˜aÓ ˆØ�J‰J�q‹MˆÜ”j¤+¨q°!Õ4rA   rY  rZ  ©r  r3   c                 óÔ   — |j                  g d¢g|j                  ¬«      }|j                  g d¢g|j                  ¬«      }t        ||«      }t        |||¬«      }t	        ||d¬«       y )NrÚ  r    ©r   r   r   r¹  r!  rj   rQ   )r7   r¢   r   Ú!calculate_maximum_inconsistenciesr(   )r<   r=   rV   rm  rÜ  rÝ  s         r?   Ú$test_maxinconsts_one_cluster_linkagez4TestMaxInconsts.test_maxinconsts_one_cluster_linkageS  s\   € ð �J‰JšÐ'¨r¯z©zˆJÓ:ˆØ�J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ˜˜AÓˆÜ6°q¸!ÀÔCˆ
Ü˜˜J¨UÖ3rA   c                 ó6   — dD ]  }| j                  ||«       Œ y rà  )Úcheck_maxinconsts_Q_linkagerK   s      r?   Útest_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkage]  s$   € ð Kò 	9ˆFØ×,Ñ,¨V°RÕ8ñ	9rA   c                 óÀ   — |j                  t        j                  «      }t        ||«      }t	        |«      }t        ||«      }t        |||¬«      }t        ||d¬«       y )Nr!  rj   rQ   )r7   r-   rã   r
   r   r   rð  r(   )r<   rL   r=   rc   rV   rm  rÜ  rÝ  s           r?   ró  z+TestMaxInconsts.check_maxinconsts_Q_linkagec  sR   € à�J‰JÔ*×.Ñ.Ó/ˆÜ�A�vÓˆÜ˜‹OˆÜ˜˜AÓˆÜ6°q¸!ÀÔCˆ
Ü˜˜J¨UÖ3rA   N)	r{   r|   r}   r/   ré  rì  rñ  rô  ró  r~   rA   r?   ræ  ræ  B  se   „ á˜tÔ$ñ5ó %ð5ò5ñ �kÐ*UØ#ô%ñ4ó%ð4ñ �kÐ*UØ#ô%ñ9ó%ð9ó4rA   ræ  c                   ó˜   — e Zd Zd„ Zd„ Z ed¬«      d„ «       Zd„ Zd„ Zd„ Z	 ed	d
d¬«      d„ «       Z
d„ Z ed	d
d¬«      d„ «       Zd„ Zy)ÚTestMaxRStatc                 ó6   — dD ]  }| j                  ||«       Œ y )N)gffffff
@r‰   rÇ   )Úcheck_maxRstat_invalid_index©r<   r=   r8  s      r?   Útest_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_indexo  s!   € Øò 	5ˆAØ×-Ñ-¨a°Õ4ñ	5rA   c                 ó  — |j                  g d¢g|j                  ¬«      }|j                  g d¢g|j                  ¬«      }t        |t        «      rt	        t
        t        |||«       y t	        t        t        |||«       y )NrÚ  r    rï  )r7   r¢   Ú
isinstancer.  r9   r:   r   rM  ©r<   r8  r=   rV   rm  s        r?   rù  z)TestMaxRStat.check_maxRstat_invalid_indexs  s^   € à�J‰JšÐ'¨r¯z©zˆJÓ:ˆØ�J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ�aœÔÜœ*¤h°°1°aÕ8äœ)¤X¨q°!°QÕ7rA   Tr2   c                 óH   — t        d«      D ]  }| j                  ||«       Œ y ©NrÇ   )r,  Úcheck_maxRstat_empty_linkagerú  s      r?   Útest_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkage|  s%   € ä�q“ò 	5ˆAØ×-Ñ-¨a°Õ4ñ	5rA   c                 ó¦   — |j                  d|j                  ¬«      }|j                  d|j                  ¬«      }t        t        t        |||«       y r„  )rD   r¢   r9   r:   r   rþ  s        r?   r  z)TestMaxRStat.check_maxRstat_empty_linkage�  s>   € à�H‰H�V 2§:¡:ˆHÓ.ˆØ�H‰H�V 2§:¡:ˆHÓ.ˆÜ”j¤(¨A¨q°!Õ4rA   c                 óH   — t        d«      D ]  }| j                  ||«       Œ y r   )r,  Úcheck_maxRstat_difrow_linkagerú  s      r?   Útest_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkage‡  s%   € Ü�q“ò 	6ˆAØ×.Ñ.¨q°"Õ5ñ	6rA   c                 óÔ   — |j                  g d¢g|j                  ¬«      }t        j                  j	                  dd«      }|j                  |«      }t        t        t        |||«       y rë  )r7   r¢   rl   rm   ro   r9   r:   r   rþ  s        r?   r  z*TestMaxRStat.check_maxRstat_difrow_linkage‹  sN   € ð �J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ�I‰I�N‰N˜1˜aÓ ˆØ�J‰J�q‹MˆÜ”j¤(¨A¨q°!Õ4rA   rY  rZ  rí  c                 óH   — t        d«      D ]  }| j                  ||«       Œ y r   )r,  Ú"check_maxRstat_one_cluster_linkagerú  s      r?   Ú!test_maxRstat_one_cluster_linkagez.TestMaxRStat.test_maxRstat_one_cluster_linkage“  s'   € ô �q“ò 	;ˆAØ×3Ñ3°A°rÕ:ñ	;rA   c                 óÖ   — |j                  g d¢g|j                  ¬«      }|j                  g d¢g|j                  ¬«      }t        ||d«      }t        ||d|«      }t	        ||d¬«       y )NrÚ  r    rï  r,   rj   rQ   )r7   r¢   r   rð  r(   )r<   r8  r=   rV   rm  rÜ  rÝ  s          r?   r	  z/TestMaxRStat.check_maxRstat_one_cluster_linkage™  s^   € à�J‰JšÐ'¨r¯z©zˆJÓ:ˆØ�J‰JšÐ'¨r¯z©zˆJÓ:ˆÜ�a˜˜AÓˆÜ6°q¸!¸QÀÓCˆ
Ü˜˜J¨UÖ3rA   c                 óX   — dD ]%  }t        d«      D ]  }| j                  |||«       Œ Œ' y )Nrá  rÇ   )r,  Úcheck_maxRstat_Q_linkage)r<   r=   rL   r8  s       r?   Útest_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkage¡  s9   € ð Kò 	=ˆFÜ˜1“Xò =�Ø×-Ñ-¨f°a¸Õ<ñ=ñ	=rA   c                 óÂ   — |j                  t        j                  «      }t        ||«      }t	        |«      }t        ||d«      }t        ||d|«      }t        ||d¬«       y )Nr,   rj   rQ   )r7   r-   rã   r
   r   r   rð  r(   )	r<   rL   r8  r=   rc   rV   rm  rÜ  rÝ  s	            r?   r  z%TestMaxRStat.check_maxRstat_Q_linkage¨  sV   € à�J‰JÔ*×.Ñ.Ó/ˆÜ�A�vÓˆÜ˜‹OˆÜ�a˜˜AÓˆÜ6°q¸!¸QÀÓCˆ
Ü˜˜J¨UÖ3rA   N)r{   r|   r}   rû  rù  r/   r  r  r  r  r
  r	  r  r  r~   rA   r?   r÷  r÷  m  s€   „ ò5ò8ñ ˜tÔ$ñ5ó %ð5ò5ò6ò5ñ �kÐ*UØ#ô%ñ;ó%ð;ò4ñ �kÐ*UØ#ô%ñ=ó%ð=ó
4rA   r÷  c                   óf  — e Zd Zd„ Zd„ Zd„ Zej                  j                  e	 d¬«      d„ «       Z
 edd¬«      ej                  j                  e	 d¬«      d	„ «       «       Zd
„ Z edd¬«      ej                  j                  e	 d¬«      d„ «       «       Zej                  d„ «       Zd„ Zd„ Zd„ Zy)ÚTestDendrogramc                 ó–   — t        |j                  t        j                  «      d«      }t	        |d¬«      }|d   }t        |g d¢«       y )Nr   T©Úno_plotÚleaves©ri   r6   r,   r   r‚   rÇ   )r
   r7   r-   rT   r   r   )r<   r=   rV   rm  r  s        r?   Ú$test_dendrogram_single_linkage_tdistz3TestDendrogram.test_dendrogram_single_linkage_tdistµ  s>   € ä�B—J‘JÔ2×9Ñ9Ó:¸HÓEˆÜ�q $Ô'ˆØ�8‘ˆÜ�VÒ/Õ0rA   c                 ó„   — t        |j                  t        j                  «      d«      }t	        t
        t        |d¬«       y )Nr   Úfoo©Úorientation)r
   r7   r-   rT   r9   r:   r   rN  s      r?   Útest_valid_orientationz%TestDendrogram.test_valid_orientation¼  s,   € Ü�B—J‘JÔ2×9Ñ9Ó:¸HÓEˆÜ”j¤*¨a¸UÖCrA   c                 óÂ   — t        |j                  t        j                  «      d«      }g d¢}t	        ||j                  |«      d¬«      }t	        ||d¬«      }||k(  sJ ‚y )Nr   )r,   r‚   ri   rÆ   rÇ   r6   T)Úlabelsr  )r
   r7   r-   rT   r   )r<   r=   rV   r  Úresult1Úresult2s         r?   Útest_labels_as_array_or_listz+TestDendrogram.test_labels_as_array_or_listÀ  sV   € ä�B—J‘JÔ2×9Ñ9Ó:¸HÓEˆÚ#ˆÜ˜Q r§z¡z°&Ó'9À4ÔHˆÜ˜Q v°tÔ<ˆØ˜'Ò!Ð!Ñ!rA   zno matplotlibr[  c           	      óÎ  — |j                  g d¢g d¢g d¢g«      }t        j                  «        t        j                  t
        «      5 }t        |t        t        d«      «      ¬«       d d d «       dt        j                  «      v sJ ‚t        j                  t
        d¬«      5  t        |g ¬«       d d d «       t        j                  «        y # 1 sw Y   ŒhxY w# 1 sw Y   Œ*xY w)N)r   r,   r«   rÇ   )ri   r‚   r«   r6   )rÇ   r6   r¬   rÆ   éd   )r  z.Dimensions of Z and labels must be consistent.r·   )r7   ÚpltÚfigurer¹   r   r:   r   r¦  r,  ÚstrÚvalueÚclose)r<   r=   ÚlinkÚexc_infos       r?   Útest_valid_label_sizez$TestDendrogram.test_valid_label_sizeÈ  s¾   € à�z‰zÚÚÚð
ó ˆô
 	�
‰
ŒÜ�]‰]œ:Ó&ð 	6¨(Ü�t¤D¬¨s«Ó$4Õ5÷	6à?Ü�h—n‘nÓ%ñ&ð 	&ð &ô �]‰]ÜØFôHñ 	(ô �t BÕ'÷	(ô
 	�	‰	�÷	6ð 	6ú÷
	(ð 	(ús   Á CÂ$CÃCÃC$ÚtorchzFMPL 3.9.2 & torch DeprecationWarning from __array_wrap__ and NumPy 2.0c                 ó6   — dD ]  }| j                  ||«       Œ y )N)ÚtopÚbottomÚleftÚright)Úcheck_dendrogram_plot)r<   r=   r  s      r?   Útest_dendrogram_plotz#TestDendrogram.test_dendrogram_plotÜ  s#   € ð >ò 	8ˆKØ×&Ñ& {°BÕ7ñ	8rA   c                 óH  — t        |j                  t        j                  «      d«      }g d¢g d¢g d¢g d¢g d¢g d¢gg d¢g d	¢g d
¢g d¢g d¢gg d¢g d¢g d¢dœ}t	        j
                  «       }|j                  d«      }t        |||¬«      }t        j                  |d   «      |d<   t        ||«       t        |||dd¬«       |dv r|j                  «       d   n|j                  «       d   }t        |j                  «       d«       t        |j                  «       d«       t        |||d¬«       |dv r|j                  «       d   n|j                  «       d   }t        |j                  «       d«       t        |||d¬«       |dv r|j                  «       d   n|j                  «       d   }t        |j                  «       d«       t	        j                  «        t        ||¬«      }	t	        j                  «        t        j                  |	d   «      |	d<   t        |	|«       y )Nr   )ÚC1ÚC0r6  r6  r6  ©r5   rÌ   rÌ   r5   )r5   rÍ   rÍ   r5   )r5   rÎ   rÎ   rÍ   ©r5   rÏ   rÏ   rÎ   ©rÌ   rÐ   rÐ   rÏ   ©r°   r°   r¶   r¶   )ç     €F@r;  ç     €K@r<  )ç     €A@r=  ç      I@r>  )ç      9@r?  ç     @E@r@  )rµ   rµ   ç     à@@rA  )Ú2Ú5Ú1Ú0Ú3Ú4r  )r5  r5  r6  r6  r6  r6  ©Ú
color_listÚdcoordÚicoordÚivlr  Úleaves_color_listéÝ   )Úaxr  rJ  rh   éZ   )rO  r  Úleaf_font_sizeÚleaf_rotation)r.  r/  r   )rO  r  rR  )rO  r  rQ  r  )r
   r7   r-   rT   r$  r%  Úadd_subplotr   rl   r   Úget_xticklabelsÚget_yticklabelsÚget_rotationÚget_sizer(  )
r<   r  r=   rV   ÚexpectedÚfigrO  ÚR1Ú	testlabelÚR2s
             r?   r2  z$TestDendrogram.check_dendrogram_plotå  s  € ä�B—J‘JÔ2×9Ñ9Ó:¸HÓEˆÚ"@Ú7Ú7Ú9Ú9Ú;ð	=ò
  6Ú7Ú7Ú7Ú9ð	;ò
 :Ú0Ú)Mñˆô  �j‰j‹lˆØ�_‰_˜SÓ!ˆô ˜˜b¨kÔ:ˆÜ—z‘z " X¡,Ó/ˆˆ8‰Ü�R˜Ô"ô 	�1˜¨Ø"$°Bõ	8ð Ð/Ñ/ð ×ÑÓ  Ò#à×#Ñ#Ó% aÑ(ð 	ô
 	�Y×+Ñ+Ó-¨rÔ2Ü�Y×'Ñ'Ó)¨2Ô.Ü�1˜¨Ø!#õ	%ð Ð/Ñ/ð ×ÑÓ  Ò#à×#Ñ#Ó% aÑ(ð 	ô
 	�Y×+Ñ+Ó-¨rÔ2Ü�1˜¨Ø"$õ	&ð Ð/Ñ/ð ×ÑÓ  Ò#à×#Ñ#Ó% aÑ(ð 	ô
 	�Y×'Ñ'Ó)¨2Ô.Ü�	‰	Œô ˜ {Ô3ˆÜ�	‰	ŒÜ—z‘z " X¡,Ó/ˆˆ8‰Ü�R˜Õ"rA   c           
      óô  — t        |j                  t        j                  «      d«      }t	        |ddd¬«      }t        j                  «        t        j                  |d   «      |d<   t        |dgg d¢gg d	¢gd
dgddgddgdœ«       t	        |ddd¬«      }t        j                  «        t        j                  |d   «      |d<   t        |g d¢g d¢g d¢g d¢g d¢gg d	¢g d¢g d¢g d¢gg d¢g d¢g d¢dœ«       y )Nr   ri   ÚlastpT)Úshow_contractedrJ  r6  )r5   rÐ   rÐ   r5   r:  ú(2)z(4)rÆ   rÉ   rH  Úmtica)r5  r6  r6  r6  r7  )r5   rÎ   rÎ   r5   r8  r9  )r=  r=  r;  r;  )r?  r?  ç      D@rb  )rµ   rµ   ç     @@@rc  )rB  rC  rD  rE  r`  )ri   r6   r,   r   rÊ   )r5  r5  r6  r6  r6  )	r
   r7   r-   rT   r   r$  r(  rl   r   rè  s       r?   Útest_dendrogram_truncate_modez,TestDendrogram.test_dendrogram_truncate_mode#  sö   € ô �B—J‘JÔ2×9Ñ9Ó:¸HÓEˆä�q˜!˜W°dÔ;ˆÜ�	‰	ŒÜ—j‘j  8¡Ó-ˆˆ(‰Ü�Q¨ vÚ$<Ð#=Ú$:Ð#;Ø!&¨ Ø$% q 6Ø/3°T¨lñô 	ô �q˜!˜W°dÔ;ˆÜ�	‰	ŒÜ—j‘j  8¡Ó-ˆˆ(‰Ü�QÒ'?Ú$<Ú$<Ú$>Ú$@ð$Bò %;Ú$<Ú$<Ú$<ð$>ò !<Ú#2Ú.Lñõ 	rA   c                 ó   — t        «       S r�   r*   )r<   s    r?   Údendrogram_lockzTestDendrogram.dendrogram_lockG  s	   € ä‹vˆrA   c                 ó  — t        |j                  t        j                  «      d«      }|5  t	        g d¢«       t        |ddd¬«      }t	        g d¢«       |d   }t        |g d	¢«       t	        d «       d d d «       y # 1 sw Y   y xY w)
Nr   )r§   Úmr>   r6  TÚgéú   )r  Úabove_threshold_colorÚcolor_threshold)ri  Úrr§   rh  r>   r6  rI  )r§   rh  ri  ri  ri  )r
   r7   r-   rT   r   r   r   )r<   r=   rf  rV   rm  rI  s         r?   Útest_dendrogram_colorsz%TestDendrogram.test_dendrogram_colorsK  sz   € ä�B—J‘JÔ2×9Ñ9Ó:¸HÓEˆàñ 	)ä"Ò#7Ô8Ü˜1 dØ.1À3ôHˆAä"Ò#AÔBà˜<™ˆJÜ˜Ò%>Ô?ô # 4Ô(÷	)÷ 	)ñ 	)ús   ¬AA=Á=Bc           	      ó¦   — |j                  g d¢g d¢g d¢g d¢g d¢g d¢g«      }t        |d«      }t        |d¬«      }g d¢}|d	   }t        ||«       y )
N©r,   r   r   ©r   r   r,   ©r   ri   r   ©r   r,   r   r   Tr  ©r6  r5  r5  r6  ÚC2ru  rM  ©r7   r
   r   r   ©r<   r=   ÚxÚzrs   Ú
exp_colorsÚcolorss          r?   Ú%test_dendrogram_leaf_colors_zero_distz4TestDendrogram.test_dendrogram_leaf_colors_zero_dist\  s\   € ð �J‰Jš	Ú!Ú!Ú!Ú!Ú!ð#ó $ˆô �A�xÓ ˆÜ�q $Ô'ˆÚ9ˆ
ØÐ&Ñ'ˆÜ�V˜ZÕ(rA   c           	      ó¦   — |j                  g d¢g d¢g d¢g d¢g d¢g d¢g«      }t        |d«      }t        |d¬«      }g d	¢}|d
   }t        ||«       y )Nrp  )r   r   gš™™™™™ñ?rr  rq  rs  r   Tr  rt  rM  rv  rw  s          r?   Útest_dendrogram_leaf_colorsz*TestDendrogram.test_dendrogram_leaf_colorsk  s\   € ð �J‰Jš	Ú#Ú!Ú!Ú!Ú!ð#ó $ˆô �A�xÓ ˆÜ�q $Ô'ˆÚ9ˆ
ØÐ&Ñ'ˆÜ�V˜ZÕ(rA   N)r{   r|   r}   r  r  r!  r¹   ÚmarkÚskipifÚhave_matplotlibr+  r/   r3  r2  rd  Úfixturerf  rn  r|  r~  r~   rA   r?   r  r  ²  sï   „ ò1òDò"ð ‡[�[×Ñ˜OÐ+°OÐÓDñó Eðñ& �gð!ôð ‡[�[×Ñ˜OÐ+°OÐÓDñ8ó Eó	ð
8ò<#ñ| �gð"ôð ‡[�[×Ñ˜OÐ+°OÐÓDñó Eó	ð
ð> ‡^�^ñó ðò)ò")ó)rA   r  c                 óÄ  — | j                   d   dz   }|j                  |dz
  f| j                  ¬«      }|j                  d«      }t        d|dz
  «      D ]‰  }d|d d  | |df   }| |df   }||k\  r&||j	                  ||j
                  ¬«      |z
     |d<   ||k\  r&||j	                  ||j
                  ¬«      |z
     |d<   | |df   |d<   |j                  |«      ||<   Œ‹ |S ©Nr   r,   r    )r‚   r5   ri   )r1  rD   r¡   r,  r7   rL  Úmax)rV   r=   rr   ÚBÚqr8  r0  r1  s           r?   rÛ  rÛ  {  s÷   € à	�‰�‰
�Q‰€AØ
�‰�!�A‘#�˜qŸw™wˆÓ'€AØ
�‰�‹€AÜ�1�a˜!‘e‹_ò 	ˆØˆ‰!ˆØ��A�‰wˆØ�!�Q�$‘ˆØ�1Š9Ø�R—Z‘Z ¨B¯H©H�ZÓ5¸Ñ9Ñ:ˆAˆa‰DØ�AŠ:Ø�R—Z‘Z ¨R¯X©X�ZÓ6¸Ñ:Ñ;ˆAˆa‰DØ��A�‰wˆˆ!‰Ø�v‰v�a‹yˆˆ!Šð	ð €HrA   r‚   c                 óÔ  — | j                   d   dz   }|j                  | |«      }|j                  |dz
  f|¬«      }|j                  d«      }t        d|dz
  «      D ]‰  }d|d d  | |df   }	| |df   }
|	|k\  r&||j	                  |	|j
                  ¬«      |z
     |d<   |
|k\  r&||j	                  |
|j
                  ¬«      |z
     |d<   |||f   |d<   |j                  |«      ||<   Œ‹ |S r„  )r1  Úresult_typerD   r,  r7   rL  r…  )rV   rm  r6  r=   rr   r¡   r†  r‡  r8  r0  r1  s              r?   rð  rð  �  s  € à	�‰�‰
�Q‰€AØ�N‰N˜1˜aÓ €EØ
�‰�!�A‘#�˜uˆÓ%€AØ
�‰�‹€AÜ�1�a˜!‘e‹_ò 	ˆØˆ‰!ˆØ��A�‰wˆØ�!�Q�$‘ˆØ�1Š9Ø�R—Z‘Z ¨B¯H©H�ZÓ5¸Ñ9Ñ:ˆAˆa‰DØ�AŠ:Ø�R—Z‘Z ¨R¯X©X�ZÓ6¸Ñ:Ñ;ˆAˆa‰DØ��A�‰wˆˆ!‰Ø�v‰v�a‹yˆˆ!Šð	ð €HrA   c           	      óX   — t        t        t        | j                  ddgddgg«      «       y )Nr   r,   )r   r	   r
   r7   r!  s    r?   Ú<test_unsupported_uncondensed_distance_matrix_linkage_warningr‹     s&   € ô ”¤¨"¯*©*°q¸!°f¸qÀ!¸fÐ5EÓ*FÕGrA   c           
      ó°   — t         j                  j                  j                  D ]/  }t	        t
        t        | j                  ddgddgg«      |d¬«       Œ1 y )Nr,   Ú	cityblock©rL   rb   )rd   ÚclusterÚ	hierarchyÚ_EUCLIDEAN_METHODSr9   r:   r
   r7   )r=   rL   s     r?   Ú"test_euclidean_linkage_value_errorr’  ¦  sJ   € Ü—-‘-×)Ñ)×<Ñ<ò 9ˆÜ”j¤'¨2¯:©:¸¸1°vÀÀ1¸vÐ6FÓ+GØ#¨Kö	9ñ9rA   c                 ó¢   — t        | j                  dg«      dd¬«      }t        | j                  ddgddgg«      dd¬«      }t        ||d¬«       y )Nr,   r   ra   rŽ  r   rj   rÂ   )r
   r7   r(   )r=   ÚZ1r«  s      r?   Útest_2x2_linkager•  ¬  sJ   € ä	�—‘˜Q˜C“¨¸+Ô	F€BÜ	�—‘˜a ˜V a¨ VÐ,Ó-°hÀ{Ô	S€BÜ�B˜ Ö'rA   c                 óD  — t         j                  j                  d«       d}t         j                  j                  |d«      }| j	                  |«      }t
        j                  j                  j                  |«      }t        |«      }t        ||j                  «       kD  «       t        |j                  «       |j                  «       kD  «       t        |j                  «       |j                  «       k(  «       t        |j                  «       |j                  «       k7  «       y )Né   é2   rÇ   )rl   rm   ÚseedÚrandnr7   rd   r�  r�  r[   r   r   r›  rœ  )r=   r2  rc   rV   Útrees        r?   Útest_node_comparerœ  ³  s½   € ä‡I�I‡N�N�2ÔØ€DÜ
�	‰	�‰˜˜aÓ €AØ
�
‰
�1‹€AÜ�‰×Ñ×$Ñ$ QÓ'€AÜ�1‹:€DÜˆD�4—=‘=“?Ñ"Ô#ÜˆD�N‰NÓ˜tŸ}™}›Ñ.Ô/ÜˆD�N‰NÓ §¡Ó 0Ñ0Ô1ÜˆD�N‰NÓ §¡£Ñ/Õ0rA   z%`cut_tree` uses non-standard indexingc           	      ó¾  — t         j                  j                  d«       d}t         j                  j                  |d«      }| j	                  |«      }t
        j                  j                  j                  |«      }t        |«      }t        |d d …df   | j                  |«      dd¬«       t        |d d …df   | j                  |«      dd¬«       t        t        j                  |«      j                  d«      t        j                  |d	z
  dd«      «       t        |d d …d
gf   t        |d¬«      d¬«       t        |d d …d
dgf   t        |ddg¬«      d¬«       t        |d d …dd
gf   t        |ddg¬«      d¬«       t        |«      }| j	                  |D �cg c]  }|j                   ‘Œ c}«      }t        |d d …t        j"                  |dg«      f   t        |d¬«      d¬«       t        |d d …t        j"                  |ddg«      f   t        |ddg¬«      d¬«       t        |d d …t        j"                  |ddg«      f   t        |ddg¬«      d¬«       y c c}w )Nr—  r˜  rÇ   r   rj   F)rk   Úcheck_dtyper‰   r,   éûÿÿÿr6   )Ú
n_clustersrÂ   iöÿÿÿrË   )Úheight)rl   rm   r™  rš  r7   rd   r�  r�  r[   r    r(   ÚarangerD   r   r…  r"   ÚdistÚsearchsorted)r=   r2  rc   rV   ÚcutreeÚnodesr™  Úheightss           r?   Útest_cut_treer¨  Á  sî  € ä‡I�I‡N�N�2ÔØ€DÜ
�	‰	�‰˜˜aÓ €AØ
�
‰
�1‹€AÜ�‰×Ñ×$Ñ$ QÓ'€AÜ�a‹[€Fô �Fš1˜a˜4‘L "§)¡)¨D£/¸È5ÕQÜ�Fš1˜b˜5‘M 2§8¡8¨D£>¸È5ÕQÜ”—‘˜FÓ#×'Ñ'¨Ó*¬B¯I©I°d¸Q±hÀÀBÓ,GÔHä�Fš1˜r˜d˜7‘O¤X¨a¸AÔ%>ÀUÕKÜ�Fš1˜r 3˜i˜<Ñ(¬(°1À!ÀRÀÔ*IÐPUÕVÜ�Fš1˜s B˜i˜<Ñ(¬(°1À"ÀaÀÔ*IÐPUÕVä Ó"€EØ�j‰j°Ö6¨˜$Ÿ)›)Ò6Ó7€Gä�Fš1œbŸo™o¨g¸°sÓ;Ð;Ñ<Ü˜Q qÔ)°õ7ä�Fš1œbŸo™o¨g¸¸2°wÓ?Ð?Ñ@Ü˜Q¨¨2 wÔ/°eõ=ä�Fš1œbŸo™o¨g¸¸A°wÓ?Ð?Ñ@Ü˜Q¨¨A wÔ/°eö=ùò 7s   ÆIc                 óö  — t        t        | j                  t        j                  «      «      | j                  t        j                  «      «      }t        j
                  }t        || j                  |«      d¬«       t        t        | j                  t        j                  «      d«      | j                  t        j                  «      «      }t        j                  }t        || j                  |«      d¬«       y )NrP   rQ   r[   r`   )	r!   r
   r7   r-   rT   ry   r(   rc   Úlinkage_X_ward_olo)r=   rV   rW   s      r?   rz   rz   Þ  s²   € ô 	œg b§j¡jÔ1D×1KÑ1KÓ&LÓMØ Ÿj™jÔ)<×)CÑ)CÓDó	F€Aä#×=Ñ=€IÜ�A�r—z‘z )Ó,°5Õ9ô 	œg b§j¡jÔ1D×1FÑ1FÓ&GÈÓPØ Ÿj™jÔ)<×)>Ñ)>Ó?ó	A€Aä#×6Ñ6€IÜ�A�r—z‘z )Ó,°5Ö9rA   z"`Heap` only supports NumPy backendc                 óÔ  — | j                  g d¢«      }t        |«      }|j                  «       }t        |d   d«       t        |d   d«       |j	                  «        |j                  «       }t        |d   d«       t        |d   d«       |j                  dd«       |j                  «       }t        |d   d	«       t        |d   d
«       |j	                  «        |j	                  «        |j                  dd«       |j                  «       }t        |d   d«       t        |d   d«       |j	                  «        |j                  «       }t        |d   d«       t        |d   d«       y )N)ri   r‰   r   ç      ø¿r‚   Úkeyr‚   r'  r¬  r,   r‰   g      @ri   r   rË   rÇ   )r7   r&   Úget_minr   Ú
remove_minÚchange_value)r=   ÚvaluesÚheapÚpairs       r?   Ú	test_Heapr´  í  s%  € à�Z‰ZÒ+Ó,€FÜ�‹<€Dà�<‰<‹>€DÜ��e‘˜aÔ Ü��g‘ Ô%à‡O�OÔØ�<‰<‹>€DÜ��e‘˜aÔ Ü��g‘ Ô#à×Ñ�a˜ÔØ�<‰<‹>€DÜ��e‘˜aÔ Ü��g‘ Ô"à‡O�OÔØ‡O�OÔà×Ñ�a˜ÔØ�<‰<‹>€DÜ��e‘˜aÔ Ü��g‘ Ô"à‡O�OÔØ�<‰<‹>€DÜ��e‘˜aÔ Ü��g‘ Õ#rA   c                 ó    — | j                  g d¢«      }t        j                  t        «      5  t	        |d¬«       d d d «       y # 1 sw Y   y xY w)N)r   r   r‰   rY   rŠ   )r7   r¹   r   r:   r
   )r=   r±  s     r?   Útest_centroid_neg_distancer¶    s=   € ð �Z‰Zš
Ó#€FÜ	�‰”zÓ	"ñ +ä�˜zÕ*÷+÷ +ñ +ús   ­AÁA)^Únumpyrl   Únumpy.testingr   r   r   r   r   r¹   r   r9   Úscipy.cluster.hierarchyrd   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$   Úscipy.spatial.distancer%   Úscipy.cluster._hierarchyr&   Úscipy.conftestr'   Úscipy._lib._array_apir(   r)   Ú	threadingr+   Ú r-   Ú
matplotlibÚuseÚmatplotlib.pyplotÚpyplotr$  r�  Ú	Exceptionr  ÚusefixturesÚ
pytestmarkr/   r1   r€   rŽ   r˜   r½   rÓ   rù   r  r;  rj  r‚  rŽ  rŸ  r´  rÖ  ræ  r÷  r  rÛ  rð  Úthread_unsafer‹  r’  r•  rœ  r¨  rz   r´  r¶  r~   rA   r?   ú<module>rÈ     s†  ðóD ÷)õ )ã Ý *ã ÷7÷ 7÷ 7÷ 7÷ 7÷ 7÷ 7ó 7õ )Ý )Ý /ß Bå å !ð
Ûà€J‡N�N�5Ôå#Ø€Oð
 # F§K¡K×$;Ñ$;Ð<NÓ$OÐP€
Ø—;‘;×/Ñ/Ð ÷:>ñ :>ñz ˜4Ô ÷>ð >ó !ð>ñ> ˜4Ô ÷	Tð 	Tó !ð	Tñ ˜4Ô ÷%&ð %&ó !ð%&÷P$ñ $ñD ˜4Ô ÷<2ð <2ó !ð<2ñ~ ˜4Ô ÷Oð Oó !ðOñ ˜$ØFôH÷V7ð V7óHðV7ñr ˜4Ô ÷XGð XGó !ðXGñv ˜4Ô ÷LBð LBó !ðLB÷^0ñ 0ñ< ˜4Ô ÷"$ð "$ó !ð"$ñJ ˜4Ô ÷90ð 90ó !ð90ñx ˜4Ô ÷Gð Gó !ðGñT ˜4Ô ÷4ð 4ó !ð4÷:(4ñ (4÷VB4ñ B4ñJ ˜4Ô ÷E)ð E)ó !ðE)òPð$ /0°Bó ð& ‡�×ÑÙ˜4Ô ñHó !ó ðHò9ñ ˜4Ô ñ(ó !ð(ñ ˜4Ô ñ
1ó !ð
1ñ ˜$Ð'NÔOñ=ó Pð=ñ8 ˜4Ô ñ:ó !ð:ñ ˜$Ð'KÔLñ$ó Mð$ñ@ ˜4Ô ñ+ó !ñ+øðW& ò ØƒOðús   ÂJ7 Ê7KËK