common.hpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION.
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
6 #pragma once
7 
8 #include <stdint.h>
9 
10 namespace ML {
11 
12 // Dense input uses int64_t until FAISS is updated
13 typedef int64_t knn_indices_dense_t;
14 
16 
22 template <typename value_idx, typename value_t>
23 struct knn_graph {
24  knn_graph(value_idx n_rows_, int n_neighbors_)
25  : n_rows(n_rows_), n_neighbors(n_neighbors_), knn_indices{nullptr}, knn_dists{nullptr}
26  {
27  }
28 
29  knn_graph(value_idx n_rows_, int n_neighbors_, value_idx* knn_indices_, value_t* knn_dists_)
30  : n_rows(n_rows_), n_neighbors(n_neighbors_), knn_indices(knn_indices_), knn_dists(knn_dists_)
31  {
32  }
33 
34  value_idx* knn_indices;
35  value_t* knn_dists;
36 
37  value_idx n_rows;
39 };
40 
46 template <typename T>
48  T* y;
49  int n;
50  int d;
51 
52  manifold_inputs_t(T* y_, int n_, int d_) : y(y_), n(n_), d(d_) {}
53 
54  virtual bool alloc_knn_graph() const = 0;
55 };
56 
61 template <typename T>
63  T* X;
64 
65  manifold_dense_inputs_t(T* x_, T* y_, int n_, int d_) : manifold_inputs_t<T>(y_, n_, d_), X(x_) {}
66 
67  bool alloc_knn_graph() const { return true; }
68 };
69 
75 template <typename value_idx, typename T>
77  value_idx* indptr;
78  value_idx* indices;
79  T* data;
80 
81  size_t nnz;
82 
84  value_idx* indptr_, value_idx* indices_, T* data_, T* y_, size_t nnz_, int n_, int d_)
85  : manifold_inputs_t<T>(y_, n_, d_), indptr(indptr_), indices(indices_), data(data_), nnz(nnz_)
86  {
87  }
88 
89  bool alloc_knn_graph() const { return true; }
90 };
91 
97 template <typename value_idx, typename value_t>
100  value_idx* knn_indices_, value_t* knn_dists_, value_t* y_, int n_, int d_, int n_neighbors_)
101  : manifold_inputs_t<value_t>(y_, n_, d_), knn_graph(n_, n_neighbors_, knn_indices_, knn_dists_)
102  {
103  }
104 
106 
107  bool alloc_knn_graph() const { return false; }
108 };
109 
110 }; // end namespace ML
Definition: dbscan.hpp:18
int64_t knn_indices_dense_t
Definition: common.hpp:13
int knn_indices_sparse_t
Definition: common.hpp:15
Definition: common.hpp:23
int n_neighbors
Definition: common.hpp:38
value_idx n_rows
Definition: common.hpp:37
value_idx * knn_indices
Definition: common.hpp:34
knn_graph(value_idx n_rows_, int n_neighbors_, value_idx *knn_indices_, value_t *knn_dists_)
Definition: common.hpp:29
value_t * knn_dists
Definition: common.hpp:35
knn_graph(value_idx n_rows_, int n_neighbors_)
Definition: common.hpp:24
Definition: common.hpp:62
bool alloc_knn_graph() const
Definition: common.hpp:67
T * X
Definition: common.hpp:63
manifold_dense_inputs_t(T *x_, T *y_, int n_, int d_)
Definition: common.hpp:65
Definition: common.hpp:47
virtual bool alloc_knn_graph() const =0
manifold_inputs_t(T *y_, int n_, int d_)
Definition: common.hpp:52
T * y
Definition: common.hpp:48
int d
Definition: common.hpp:50
int n
Definition: common.hpp:49
Definition: common.hpp:98
bool alloc_knn_graph() const
Definition: common.hpp:107
knn_graph< value_idx, value_t > knn_graph
Definition: common.hpp:105
Definition: common.hpp:76
value_idx * indices
Definition: common.hpp:78
size_t nnz
Definition: common.hpp:81
manifold_sparse_inputs_t(value_idx *indptr_, value_idx *indices_, T *data_, T *y_, size_t nnz_, int n_, int d_)
Definition: common.hpp:83
bool alloc_knn_graph() const
Definition: common.hpp:89
value_idx * indptr
Definition: common.hpp:77
T * data
Definition: common.hpp:79