Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

important doc updates for core, cluster, and neighbors #933

Merged
merged 9 commits into from
Oct 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
533 changes: 504 additions & 29 deletions cpp/include/raft/cluster/kmeans.cuh

Large diffs are not rendered by default.

13 changes: 9 additions & 4 deletions cpp/include/raft/cluster/kmeans_types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@
#include <raft/distance/distance_types.hpp>
#include <raft/random/rng_state.hpp>

namespace raft {
namespace cluster {
namespace raft::cluster::kmeans {

struct KMeansParams {
enum InitMethod { KMeansPlusPlus, Random, Array };
Expand Down Expand Up @@ -69,5 +68,11 @@ struct KMeansParams {

bool inertia_check = false;
};
} // namespace cluster
} // namespace raft

} // namespace raft::cluster::kmeans

namespace raft::cluster {

using kmeans::KMeansParams;

} // namespace raft::cluster
31 changes: 20 additions & 11 deletions cpp/include/raft/cluster/single_linkage.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@

namespace raft::cluster {

constexpr int DEFAULT_CONST_C = 15;
/**
* Note: All of the functions below in the raft::cluster namespace are deprecated
* and will be removed in a future release. Please use raft::cluster::hierarchy
* instead.
*/

/**
* Single-linkage clustering, capable of constructing a KNN graph to
Expand Down Expand Up @@ -58,6 +62,11 @@ void single_linkage(const raft::handle_t& handle,
detail::single_linkage<value_idx, value_t, dist_type>(
handle, X, m, n, metric, out, c, n_clusters);
}
}; // namespace raft::cluster

namespace raft::cluster::hierarchy {

constexpr int DEFAULT_CONST_C = 15;

/**
* Single-linkage clustering, capable of constructing a KNN graph to
Expand Down Expand Up @@ -90,14 +99,14 @@ void single_linkage(const raft::handle_t& handle,
out_arrs.children = dendrogram.data_handle();
out_arrs.labels = labels.data_handle();

single_linkage<idx_t, value_t, dist_type>(handle,
X.data_handle(),
static_cast<std::size_t>(X.extent(0)),
static_cast<std::size_t>(X.extent(1)),
metric,
&out_arrs,
c.has_value() ? c.value() : DEFAULT_CONST_C,
n_clusters);
raft::cluster::single_linkage<idx_t, value_t, dist_type>(
handle,
X.data_handle(),
static_cast<std::size_t>(X.extent(0)),
static_cast<std::size_t>(X.extent(1)),
metric,
&out_arrs,
c.has_value() ? c.value() : DEFAULT_CONST_C,
n_clusters);
}

}; // namespace raft::cluster
}; // namespace raft::cluster::hierarchy
8 changes: 7 additions & 1 deletion cpp/include/raft/cluster/single_linkage_types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,15 @@

#include <raft/core/device_mdspan.hpp>

namespace raft::cluster::hierarchy {
enum LinkageDistance { PAIRWISE = 0, KNN_GRAPH = 1 };

}; // end namespace raft::cluster::hierarchy

// The code below is legacy
namespace raft::cluster {

enum LinkageDistance { PAIRWISE = 0, KNN_GRAPH = 1 };
using hierarchy::LinkageDistance;

/**
* Simple POCO for consolidating linkage results. This closely
Expand Down
2 changes: 1 addition & 1 deletion cpp/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ if(BUILD_TESTS)
PATH
test/cluster/kmeans.cu
test/cluster_solvers.cu
test/sparse/linkage.cu
test/cluster/linkage.cu
OPTIONAL DIST NN
)

Expand Down
21 changes: 11 additions & 10 deletions cpp/test/sparse/linkage.cu → cpp/test/cluster/linkage.cu
Original file line number Diff line number Diff line change
Expand Up @@ -180,20 +180,21 @@ class LinkageTest : public ::testing::TestWithParam<LinkageInputs<T, IdxT>> {

raft::handle_t handle;

auto data_view =
raft::make_device_matrix_view<T, IdxT, row_major>(data.data(), params.n_row, params.n_col);
auto data_view = raft::make_device_matrix_view<const T, IdxT, row_major>(
data.data(), params.n_row, params.n_col);
auto dendrogram_view =
raft::make_device_matrix_view<IdxT, IdxT, row_major>(out_children.data(), params.n_row, 2);
auto labels_view = raft::make_device_vector_view<IdxT, IdxT>(labels.data(), params.n_row);

raft::cluster::single_linkage<T, IdxT, raft::hierarchy::LinkageDistance::KNN_GRAPH>(
handle,
data_view,
dendrogram_view,
labels_view,
raft::distance::DistanceType::L2SqrtExpanded,
params.n_clusters,
std::make_optional<int>(params.c));
raft::cluster::hierarchy::
single_linkage<T, IdxT, raft::cluster::hierarchy::LinkageDistance::KNN_GRAPH>(
handle,
data_view,
dendrogram_view,
labels_view,
raft::distance::DistanceType::L2SqrtExpanded,
params.n_clusters,
std::make_optional<int>(params.c));

handle.sync_stream(stream);

Expand Down
48 changes: 0 additions & 48 deletions cpp/test/cluster_solvers_deprecated.cu
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include <raft/core/handle.hpp>

#include <raft/spectral/cluster_solvers_deprecated.cuh>
#include <raft/spectral/modularity_maximization.cuh>

namespace raft {
namespace spectral {
Expand Down Expand Up @@ -54,52 +53,5 @@ TEST(Raft, ClusterSolvers)
EXPECT_ANY_THROW(cluster_solver.solve(h, n, d, eigvecs, codes));
}

TEST(Raft, ModularitySolvers)
{
using namespace matrix;
using index_type = int;
using value_type = double;

handle_t h;
ASSERT_EQ(0,
h.

get_device()

);

index_type neigvs{10};
index_type maxiter{100};
index_type restart_iter{10};
value_type tol{1.0e-10};
bool reorthog{true};

// nullptr expected to trigger exceptions:
//
index_type* clusters{nullptr};
value_type* eigvals{nullptr};
value_type* eigvecs{nullptr};

unsigned long long seed{100110021003};

eigen_solver_config_t<index_type, value_type> eig_cfg{
neigvs, maxiter, restart_iter, tol, reorthog, seed};
lanczos_solver_t<index_type, value_type> eig_solver{eig_cfg};

index_type k{5};

cluster_solver_config_deprecated_t<index_type, value_type> clust_cfg{k, maxiter, tol, seed};
kmeans_solver_deprecated_t<index_type, value_type> cluster_solver{clust_cfg};

auto stream = h.get_stream();
sparse_matrix_t<index_type, value_type> sm{h, nullptr, nullptr, nullptr, 0, 0};

EXPECT_ANY_THROW(spectral::modularity_maximization(
h, sm, eig_solver, cluster_solver, clusters, eigvals, eigvecs));

value_type modularity{0};
EXPECT_ANY_THROW(spectral::analyzeModularity(h, sm, k, clusters, modularity));
}

} // namespace spectral
} // namespace raft
7 changes: 4 additions & 3 deletions docs/source/cpp_api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ RAFT C++ API Reference
:maxdepth: 4

cpp_api/core.rst
cpp_api/clustering.rst
cpp_api/cluster.rst
cpp_api/distance.rst
cpp_api/linalg.rst
cpp_api/matrix.rst
cpp_api/optimization.rst
cpp_api/neighbors.rst
cpp_api/solver.rst
cpp_api/random.rst
cpp_api/spatial.rst
cpp_api/sparse.rst
cpp_api/stats.rst
27 changes: 27 additions & 0 deletions docs/source/cpp_api/cluster.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
Cluster
=======

This page provides C++ class references for the publicly-exposed elements of the cluster package.

K-Means
-------

.. doxygennamespace:: raft::cluster::kmeans
:project: RAFT
:members:


Hierarchical Clustering
-----------------------

.. doxygennamespace:: raft::cluster::hierarchy
:project: RAFT
:members:


Spectral Clustering
-------------------

.. doxygennamespace:: raft::spectral
:project: RAFT
:members:
12 changes: 0 additions & 12 deletions docs/source/cpp_api/clustering.rst

This file was deleted.

63 changes: 61 additions & 2 deletions docs/source/cpp_api/core.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ Core
This page provides C++ class references for the publicly-exposed elements of the core package.



handle_t
########

Expand All @@ -20,6 +19,13 @@ interruptible
:project: RAFT
:members:

NVTX
####

.. doxygennamespace:: raft::common::nvtx
:project: RAFT
:members:


mdarray
#######
Expand All @@ -28,11 +34,64 @@ mdarray
:project: RAFT
:members:

.. doxygenclass:: raft::make_device_matrix
:project: RAFT

.. doxygenclass:: raft::make_device_vector
:project: RAFT

.. doxygenclass:: raft::make_device_scalar
:project: RAFT

.. doxygenclass:: raft::make_host_matrix
:project: RAFT

.. doxygenclass:: raft::make_host_vector
:project: RAFT

.. doxygenclass:: raft::make_device_scalar
:project: RAFT


mdspan
#######

.. doxygenfunction:: raft::make_device_mdspan
:project: RAFT

.. doxygenfunction:: raft::make_device_matrix_view
:project: RAFT

.. doxygenfunction:: raft::make_device_vector_view
:project: RAFT

.. doxygenfunction:: raft::make_device_scalar_view
:project: RAFT

.. doxygenfunction:: raft::make_host_matrix_view
:project: RAFT

.. doxygenfunction:: raft::make_host_vector_view
:project: RAFT

.. doxygenfunction:: raft::make_device_scalar_view
:project: RAFT

span
####

.. doxygenclass:: raft::span
.. doxygenclass:: raft::device_span
:project: RAFT
:members:

.. doxygenclass:: raft::host_span
:project: RAFT
:members:

Key-Value Pair
##############

.. doxygenclass:: raft::KeyValuePair
:project: RAFT
:members:

Expand Down
10 changes: 10 additions & 0 deletions docs/source/cpp_api/distance.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Distance
========

This page provides C++ class references for the publicly-exposed elements of the distance package.

Distance
########

.. doxygennamespace:: raft::distance
:project: RAFT
43 changes: 43 additions & 0 deletions docs/source/cpp_api/neighbors.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Neighbors
=========

This page provides C++ class references for the publicly-exposed elements of the neighbors package.


Brute-force
-----------

.. doxygennamespace:: raft::neighbors::brute_force
:project: RAFT


IVF-Flat
--------

.. doxygennamespace:: raft::neighbors::ivf_flat
:project: RAFT
:members:


IVF-PQ
--------

.. doxygennamespace:: raft::neighbors::ivf_pq
:project: RAFT
:members:


Epsilon Neighborhood
--------------------

.. doxygennamespace:: raft::neighbors::epsilon_neighborhood
:project: RAFT
:members:


Random Ball Cover
-----------------

.. doxygennamespace:: raft::neighbors::ball_cover
:project: RAFT
:members:
Loading