L ijddlZddlmZmZmZmZddlZddlmZ ddl m Z m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1ddl2m3cm4Z5ddl6m7Z7d d l8m9Z9Gd d Z: ddl;Z;e;jxd ddl=m>Z?dZ@ejjZCe/e GddZDe/eGddZEe/eGddZFe/e eGddZGe/eGddZHe/eGddZIe/eGddZJe/eGddZKe/eGd d!ZLe/eGd"d#ZMGd$d%ZNe/e eGd&d'ZOe/eGd(d)ZPe/eGd*d+ZQe/eGd,d-ZRe/eGd.d/ZSe/eGd0d1ZTe/e!Gd2d3ZUd4ZVd5efd6ZWe/ed7ZXe/e#d8ZYe/e$d9ZZeCdd:;d<Z[y#eA$rdZ@YwxYw)=N)assert_allclose assert_equalassert_array_equalassert_)raises)ClusterWarninglinkagefrom_mlab_linkageto_mlab_linkagenum_obs_linkage inconsistentcophenet fclusterdatafcluster is_isomorphicsinglewardleaders correspond is_monotonicmaxdists maxinconstsmaxRstatis_valid_linkage is_valid_imto_tree leaves_list dendrogramset_link_color_palettecut_treeoptimal_leaf_ordering_order_cluster_tree _hierarchy_EUCLIDEAN_METHODS_LINKAGE_METHODS)Heap)pdist) eager_warnsmake_xp_test_casexp_assert_closexp_assert_equalLock)hierarchy_test_dataceZdZeZeZy)eagerN)__name__ __module__ __qualname__rrh/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/cluster/tests/test_hierarchy.pyr1r19sK'r6r1AggTFc eZdZedddZdZdZdZdZd Z d Z d Z e jjd d gdgdgfdgdgdgfdgdgdgfdgdgdgfdgdgdgfdgdgdgfdgdgdgfgdZdZe jjdedZdZedddZy) TestLinkage jax.numpy$Can't raise inside jax.pure_callbackreasonct|j|jgdgdzz}ttt|y)N)asarraynan assert_raises ValueErrorr selfxpys r73test_linkage_non_finite_elements_in_distance_matrixz?TestLinkage.test_linkage_non_finite_elements_in_distance_matrixRs/ JJx3%') *j'1-r6cP|jd}ttt|y)Nr)zerosrDrEr rFs r7"test_linkage_empty_distance_matrixz.TestLinkage.test_linkage_empty_distance_matrixYs HHTNj'1-r6c6dD]}|j||y)N)rcompleteaverageweighted)check_linkage_tdistrGrHmethods r7test_linkage_tdistzTestLinkage.test_linkage_tdist^s!C 1F  $ $VR 0 1r6ct|jtj|}t td|z}t ||j|dy)Nlinkage_ytdist_绽|=atolr rBr/ytdistgetattrr*)rGrUrHZ expectedZs r7rSzTestLinkage.check_linkage_tdistbsF BJJ299:F C/1BV1KL 2::i0u=r6c6dD]}|j||y)N)centroidmedianr)check_linkage_qrTs r7test_linkage_XzTestLinkage.test_linkage_Xhs!4 -F   , -r6c`t|jtj|}t td|z}t ||j|d|jtj}t |d}t||}t ||j|dy)N linkage_X_ư>rZ euclidean)metric)r rBr/Xr^r*r')rGrUrHr_r`rkrIs r7rdzTestLinkage.check_linkage_qls BJJ2445v >/1FG 2::i0u= JJ*,, - !K ( Av 2::i0u=r6cXtjjd}d}|j|d}t |}t j D]U\}}tj|||}t|j||} t| |j|ddWy)Nrg+=V瞯<)rtolr[) nprandom RandomStaterandr'r%itemsr#r rBr*) rGrHrngnrkdrUcode Z_trivialr_s r7test_compare_with_trivialz%TestLinkage.test_compare_with_trivialwsii##A&  HHQN !H,224 NLFD"**1a6I 1 v.A Arzz)45u M Nr6ct|jtjd}t td}t ||j|dy)NT)optimal_orderinglinkage_ytdist_single_olorYrZr\)rGrHr_r`s r7test_optimal_leaf_orderingz&TestLinkage.test_optimal_leaf_orderingsA BJJ299:T R/1LM 2::i0u=r6z method,expectr)rr.'e?rn)rnrrrP)rnrg'e@rrQ)rnrgev@rrRrbrcr)rnrg@rc|jddgddgddgg}t||}|j||j}t||dy)Nrr.rUdtyperhrZ)rBr float64r*)rGrUexpectrHrkr_s r7test_linkage_tieszTestLinkage.test_linkage_tiessS" JJR1a&1a&1 2 Af %F"**56.r6c|jddgddgg}t|t5t|dddy#1swYyxYw)Nrr.)rBr(rr rGrHrks r7 - > N>  [[_ ++- . ++- . ++- . ++- . ++- . ++- . ++- ./ /! /   [[X'9::;: , k*PQ/R/r6r:ceZdZdZdZy)TestInconsistentcRtjD]}|j||yN)r/inconsistent_ytdistcheck_inconsistent_tdist)rGrHdepths r7test_inconsistent_tdistz(TestInconsistent.test_inconsistent_tdists'(<< 5E  ) )% 4 5r6c|jtj}tt |||jtj |yr)rBr/linkage_ytdist_singler*r r)rGrrHr_s r7rz)TestInconsistent.check_inconsistent_tdistsA JJ*@@ A Q. #6#J#J5#QR Tr6N)r2r3r4rrr5r6r7rrs 5Tr6rc8eZdZdZdZedddZy)TestCopheneticDistancec|jgd}|jtj}t|}t ||j||j dy)N 'rrrrrrrrrrrrYrZ)rBr/rrr*r)rGrH expectedMr_Ms r7test_linkage_cophenet_tdist_Zz4TestCopheneticDistance.test_linkage_cophenet_tdist_ZsPJJ 9: JJ*@@ A QK2::irzz:BOr6cP|jtj}t||jtj\}}|jgd|j }|jd|j d}t ||dt ||dy)Nrrg*ɻ2Qz?r5rYrZ)rBr/rrr]rr*)rGrHr_crr expectedcs r7test_linkage_cophenet_tdist_Z_Yz6TestCopheneticDistance.test_linkage_cophenet_tdist_Z_Ys JJ*@@ A!RZZ(;(B(BCDAJJ 9@B L JJ?rzzJRSUV 951951r6r;r<r=c gdgdgdgdgdgdgdgdgd gd gd g }tjtd 5t|j |dddy#1swYyxYw)N)r@?r@)r(@r@)r@rr)@g,@rr)@@rr) @g0@rr)"@$@rr)g&@g2@rr)g*@.@rr)g1@g4@rg@@)g3@g5@rrzexcessive observationsmatch)rrrErrB)rGrHarrs r7 test_gh_22183z$TestCopheneticDistance.test_gh_22183sb " " ! " ! " " # # $ $ &]]:-E F & RZZ_ % & & &s A##A,N)r2r3r4rrrrr5r6r7rrs*P2k*PQ&R&r6rceZdZdZdZdZy)TestMLabLinkageConversionc|jg|j}tt||tt ||y)Nr)rBrr+r r rs r7"test_mlab_linkage_conversion_emptyzeZdZeeej jdejDcgc]}d|fc}}ejDcgc]}d|fc}}zejDcgc]}d|fc}}zdZ ycc}}wcc}}wcc}}w)TestFclusterData criterion,tr distancemaxclustc|jttd|z|}|jtj}t |||}t ||sJyN fcluster_ criteriont)rBr^r/Q_Xrr)rGrrrH expectedTrkTs r7test_fclusterdataz"TestFclusterData.test_fclusterdatasXJJw':K) JJy ! JJy !Q"""Q"""r6c|jgd}|jgd}t||sJt||sJy)N)r.rr.)rnrrnrrs r7test_is_isomorphic_2z%TestIsIsomorphic.test_is_isomorphic_2krr6cd|jg}|jg}t||sJyrrrs r7test_is_isomorphic_3z%TestIsIsomorphic.test_is_isomorphic_3rs, JJrN JJrNQ"""r6c|jgd}|jgd}t||sJt||sJy)Nr)r.rrnrrs r7test_is_isomorphic_4Az&TestIsIsomorphic.test_is_isomorphic_4Ax@ JJy ! JJy !Q"""Q"""r6c|jgd}|jgd}t||rJt||rJy)N)r.rnrr)r.rrnrrrs r7test_is_isomorphic_4Bz&TestIsIsomorphic.test_is_isomorphic_4BsC JJ| $ JJ| $ A&&& A&&&&r6c|jgd}|jgd}t||sJt||sJy)N)rrnr)rrrnrrs r7test_is_isomorphic_4Cz&TestIsIsomorphic.test_is_isomorphic_4Cr r6 nclusters)rnrrAc,|jd||y)NrHis_isomorphic_randpermrGr%rHs r7test_is_isomorphic_5z%TestIsIsomorphic.test_is_isomorphic_5s ##D)#;r6c0|jd|dd|y)Nr'TrAr(r)r+s r7test_is_isomorphic_6z%TestIsIsomorphic.test_is_isomorphic_6s ##D)T1#Dr6cl|jgd}|jgd}t||rJy)Nrrrrs r7test_is_isomorphic_7z%TestIsIsomorphic.test_is_isomorphic_7s1 JJy ! JJy ! A&&&&r6cztdD],}tjj||zj t }tj |jt }tjj|} td|jdD] } | || || <|r?tjj|} || d|xxdz cc<|| d|xx|zcc<|j|}|j|}t||| k(sJt||| k(r-Jy)Nrrrr.) rangerqrrrtastypeintrMsize permutationshaperBr) rGnobsr%nonisonerrorsrH_rrPiQs r7r*z'TestIsIsomorphic.is_isomorphic_randpermsq 7A% 199#>As+A %%i0A1aggaj) 1w! II))$/!Ag,1$!Ag,9, 1 A 1 A A&v:6 66 A&v:6 66 7r6N)Fr)r2r3r4rrrrrr"r$rrrr,r.r0r*r5r6r7rr]s{%### #'# [[[)4<5<  [[[)4E5E ' 7r6rc~eZdZejj dgddZdZdZdZ dZ dZ d Z d Z y ) TestIsValidLinkagenrow, ncol, valid)rnrAF)rnrF)r.rT)rnrTc|jgdgdg|j}|d|d|f}tt||d|st t t|dyyN)rr.rrnrA)rrnrrrrFcheck_namespaceTthrow)rBrr+rrDrE)rGnrowncolvalidrHr_s r7"test_is_valid_linkage_various_sizez5TestIsValidLinkage.test_is_valid_linkage_various_sizesg JJ))+24**  > eteUdUlO(+UEJ *&6 Fr6c|jgdgdg|j}tt|ddt t t|dyNrr.rrnrrnrrrFrETrG)rBint64r+rrD TypeErrorrGrHr_s r7test_is_valid_linkage_int_typez1TestIsValidLinkage.test_is_valid_linkage_int_typesG JJ&(/1xx  9(+UEJi!11DAr6c|jd|j}tt|ddt t t|dyNrrrFrETrG)rMrr+rrDrErSs r7test_is_valid_linkage_emptyz.TestIsValidLinkage.test_is_valid_linkage_emptys9 HHV2::H .(+UEJj"2ATBr6ctdddD]l}tjj||dz zdz}|j t |}|j |}t t|ddny Nrrr.rnTFrE)r2rqrrrtrBr r+rrGrHr=rIr_s r7test_is_valid_linkage_4_and_upz1TestIsValidLinkage.test_is_valid_linkage_4_and_upslq"a NA q!A#wz*A 71:&A 1 A ,Q/u M  Nr6ctdddD]}tjj||dz zdz}|j t |}|j |}t j||dzdfjd}tt|dd tjt5tj|d dddy#1swYxYw) Nrr[rr.rnrFrETrGr2rqrrrtrBr xpxatsetr+rrrrEr1r\s r7-test_is_valid_linkage_4_and_up_neg_index_leftz@TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_leftq"a 6A q!A#wz*A 71:&A 1 Aq !Q$'"&&r*A ,Q/ Nz* 6&&q&5 6 6  6  6 6 C##C, ctdddD]}tjj||dz zdz}|j t |}|j |}t j||dzdfjd}tt|ddtjt5tj|d dddy#1swYxYw Nrr[rr.rnr_FrETrGr`r\s r7.test_is_valid_linkage_4_and_up_neg_index_rightzATestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_index_rightrerfctdddD]}tjj||dz zdz}|j t |}|j |}t j||dzdfjd}tt|ddtjt5tj|d dddy#1swYxYw Nrr[rr.rngFrETrGr`r\s r7'test_is_valid_linkage_4_and_up_neg_distz:TestIsValidLinkage.test_is_valid_linkage_4_and_up_neg_distsq"a 6A q!A#wz*A 71:&A 1 Aq !Q$'"&&t,A ,Q/ Nz* 6&&q&5 6 6  6  6 6rfctdddD]}tjj||dz zdz}|j t |}|j |}t j||dzdfjd}tt|ddtjt5tj|d dddy#1swYxYwrhr`r\s r7)test_is_valid_linkage_4_and_up_neg_countsz eteUdUlO AuE *k1D Ar6c|jd|j}tt|ddt t t|dyrV)rMrr+rrDrErrs r7test_is_valid_im_emptyz.TestIsValidInconsistent.test_is_valid_im_emptys6 HHV2::H . AuEj+q=r6ctdddD]h}tjj||dz zdz}t |}t |}|j |}tt|ddjyrZ) r2rqrrrtr r rBr+rrGrHr=rIr_rss r7test_is_valid_im_4_and_upz1TestIsValidInconsistent.test_is_valid_im_4_and_up$sjq"a IA q!A#wz*A AQA 1 A KND% H  Ir6ctdddD]}tjj||dz zdz}t |}t |}t j||dzdfjd}|j|}tt|dd tjt5tj|d dddy#1swYxYw) Nrr[rr.rnrFrETrGr2rqrrrtr r rarbrcrBr+rrrrEr1rzs r7(test_is_valid_im_4_and_up_neg_index_leftz@TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_left.q"a 1A q!A#wz*A AQAq !Q$(#''-A 1 A KNE5 Iz* 1!!!4!0 1 1 1 1 1 <CC( ctdddD]}tjj||dz zdz}t |}t |}t j||dzdfjd}|j|}tt|ddtjt5tj|d dddy#1swYxYw) Nrr[rr.rnr}FrETrGr~rzs r7)test_is_valid_im_4_and_up_neg_index_rightzATestIsValidInconsistent.test_is_valid_im_4_and_up_neg_index_right;rrctdddD]}tjj||dz zdz}t |}t |}t j||dzdfjd}|j|}tt|ddtjt5tj|d dddy#1swYxYwrkr~rzs r7"test_is_valid_im_4_and_up_neg_distz:TestIsValidInconsistent.test_is_valid_im_4_and_up_neg_distHsq"a 1A q!A#wz*A AQAq !Q$'"&&t,A 1 A KNE5 Iz* 1!!!4!0 1 1 1 1 1rN) r2r3r4rtrrrrvrxr{rrrr5r6r7rprp sQ= [[03NOBOB> I 1 1 1r6rpc*eZdZdZdZdZdZdZy)TestNumObsLinkagech|jd|j}ttt|yNrWr)rMrrDrEr rSs r7test_num_obs_linkage_emptyz,TestNumObsLinkage.test_num_obs_linkage_emptyXs$ HHV2::H .j/15r6cd|jgdg|j}t|dk(sJy)NrOrrnrBrr rSs r7test_num_obs_linkage_1x4z*TestNumObsLinkage.test_num_obs_linkage_1x4]s. JJ'rzzJ :q!Q&&&r6cj|jgdgdg|j}t|dk(sJy)NrOrPrrrrSs r7test_num_obs_linkage_2x4z*TestNumObsLinkage.test_num_obs_linkage_2x4bs9 JJ&(/1zz  ;q!Q&&&r6ctdddD]T}tjj||dz zdz}|j t |}t ||k(rTJy)Nrr[rr.rn)r2rqrrrtrBr r r\s r7test_num_obs_linkage_4_and_upz/TestNumObsLinkage.test_num_obs_linkage_4_and_uphs^q"a +A q!A#wz*A 71:&A"1%* ** +r6ctddD]W}tjj|d}t |}|j t |}t||k(rWJy)Nrnrr)r2rqrrrtr'rBr r )rGrHrwrkr r_s r7!test_num_obs_linkage_multi_matrixz3TestNumObsLinkage.test_num_obs_linkage_multi_matrixpsYq" +A q!$AaA 71:&A"1%* **  +r6N)r2r3r4rrrrrr5r6r7rrVs6 ' ' ++r6rcfeZdZdZdZej jdgddZdZ y)TestLeavesListc|jgdg|j}t|tt |ddgdy)NrOrrr.rorrBrrrrrSs r7test_leaves_list_1x4z#TestLeavesList.test_leaves_list_1x4|s6 JJ'rzzJ :  AAU;r6c|jgdgdg|j}t|tt |gddy)NrOrPr)rr.rnrorrrSs r7test_leaves_list_2x4z#TestLeavesList.test_leaves_list_2x4s= JJ&(/1zz  ;  A >r6rU)rrPrQrRrbrcrctj}|jt||}t |}t |j t|dy)Nror)r/rrBr rr pre_orderr)rGrUrHrkr_nodes r7test_leaves_list_Qz!TestLeavesList.test_leaves_list_QsD # # JJwq&) *qz(+a.uEr6ctj}|jt|d}t |}t |j |jj |jj zdy)Nrror) r/rrBr rrrget_left get_right)rGrHrkr_rs r7test_Q_subtree_pre_orderz'TestLeavesList.test_Q_subtree_pre_ordersf  # # JJwq(+ ,qz(224t~~7G7Q7Q7SS" $r6N) r2r3r4rrrrrrrr5r6r7rrys=< ? [[XSUFUF$r6rc$eZdZdZdZdZdZy)TestCorrespondc|jd|j}|jd|j}ttt||y)NrLrrW)rMrrDrErrs r7test_correspond_emptyz$TestCorrespond.test_correspond_emptys< HHTH , HHU"**H -j*a3r6ctddD]j}tjj||dz zdz}|j t |}|j |}t t||ltdddD]j}tjj||dz zdz}|j t |}|j |}t t||ly)Nrnrr.r[r)r2rqrrrtrBr rrr\s r7test_correspond_2_and_upz'TestCorrespond.test_correspond_2_and_upsq! &A q!A#wz*A 71:&A 1 A Jq!$ %  & q"a &A q!A#wz*A 71:&A 1 A Jq!$ %  &r6c ttttddttddttttddttddzD]\}}tjj ||dz zdz}tjj ||dz zdz}|j t|}|j t|}|j |}|j |}t||rJt||sJy)NrnrrrAr. listzipr2rqrrrtrBr rrGrHr=jrIy2r_rs r7test_correspond_4_and_upz'TestCorrespond.test_correspond_4_and_upsCU1a[ 14a 3DEFCU1a[ 14a 3DEFG )FQ q!A#wz*A1Q3 +B 71:&AGBK(B 1 ABB!!R( ((!"a( (( )r6c ttttddttddttttddttddzD]\}}tjj ||dz zdz}tjj ||dz zdz}|j t|}|j t|}|j |}|j |}t||rJt||sJy)Nrnrr.rrs r7test_correspond_4_and_up_2z)TestCorrespond.test_correspond_4_and_up_2sCU1a[ 14b" 3FGHCU1a[ 14b" 3FGHI )FQ q!A#wz*A1Q3 +B 71:&AGBK(B 1 ABB!!R( ((!"a( (( )r6N)r2r3r4rrrrr5r6r7rrs4 & ) )r6rcNeZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z y ) TestIsMonotonicch|jd|j}ttt|yr)rMrrDrErrSs r7test_is_monotonic_emptyz'TestIsMonotonic.test_is_monotonic_emptys$ HHV2::H .j,2r6c^|jgdg|j}t|sJy)Nrr.333333?rnrrBrrrSs r7test_is_monotonic_1x4z%TestIsMonotonic.test_is_monotonic_1x4s' JJ'rzzJ :Ar6cd|jgdgdg|j}t|sJy)Nr)rnr皙?rrrrSs r7test_is_monotonic_2x4_Tz'TestIsMonotonic.test_is_monotonic_2x4_Ts2 JJ&(/1zz  ;Ar6cd|jgdgdg|j}t|rJy)N)rr.rrn)rnrrrrrrSs r7test_is_monotonic_2x4_Fz'TestIsMonotonic.test_is_monotonic_2x4_Fs5 JJ&(/1zz  ;?""?r6cj|jgdgdgdg|j}t|sJy)NrrnrrrnrrAg333333?rrrrSs r7test_is_monotonic_3x4_Tz'TestIsMonotonic.test_is_monotonic_3x4_Ts7 JJ&&(/1zz  ;Ar6cj|jgdgdgdg|j}t|rJy)Nr)rnr皙?rnrrrrSs r7test_is_monotonic_3x4_F1z(TestIsMonotonic.test_is_monotonic_3x4_F1: JJ&&(/1zz  ; ?""?r6cj|jgdgdgdg|j}t|rJy)N)rr.g?rnrrrrrSs r7test_is_monotonic_3x4_F2z(TestIsMonotonic.test_is_monotonic_3x4_F2rr6cj|jgdgdgdg|j}t|rJy)Nrr)rrArrrrrSs r7test_is_monotonic_3x4_F3z(TestIsMonotonic.test_is_monotonic_3x4_F3rr6cp|jttjd}t |sJyNr)rBr r/r]rrSs r7 test_is_monotonic_tdist_linkage1z0TestIsMonotonic.test_is_monotonic_tdist_linkage1s, JJw2998D EAr6c|jttjd}t j |dj d}t|rJy)Nr)rnrnr@)rBr r/r]rarbrcrrSs r7 test_is_monotonic_tdist_linkage2z0TestIsMonotonic.test_is_monotonic_tdist_linkage2 sK JJw2998D E FF1IdO   $?""?r6cttj}|jt|d}t |sJyr)r/rrBr r)rGrHrkr_s r7test_is_monotonic_Q_linkagez+TestIsMonotonic.test_is_monotonic_Q_linkages0 # # JJwq(+ ,Ar6N)r2r3r4rrrrrrrrrrrr5r6r7rrs93   # ### #r6rc`eZdZdZdZej jdgddZy) TestMaxDistsch|jd|j}ttt|yr)rMrrDrErrSs r7test_maxdists_empty_linkagez(TestMaxDists.test_maxdists_empty_linkages$ HHV2::H .j(A.r6c|jgdg|j}t|}t||}t ||dy)Nrr.rrrrorZ)rBrrcalculate_maximum_distancesr*)rGrHr_MD expectedMDs r7!test_maxdists_one_cluster_linkagez.TestMaxDists.test_maxdists_one_cluster_linkage"s< JJ'rzzJ : a[0B7 JU3r6rUrrPrrbrcctj}|jt||}t |}t ||}t ||dy)NrorZ)r/rrBr rrr*)rGrUrHrkr_rrs r7test_maxdists_Q_linkagez$TestMaxDists.test_maxdists_Q_linkage)sE # # JJwq&) * a[0B7 JU3r6N) r2r3r4rrrrrrr5r6r7rrs7/ 4 [[FH4H4r6rcfeZdZdZdZdZejjdgddZ y)TestMaxInconstsc|jd|j}|jd|j}ttt||yr)rMrrDrErrGrHr_rss r7test_maxinconsts_empty_linkagez.TestMaxInconsts.test_maxinconsts_empty_linkage7s< HHV2::H . HHV2::H .j+q!4r6c|jgdg|j}tjj dd}|j|}t t t||yNrrrnr)rBrrqrrrtrDrErrs r7test_maxinconsts_difrow_linkagez/TestMaxInconsts.test_maxinconsts_difrow_linkage=sL JJ'rzzJ : IINN1a  JJqMj+q!4r6c|jgdg|j}|jgdg|j}t||}t|||}t ||dy)Nrrrrrrr(rorZ)rBrr!calculate_maximum_inconsistenciesr*rGrHr_rsrrs r7$test_maxinconsts_one_cluster_linkagez4TestMaxInconsts.test_maxinconsts_one_cluster_linkageEsZ JJ'rzzJ : JJ'rzzJ : A 6q!C JU3r6rUrctj}t||}|jt |}|j|}t ||}t |||}t||dy)Nr(rorZ)r/rr rBr rrr*rGrUrHrkr_rsrrs r7test_maxinconsts_Q_linkagez*TestMaxInconsts.test_maxinconsts_Q_linkageMs` # # Av  JJ|A ' JJqM A 6q!C JU3r6N) r2r3r4rrrrrrrr5r6r7rr4s<5 54 [[FH4H4r6rceZdZdZej j deddZej j deddZ dZ ej j dgdd Z y ) TestMaxRStatc|jgdg|j}|jgdg|j}tjt5t ||ddddtjt 5t ||ddddtjt 5t ||ddddy#1swYhxYw#1swYExYw#1swYyxYw)Nrrrgffffff @rr)rBrrrrRrrErs r7test_maxRstat_invalid_indexz(TestMaxRStat.test_maxRstat_invalid_index]s JJ'rzzJ : JJ'rzzJ : ]]9 % Q3  ]]: &  Q2   ]]: &  Q1          s$C C8C'CC$'C0r=rc|jd|j}|jd|j}ttt|||yr)rMrrDrErrGr=rHr_rss r7test_maxRstat_empty_linkagez(TestMaxRStat.test_maxRstat_empty_linkagehs@ HHV2::H . HHV2::H .j(Aq!4r6c|jgdg|j}tjj dd}|j|}t t t|||yr)rBrrqrrrtrDrErrs r7test_maxRstat_difrow_linkagez)TestMaxRStat.test_maxRstat_difrow_linkageosN JJ'rzzJ : IINN1a  JJqMj(Aq!4r6c|jgdg|j}|jgdg|j}t||d}t||d|}t ||dy)Nrrrr.rorZ)rBrrrr*rs r7!test_maxRstat_one_cluster_linkagez.TestMaxRStat.test_maxRstat_one_cluster_linkagexs^ JJ'rzzJ : JJ'rzzJ : aA 6q!QC JU3r6rUrctj}t||}|jt |}|j|}t ||d}t ||d|}t||dy)Nr.rorZ)r/rr rBr rrr*rs r7test_maxRstat_Q_linkagez$TestMaxRStat.test_maxRstat_Q_linkagesd # # Av  JJ|A ' JJqM aA 6q!QC JU3r6N) r2r3r4rrrrr2rrrrr5r6r7rrZs  [[S%(+5,5  [[S%(+5,54 [[FH4H4r6rceZdZdZdZdZejje ddZ e dde d d ejje dejjd gd d Z e dde d d ejje ddZejdZdZdZdZy)TestDendrogramc|jttjd}t |d}|d}t |gdy)NrTno_plotleavesrnrAr.rrr)rBr r/r]rr)rGrHr_rsrs r7$test_dendrogram_single_linkage_tdistz3TestDendrogram.test_dendrogram_single_linkage_tdists> JJw2998D E q$ '8V/0r6c|jttjd}t t t |dy)Nrfoo orientation)rBr r/r]rDrErrSs r7test_valid_orientationz%TestDendrogram.test_valid_orientations, JJw2998D Ej*aUCr6c|jttjd}gd}t ||j|d}t ||d}||k(sJy)Nr)r.rrnrrrAT)labelsr)rBr r/r]r)rGrHr_rresult1result2s r7test_labels_as_array_or_listz+TestDendrogram.test_labels_as_array_or_listsV JJw2998D E#Qrzz&'94HQvt<'!!!r6z no matplotlibr=c |jgdgdgdg}tjtjt 5}t |ttdddddtjvsJtjt d5t |gdddtjy#1swYhxYw#1swY*xYw)N)rr.rr)rnrrrA)rrArrd)rz.Dimensions of Z and labels must be consistent.r) rBpltfigurerrrErrr2strvalueclose)rGrHlinkexc_infos r7test_valid_label_sizez$TestDendrogram.test_valid_label_sizeszz      ]]: & 6( tDs$4 5 6?hnn%& &&]]FH ( tB ' (  6 6  ( (s C$CCC$torchzFMPL 3.9.2 & torch DeprecationWarning from __array_wrap__ and NumPy 2.0z dask.arrayz.dask.array has bad interaction with matplotlibr )topbottomleftrightcH|jttjd}gdgdgdgdgdgdggdgd gd gd gd ggd gdgdd}t j }|j d}t|||}tj|d|d<t||t|||dd|dvr|jdn|jd}t|jdt|jdt|||d|dvr|jdn|jd}t|jdt|||d|dvr|jdn|jd}t|jdt jt||} t jtj| d| d<t| |y)Nr)C1C0r#r#r#r@rrr@)r@rrr@)r@rrrr@rrrrrrrrrrr)F@r(K@r))A@r*I@r+)9@r,@E@r-)rr@@r.)251034r)r"r"r#r#r#r# color_listdcoordicoordivlrleaves_color_list)axr r7rmZ)r<r leaf_font_size leaf_rotation)rrr)r<r r?)r<r r>r )rBr r/r]rr add_subplotrrqrget_xticklabelsget_yticklabels get_rotationget_sizer) rGr rHr_expectedfigr<R1 testlabelR2s r7test_dendrogram_plotz#TestDendrogram.test_dendrogram_plots JJw2998D E"@7799; = 67779 ; :0)M jjl __S !bk :zz"X,/8 R" 1"$B 8//     ###%a(  Y++-r2Y'')2.1!# %//     ###%a(  Y++-r21"$ &//     ###%a(  Y'')2. { 3 zz"X,/8 R"r6c |jttjd}t |ddd}t j tj|d|d<t|dggdggd gd d gd d gddgdt |ddd}t j tj|d|d<t|gdgdgdgdgdggd gdgdgdggdgdgddy)NrrnlastpT)show_contractedr7r#)r@rrr@r'(2)z(4)rrr5mtica)r"r#r#r#r$)r@rrr@r%r&)r*r*r(r()r,r,D@rP)rr@@@rQ)r/r0r1r2rN)rnrAr.rr)r"r"r#r#r#) rBr r/r]rrrrqrrs r7test_dendrogram_truncate_modez,TestDendrogram.test_dendrogram_truncate_modes JJw2998D E q!Wd ; jj8-( Qv$<#=$:#;!&$%q6/3Tl   q!Wd ; jj8-( Q'?$<$<$>$@$B%;$<$<$<$>!<#2.L  r6ctSrr,rs r7dendrogram_lockzTestDendrogram.dendrogram_lock%s v r6c|jttjd}|5t gdt |ddd}t gd|d}t |gd t ddddy#1swYyxYw) Nr)rmrIkTg)rabove_threshold_colorcolor_threshold)rXrrrVrIrWr6)rrVrXrXrX)rBr r/r]rrr)rGrHrTr_rsr6s r7test_dendrogram_colorsz%TestDendrogram.test_dendrogram_colors)sz JJw2998D E  ) "#7 81d14cKA "#A B<J %> ? #4 ( ) ) )s AA==Bc tjgdgdgdgdgdgdg}|jt|d}t|d}gd}|d }t ||y) Nr.rrrrr.rrnrrr.rrTrr#r"r"r#C2rdr:rqrBr rrrGrHrkr_rx exp_colorscolorss r7%test_dendrogram_leaf_colors_zero_distz4TestDendrogram.test_dendrogram_leaf_colors_zero_dist:se JJ !!!!! # $ JJwq(+ , q$ '9 &'VZ(r6c tjgdgdgdgdgdgdg}|jt|d}t|d}gd }|d }t ||y) Nr_)rrg?rar`rbrTrrcr:rerfs r7test_dendrogram_leaf_colorsz*TestDendrogram.test_dendrogram_leaf_colorsIse JJ #!!!! # $ JJwq(+ , q$ '9 &'VZ(r6N)r2r3r4rr rrrskipifhave_matplotlibrrrrJrRfixturerTr]rirkr5r6r7rrs-1D" [[O+ODE&g!l@ [[O+OD [[],NO<#PE <#|g"l@ [[O+ODE > ^^)" ) )r6rc|jddz}|j|dz f|j}td|dz D]}|jd}||df}||df}||k\rH||j ||j |z }t j|dj|}||k\rH||j ||j |z } t j|dj| }t j|dj||df}t j||j|j|}|SNrr.r)rrn) r7rMrr2rBrQrarbrcmax) r_rHrwBr=qrr b_leftb_rights r7rrYs<  QA !A#qww'A 1a!e_ ( HHTNAw!Q$ 19rzz$bhhz7!;Gq!   )A FF1aL  Qq!tW % FF1aL  RVVAY ' ( Hr6rc|jddz}|j||}|j|dz f|}td|dz D]}|jd}||df} ||df} | |k\rH||j | |j |z } t j|dj| }| |k\rH||j | |j |z } t j|dj| }t j|dj|||f}t j||j|j|}|Srp) r7 result_typerMr2rBrQrarbrcrq) r_rsrWrHrwrrrr=rsrr rtrus r7rrlsH  QA NN1a E !A#u%A 1a!e_ ( HHTNAw!Q$ 19rzz$bhhz7!;Gq!   )A FF1aL  Qq!tW % FF1aL  RVVAY ' ( Hr6ctjjdd}tjj|d}|j t |}t |}t||jkDt|j|jkDt|j|jk(t|j|jk7y)N2r) rqrrseedrandnrBrrrrr)rHr8rkr_trees r7test_node_comparer~sIINN2 D a A 47A 1:D D4==? "# DNN t}} ./ DNN  0 01 DNN   /0r6c ~tjjdd}tjj|d}|j t |}t |}t|dddf|j|ddt|dddf|j|ddttj|jdtj|d z ddt|ddd gft |d d t|ddd dgft |d dg d t|dddd gft |dd g d t|}|j |Dcgc]}|jc}}t|ddtj|d gft |d d t|ddtj|d dgft |d dgd t|ddtj|dd gft |dd gd ycc}w)NryrzrrroF)rp check_dtyperr.rA) n_clustersrir)height)rqrrr{r|rBrr r*arangerMrrqr"dist searchsorted)rHr8rkr_cutreenodesrheightss r7 test_cut_treersIINN2 D a A 47A a[FF1a4L"))D/5QF1b5M288D>5QF#''*BIIdQhB,GHF1rd7OXaA%>UKF1r3i<((1!R*IPUVF1sBi<((1"a*IPUV  "Ejj6$))67GF1boogs;;<Qq)7F1boog2w??@Q2w/e=F1boogAw??@QAw/e= 7s:H:ct|jttj|jtj}tj }t ||j|dt|jttjd|jtj}tj}t ||j|dy)NrYrZrrh) r!rBr r/r]r~r*rklinkage_X_ward_olo)rHr_r`s r7rrs bjj1D1K1K)LM jj)<)C)CD FA#==IArzz),59 bjj1D1F1F)OP jj)<)>)>? AA#66IArzz),59r6z"`Heap` only supports NumPy backend)np_onlyr>c|jgd}t|}|j}t|ddt|dd|j |j}t|ddt|dd|j dd|j}t|dd t|dd |j |j |j dd |j}t|dd t|dd|j |j}t|ddt|dd y) N)rnrrrkeyrrrr.rg@rnrrr)rBr&get_minr remove_min change_value)rHrheappairs r7 test_Heaprs% ZZ+ ,F Dea g%OO <<>Dea g#a <<>Dea g"OOOOa <<>Dea g"OO <<>Dea g#r6)\numpyrq numpy.testingrrrrrrrDscipy.cluster.hierarchyrr r r r r rrrrrrrrrrrrrrrrrrr r!r"r#r$r%scipy.cluster._hierarchyr&scipy.spatial.distancer'scipy._lib._array_apir(r)r*r+scipy._lib.array_api_extra_libarray_api_extrara threadingr-r/r1 matplotlibusematplotlib.pyplotpyplotrrm Exceptionrrr:rrrrrrrr@rprrrrrrrrrrr~rrrr5r6r7rscDTT *KKKKKKKK*(EE((!((JNN5#O;;//7c/c/c/L<  T T! T8&&&&&&R$o6$$7$@<  + +! + 8*2*2*2Z7 : : :=!S7S7"S7l#$Q6Q6%Q6h;I1I1 I1X + +F;($$)$D:0)0)0)f< FF!FR84442;"4"4 "4J8/4/4/4d:H)H)H)V &/0B (7 1 18==6() :* :$'KL$M$a#OsI<<JJ