usearch 0.19.2 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/wolfram/lib.cpp CHANGED
@@ -2,9 +2,16 @@
2
2
  #include <usearch/index_punned_dense.hpp>
3
3
 
4
4
  using namespace unum::usearch;
5
+
6
+ using metric_t = index_punned_dense_metric_t;
5
7
  using distance_t = punned_distance_t;
6
- using punned_t = index_punned_dense_gt<int>;
7
- using span_t = span_gt<float>;
8
+ using index_t = punned_small_t;
9
+ using vector_view_t = span_gt<float>;
10
+
11
+ using add_result_t = typename index_t::add_result_t;
12
+ using search_result_t = typename index_t::search_result_t;
13
+ using label_t = typename index_t::label_t;
14
+ using id_t = typename index_t::id_t;
8
15
 
9
16
  EXTERN_C DLLEXPORT int WolframLibrary_initialize(WolframLibraryData libData) { return LIBRARY_NO_ERROR; }
10
17
  EXTERN_C DLLEXPORT void WolframLibrary_uninitialize(WolframLibraryData libData) { return; }
@@ -24,10 +31,10 @@ EXTERN_C DLLEXPORT int IndexCreate(WolframLibraryData libData, mint Argc, MArgum
24
31
 
25
32
  scalar_kind_t accuracy = scalar_kind_from_name(accuracy_cstr, std::strlen(accuracy_cstr));
26
33
  metric_kind_t metric_kind = metric_from_name(metric_cstr, std::strlen(metric_cstr));
27
- punned_t index = make_punned<punned_t>(metric_kind, dimensions, accuracy, config);
34
+ index_t index = make_punned<index_t>(metric_kind, dimensions, accuracy, config);
28
35
  index.reserve(capacity);
29
36
 
30
- punned_t* result_ptr = new punned_t(std::move(index));
37
+ index_t* result_ptr = new index_t(std::move(index));
31
38
  MArgument_setInteger(Res, (long)result_ptr);
32
39
 
33
40
  } catch (...) {
@@ -41,7 +48,7 @@ EXTERN_C DLLEXPORT int IndexCreate(WolframLibraryData libData, mint Argc, MArgum
41
48
 
42
49
  EXTERN_C DLLEXPORT int IndexSave(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
43
50
  char* path_cstr = nullptr;
44
- punned_t* c_ptr = (punned_t*)MArgument_getUTF8String(Args[0]);
51
+ index_t* c_ptr = (index_t*)MArgument_getUTF8String(Args[0]);
45
52
  try {
46
53
  path_cstr = MArgument_getUTF8String(Args[1]);
47
54
  c_ptr->save(path_cstr);
@@ -54,7 +61,7 @@ EXTERN_C DLLEXPORT int IndexSave(WolframLibraryData libData, mint Argc, MArgumen
54
61
 
55
62
  EXTERN_C DLLEXPORT int IndexLoad(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
56
63
  char* path_cstr = nullptr;
57
- punned_t* c_ptr = (punned_t*)MArgument_getUTF8String(Args[0]);
64
+ index_t* c_ptr = (index_t*)MArgument_getUTF8String(Args[0]);
58
65
  try {
59
66
  path_cstr = MArgument_getUTF8String(Args[1]);
60
67
  c_ptr->load(path_cstr);
@@ -67,7 +74,7 @@ EXTERN_C DLLEXPORT int IndexLoad(WolframLibraryData libData, mint Argc, MArgumen
67
74
 
68
75
  EXTERN_C DLLEXPORT int IndexView(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
69
76
  char* path_cstr = nullptr;
70
- punned_t* c_ptr = (punned_t*)MArgument_getUTF8String(Args[0]);
77
+ index_t* c_ptr = (index_t*)MArgument_getUTF8String(Args[0]);
71
78
  try {
72
79
  path_cstr = MArgument_getUTF8String(Args[1]);
73
80
  c_ptr->view(path_cstr);
@@ -79,44 +86,44 @@ EXTERN_C DLLEXPORT int IndexView(WolframLibraryData libData, mint Argc, MArgumen
79
86
  }
80
87
 
81
88
  EXTERN_C DLLEXPORT int IndexDestroy(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
82
- delete (punned_t*)MArgument_getUTF8String(Args[0]);
89
+ delete (index_t*)MArgument_getUTF8String(Args[0]);
83
90
  return LIBRARY_NO_ERROR;
84
91
  }
85
92
 
86
93
  EXTERN_C DLLEXPORT int IndexSize(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
87
- size_t res = ((punned_t*)MArgument_getUTF8String(Args[0]))->size();
94
+ std::size_t res = ((index_t*)MArgument_getUTF8String(Args[0]))->size();
88
95
  MArgument_setInteger(Res, res);
89
96
  return LIBRARY_NO_ERROR;
90
97
  }
91
98
 
92
99
  EXTERN_C DLLEXPORT int IndexConnectivity(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
93
- size_t res = ((punned_t*)MArgument_getUTF8String(Args[0]))->connectivity();
100
+ std::size_t res = ((index_t*)MArgument_getUTF8String(Args[0]))->connectivity();
94
101
  MArgument_setInteger(Res, res);
95
102
  return LIBRARY_NO_ERROR;
96
103
  }
97
104
 
98
105
  EXTERN_C DLLEXPORT int IndexDimensions(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
99
- size_t res = ((punned_t*)MArgument_getUTF8String(Args[0]))->dimensions();
106
+ std::size_t res = ((index_t*)MArgument_getUTF8String(Args[0]))->dimensions();
100
107
  MArgument_setInteger(Res, res);
101
108
  return LIBRARY_NO_ERROR;
102
109
  }
103
110
 
104
111
  EXTERN_C DLLEXPORT int IndexCapacity(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
105
- size_t res = ((punned_t*)MArgument_getUTF8String(Args[0]))->capacity();
112
+ std::size_t res = ((index_t*)MArgument_getUTF8String(Args[0]))->capacity();
106
113
  MArgument_setInteger(Res, res);
107
114
  return LIBRARY_NO_ERROR;
108
115
  }
109
116
 
110
117
  EXTERN_C DLLEXPORT int IndexAdd(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
111
118
  char* path_cstr = nullptr;
112
- punned_t* c_ptr = (punned_t*)MArgument_getUTF8String(Args[0]);
119
+ index_t* c_ptr = (index_t*)MArgument_getUTF8String(Args[0]);
113
120
  float* vector_data = nullptr;
114
121
  try {
115
122
  int label = MArgument_getInteger(Args[1]);
116
123
  MTensor tens = MArgument_getMTensor(Args[2]);
117
- size_t len = libData->MTensor_getFlattenedLength(tens);
124
+ std::size_t len = libData->MTensor_getFlattenedLength(tens);
118
125
  vector_data = (float*)libData->MTensor_getRealData(tens);
119
- span_t vector_span = span_t{vector_data, len};
126
+ vector_view_t vector_span = vector_view_t{vector_data, len};
120
127
  c_ptr->add(label, vector_span);
121
128
  } catch (...) {
122
129
  return LIBRARY_FUNCTION_ERROR;
@@ -125,7 +132,7 @@ EXTERN_C DLLEXPORT int IndexAdd(WolframLibraryData libData, mint Argc, MArgument
125
132
  }
126
133
 
127
134
  EXTERN_C DLLEXPORT int IndexSearch(WolframLibraryData libData, mint Argc, MArgument* Args, MArgument Res) {
128
- punned_t* c_ptr = (punned_t*)MArgument_getUTF8String(Args[0]);
135
+ index_t* c_ptr = (index_t*)MArgument_getUTF8String(Args[0]);
129
136
  MTensor matches;
130
137
  mint dims[] = {1};
131
138
  int wanted = MArgument_getInteger(Args[2]);
@@ -137,12 +144,12 @@ EXTERN_C DLLEXPORT int IndexSearch(WolframLibraryData libData, mint Argc, MArgum
137
144
  libData->MTensor_new(MType_Integer, 1, dims, &matches);
138
145
 
139
146
  MTensor tens = MArgument_getMTensor(Args[1]);
140
- size_t len = libData->MTensor_getFlattenedLength(tens);
147
+ std::size_t len = libData->MTensor_getFlattenedLength(tens);
141
148
  vector_data = (float*)libData->MTensor_getRealData(tens);
142
- span_t vector_span = span_t{vector_data, len};
149
+ vector_view_t vector_span = vector_view_t{vector_data, len};
143
150
 
144
151
  matches_data = (int*)std::malloc(sizeof(int) * wanted);
145
- found = c_ptr->search(vector_span, (size_t)wanted, matches_data, nullptr);
152
+ found = c_ptr->search(vector_span, static_cast<std::size_t>(wanted), matches_data, nullptr);
146
153
  for (mint i = 0; i < found; i++)
147
154
  libData->MTensor_setInteger(matches, &i, matches_data[i]);
148
155