From afcfd291bfeba2044a854506f3c7427d5afe6b90 Mon Sep 17 00:00:00 2001 From: Meekail Zain Date: Wed, 5 Apr 2023 10:37:35 -0400 Subject: [PATCH 1/2] BFS style cleanup --- sklearn/cluster/_hdbscan/_tree.pyx | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/sklearn/cluster/_hdbscan/_tree.pyx b/sklearn/cluster/_hdbscan/_tree.pyx index dcea00cbc8487..eec4dae79ef09 100644 --- a/sklearn/cluster/_hdbscan/_tree.pyx +++ b/sklearn/cluster/_hdbscan/_tree.pyx @@ -272,17 +272,24 @@ cdef dict _compute_stability( return dict(result_pre_dict) -cdef list bfs_from_cluster_tree(cnp.ndarray[CONDENSED_t, ndim=1, mode='c'] hierarchy, cnp.intp_t bfs_root): +cdef list bfs_from_cluster_tree( + cnp.ndarray[CONDENSED_t, ndim=1, mode='c'] condensed_tree, + cnp.intp_t bfs_root +): - cdef list result - cdef cnp.ndarray[cnp.intp_t, ndim=1, mode='c'] to_process + cdef: + list result = [] + cnp.ndarray[cnp.intp_t, ndim=1] process_queue = ( + np.array([bfs_root], dtype=np.intp) + ) + cnp.ndarray[cnp.intp_t, ndim=1] children = condensed_tree['child'] + cnp.intp_t[:] parents = condensed_tree['parent'] - result = [] - to_process = np.array([bfs_root], dtype=np.intp) + process_queue - while to_process.shape[0] > 0: - result.extend(to_process.tolist()) - to_process = hierarchy['child'][np.in1d(hierarchy['parent'], to_process)] + while process_queue.shape[0] > 0: + result.extend(process_queue.tolist()) + process_queue = children[np.isin(parents, process_queue)] return result From e991f00e9f506701efa2cdb1d0a6cd074e21ac64 Mon Sep 17 00:00:00 2001 From: Meekail Zain <34613774+Micky774@users.noreply.github.com> Date: Wed, 5 Apr 2023 10:53:12 -0400 Subject: [PATCH 2/2] Update sklearn/cluster/_hdbscan/_tree.pyx Co-authored-by: Thomas J. Fan --- sklearn/cluster/_hdbscan/_tree.pyx | 1 - 1 file changed, 1 deletion(-) diff --git a/sklearn/cluster/_hdbscan/_tree.pyx b/sklearn/cluster/_hdbscan/_tree.pyx index eec4dae79ef09..120d03d92bec0 100644 --- a/sklearn/cluster/_hdbscan/_tree.pyx +++ b/sklearn/cluster/_hdbscan/_tree.pyx @@ -285,7 +285,6 @@ cdef list bfs_from_cluster_tree( cnp.ndarray[cnp.intp_t, ndim=1] children = condensed_tree['child'] cnp.intp_t[:] parents = condensed_tree['parent'] - process_queue while process_queue.shape[0] > 0: result.extend(process_queue.tolist())