usearch 2.9.2 → 2.10.1
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/README.md +39 -38
- package/javascript/{types → dist/cjs}/usearch.d.ts +90 -115
- package/javascript/dist/cjs/usearch.js +531 -0
- package/javascript/dist/esm/usearch.d.ts +212 -0
- package/javascript/{usearch.js → dist/esm/usearch.js} +199 -153
- package/package.json +25 -23
- package/prebuilds/darwin-arm64+x64/usearch.node +0 -0
- package/prebuilds/linux-arm64/usearch.node +0 -0
- package/prebuilds/linux-x64/usearch.node +0 -0
- package/prebuilds/win32-ia32/usearch.node +0 -0
- package/prebuilds/win32-x64/usearch.node +0 -0
- package/.clang-format +0 -10
- package/.clang-tidy +0 -60
- package/.cmake-format.py +0 -19
- package/.dockerignore +0 -93
- package/.gitattributes +0 -9
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -90
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -64
- package/.github/workflows/Dockerfile.libs +0 -36
- package/.github/workflows/prerelease.yml +0 -331
- package/.github/workflows/release.yml +0 -722
- package/.github/workflows/update_version.sh +0 -15
- package/.gitmodules +0 -9
- package/.releaserc +0 -90
- package/CITATION.cff +0 -11
- package/CMakeLists.txt +0 -324
- package/CODE_OF_CONDUCT.md +0 -128
- package/CONTRIBUTING.md +0 -361
- package/Cargo.toml +0 -19
- package/Dockerfile +0 -16
- package/VERSION +0 -1
- package/assets/unum.png +0 -0
- package/assets/usearch-approaches-transparent.png +0 -0
- package/assets/usearch-approaches-white.png +0 -0
- package/assets/usearch-neighbor-types.png +0 -0
- package/binding.gyp +0 -87
- package/build.gradle +0 -204
- package/build.rs +0 -18
- package/c/CMakeLists.txt +0 -25
- package/c/README.md +0 -34
- package/c/lib.cpp +0 -358
- package/c/test.c +0 -382
- package/c/usearch.h +0 -311
- package/cmake/clipp.cmake +0 -7
- package/cmake/config.cmake.in +0 -15
- package/cmake/emscripten.cmake +0 -8
- package/cmake/jemalloc.cmake +0 -62
- package/cmake/pkg-config.pc.in +0 -4
- package/cmake/usearchConfigVersion.cmake.in +0 -20
- package/conanfile.py +0 -26
- package/cpp/CMakeLists.txt +0 -14
- package/cpp/README.md +0 -161
- package/cpp/bench.cpp +0 -618
- package/cpp/test.cpp +0 -323
- package/fp16/CMakeLists.txt +0 -176
- package/fp16/LICENSE +0 -11
- package/fp16/README.md +0 -20
- package/fp16/bench/alt-element.cc +0 -89
- package/fp16/bench/from-alt-array.cc +0 -175
- package/fp16/bench/from-ieee-array.cc +0 -399
- package/fp16/bench/ieee-element.cc +0 -272
- package/fp16/bench/to-alt-array.cc +0 -91
- package/fp16/bench/to-ieee-array.cc +0 -303
- package/fp16/cmake/DownloadGoogleBenchmark.cmake +0 -15
- package/fp16/cmake/DownloadGoogleTest.cmake +0 -15
- package/fp16/cmake/DownloadPSimd.cmake +0 -15
- package/fp16/configure.py +0 -65
- package/fp16/confu.yaml +0 -8
- package/fp16/include/fp16/__init__.py +0 -0
- package/fp16/include/fp16/avx.py +0 -50
- package/fp16/include/fp16/avx2.py +0 -53
- package/fp16/include/fp16/bitcasts.h +0 -92
- package/fp16/include/fp16/fp16.h +0 -451
- package/fp16/include/fp16/psimd.h +0 -131
- package/fp16/include/fp16.h +0 -11
- package/fp16/jni/Android.mk +0 -6
- package/fp16/jni/Application.mk +0 -4
- package/fp16/test/alt-from-fp32-value.cc +0 -498
- package/fp16/test/alt-to-fp32-bits.cc +0 -263
- package/fp16/test/alt-to-fp32-psimd.cc +0 -145
- package/fp16/test/alt-to-fp32-value.cc +0 -348
- package/fp16/test/alt-to-fp32x2-psimd.cc +0 -245
- package/fp16/test/bitcasts.cc +0 -56
- package/fp16/test/ieee-from-fp32-value.cc +0 -523
- package/fp16/test/ieee-to-fp32-bits.cc +0 -333
- package/fp16/test/ieee-to-fp32-psimd.cc +0 -312
- package/fp16/test/ieee-to-fp32-value.cc +0 -420
- package/fp16/test/ieee-to-fp32x2-psimd.cc +0 -541
- package/fp16/test/peachpy/alt-xmm-to-fp32-xmm-avx.cc +0 -96
- package/fp16/test/peachpy/alt-xmm-to-fp32-ymm-avx2.cc +0 -96
- package/fp16/test/peachpy/stubs.py +0 -38
- package/fp16/test/tables.cc +0 -530
- package/fp16/test/tables.h +0 -13
- package/fp16/third-party/THHalf.h +0 -92
- package/fp16/third-party/eigen-half.h +0 -170
- package/fp16/third-party/float16-compressor.h +0 -80
- package/fp16/third-party/half.hpp +0 -2916
- package/fp16/third-party/npy-halffloat.h +0 -328
- package/include/usearch/index.hpp +0 -3836
- package/include/usearch/index_dense.hpp +0 -2004
- package/include/usearch/index_plugins.hpp +0 -2213
- package/javascript/lib.cpp +0 -341
- package/javascript/types/usearch.d.ts.map +0 -1
- package/javascript/usearch.test.js +0 -74
- package/package-ci.json +0 -10
- package/pyproject.toml +0 -51
- package/setup.py +0 -201
- package/simsimd/.releaserc +0 -86
- package/simsimd/CONTRIBUTING.md +0 -88
- package/simsimd/Cargo.lock +0 -709
- package/simsimd/Cargo.toml +0 -44
- package/simsimd/LICENSE +0 -201
- package/simsimd/README.md +0 -317
- package/simsimd/binding.gyp +0 -36
- package/simsimd/build.rs +0 -20
- package/simsimd/include/simsimd/binary.h +0 -245
- package/simsimd/include/simsimd/complex.h +0 -174
- package/simsimd/include/simsimd/probability.h +0 -548
- package/simsimd/include/simsimd/simsimd.h +0 -465
- package/simsimd/include/simsimd/spatial.h +0 -1267
- package/simsimd/include/simsimd/types.h +0 -208
- package/simsimd/javascript/bench.js +0 -127
- package/simsimd/javascript/fallback.ts +0 -193
- package/simsimd/javascript/lib.c +0 -102
- package/simsimd/javascript/node-gyp-build.d.ts +0 -1
- package/simsimd/javascript/simsimd.ts +0 -124
- package/simsimd/javascript/test.mjs +0 -153
- package/simsimd/javascript/tsconfig-base.json +0 -25
- package/simsimd/javascript/tsconfig-cjs.json +0 -8
- package/simsimd/javascript/tsconfig-esm.json +0 -8
- package/simsimd/package-lock.json +0 -1688
- package/simsimd/package.json +0 -61
- package/simsimd/rust/benches/cosine.rs +0 -27
- package/simsimd/rust/benches/native.rs +0 -30
- package/simsimd/rust/benches/sqeuclidean.rs +0 -27
- package/simsimd/rust/lib.c +0 -45
- package/simsimd/rust/lib.rs +0 -550
- package/sqlite/README.md +0 -178
- package/sqlite/lib.cpp +0 -325
- package/stringzilla/CONTRIBUTING.md +0 -446
- package/stringzilla/Cargo.lock +0 -25
- package/stringzilla/Cargo.toml +0 -26
- package/stringzilla/LICENSE +0 -201
- package/stringzilla/README.md +0 -1422
- package/stringzilla/VERSION +0 -1
- package/stringzilla/assets/cover-strinzilla.jpeg +0 -0
- package/stringzilla/assets/meme-stringzilla-v2.jpeg +0 -0
- package/stringzilla/assets/meme-stringzilla-v3.jpeg +0 -0
- package/stringzilla/binding.gyp +0 -16
- package/stringzilla/build.rs +0 -87
- package/stringzilla/c/lib.c +0 -337
- package/stringzilla/cli/README.md +0 -65
- package/stringzilla/cli/__init__.py +0 -0
- package/stringzilla/cli/split.py +0 -105
- package/stringzilla/cli/wc.py +0 -117
- package/stringzilla/include/stringzilla/experimental.h +0 -845
- package/stringzilla/include/stringzilla/module.modulemap +0 -9
- package/stringzilla/include/stringzilla/stringzilla.h +0 -5370
- package/stringzilla/include/stringzilla/stringzilla.hpp +0 -3838
- package/stringzilla/javascript/lib.c +0 -125
- package/stringzilla/javascript/stringzilla.js +0 -22
- package/stringzilla/package-ci.json +0 -10
- package/stringzilla/package.json +0 -32
- package/stringzilla/rust/lib.rs +0 -873
- package/stringzilla/swift/StringProtocol+StringZilla.swift +0 -280
- package/stringzilla/swift/Test.swift +0 -60
- package/tsconfig.json +0 -21
- package/wasmer.toml +0 -12
- package/winlibinstaller.bat +0 -42
- /package/{simsimd/javascript/dist-package-cjs.json → javascript/dist/cjs/package.json} +0 -0
- /package/{simsimd/javascript/dist-package-esm.json → javascript/dist/esm/package.json} +0 -0
package/README.md
CHANGED
|
@@ -192,6 +192,44 @@ When compared to FAISS's `IndexFlatL2` in Google Colab, __[USearch may offer up
|
|
|
192
192
|
- `faiss.IndexFlatL2`: __55.3 ms__.
|
|
193
193
|
- `usearch.index.search`: __2.54 ms__.
|
|
194
194
|
|
|
195
|
+
## User-Defined Functions
|
|
196
|
+
|
|
197
|
+
While most vector search packages concentrate on just a few metrics - "Inner Product distance" and "Euclidean distance," USearch extends this list to include any user-defined metrics.
|
|
198
|
+
This flexibility allows you to customize your search for various applications, from computing geospatial coordinates with the rare [Haversine][haversine] distance to creating custom metrics for composite embeddings from multiple AI models.
|
|
199
|
+
|
|
200
|
+

|
|
201
|
+
|
|
202
|
+
Unlike older approaches indexing high-dimensional spaces, like KD-Trees and Locality Sensitive Hashing, HNSW doesn't require vectors to be identical in length.
|
|
203
|
+
They only have to be comparable.
|
|
204
|
+
So you can apply it in [obscure][obscure] applications, like searching for similar sets or fuzzy text matching, using [GZip][gzip-similarity] as a distance function.
|
|
205
|
+
|
|
206
|
+
> Read more about [JIT and UDF in USearch Python SDK](https://unum-cloud.github.io/usearch/python#user-defined-metrics-and-jit-in-python).
|
|
207
|
+
|
|
208
|
+
[haversine]: https://ashvardanian.com/posts/abusing-vector-search#geo-spatial-indexing
|
|
209
|
+
[obscure]: https://ashvardanian.com/posts/abusing-vector-search
|
|
210
|
+
[gzip-similarity]: https://twitter.com/LukeGessler/status/1679211291292889100?s=20
|
|
211
|
+
|
|
212
|
+
## Memory Efficiency, Downcasting, and Quantization
|
|
213
|
+
|
|
214
|
+
Training a quantization model and dimension-reduction is a common approach to accelerate vector search.
|
|
215
|
+
Those, however, are only sometimes reliable, can significantly affect the statistical properties of your data, and require regular adjustments if your distribution shifts.
|
|
216
|
+
Instead, we have focused on high-precision arithmetic over low-precision downcasted vectors.
|
|
217
|
+
The same index, and `add` and `search` operations will automatically down-cast or up-cast between `f64_t`, `f32_t`, `f16_t`, `i8_t`, and single-bit representations.
|
|
218
|
+
You can use the following command to check, if hardware acceleration is enabled:
|
|
219
|
+
|
|
220
|
+
```sh
|
|
221
|
+
$ python -c 'from usearch.index import Index; print(Index(ndim=768, metric="cos", dtype="f16").hardware_acceleration)'
|
|
222
|
+
> sapphire
|
|
223
|
+
$ python -c 'from usearch.index import Index; print(Index(ndim=166, metric="tanimoto").hardware_acceleration)'
|
|
224
|
+
> ice
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Using smaller numeric types will save you RAM needed to store the vectors, but you can also compress the neighbors lists forming our proximity graphs.
|
|
228
|
+
By default, 32-bit `uint32_t` is used to enumerate those, which is not enough if you need to address over 4 Billion entries.
|
|
229
|
+
For such cases we provide a custom `uint40_t` type, that will still be 37.5% more space-efficient than the commonly used 8-byte integers, and will scale up to 1 Trillion entries.
|
|
230
|
+
|
|
231
|
+

|
|
232
|
+
|
|
195
233
|
## `Indexes` for Multi-Index Lookups
|
|
196
234
|
|
|
197
235
|
For larger workloads targeting billions or even trillions of vectors, parallel multi-index lookups become invaluable.
|
|
@@ -264,43 +302,6 @@ pairs: dict = men.join(women, max_proposals=0, exact=False)
|
|
|
264
302
|
|
|
265
303
|
> Read more in the post: [Combinatorial Stable Marriages for Semantic Search 💍](https://ashvardanian.com/posts/searching-stable-marriages)
|
|
266
304
|
|
|
267
|
-
## User-Defined Functions
|
|
268
|
-
|
|
269
|
-
While most vector search packages concentrate on just a few metrics - "Inner Product distance" and "Euclidean distance," USearch extends this list to include any user-defined metrics.
|
|
270
|
-
This flexibility allows you to customize your search for various applications, from computing geospatial coordinates with the rare [Haversine][haversine] distance to creating custom metrics for composite embeddings from multiple AI models.
|
|
271
|
-
|
|
272
|
-

|
|
273
|
-
|
|
274
|
-
Unlike older approaches indexing high-dimensional spaces, like KD-Trees and Locality Sensitive Hashing, HNSW doesn't require vectors to be identical in length.
|
|
275
|
-
They only have to be comparable.
|
|
276
|
-
So you can apply it in [obscure][obscure] applications, like searching for similar sets or fuzzy text matching, using [GZip][gzip-similarity] as a distance function.
|
|
277
|
-
|
|
278
|
-
> Read more about [JIT and UDF in USearch Python SDK](https://unum-cloud.github.io/usearch/python#user-defined-metrics-and-jit-in-python).
|
|
279
|
-
|
|
280
|
-
[haversine]: https://ashvardanian.com/posts/abusing-vector-search#geo-spatial-indexing
|
|
281
|
-
[obscure]: https://ashvardanian.com/posts/abusing-vector-search
|
|
282
|
-
[gzip-similarity]: https://twitter.com/LukeGessler/status/1679211291292889100?s=20
|
|
283
|
-
|
|
284
|
-
## Memory Efficiency, Downcasting, and Quantization
|
|
285
|
-
|
|
286
|
-
Training a quantization model and dimension-reduction is a common approach to accelerate vector search.
|
|
287
|
-
Those, however, are only sometimes reliable, can significantly affect the statistical properties of your data, and require regular adjustments if your distribution shifts.
|
|
288
|
-
Instead, we have focused on high-precision arithmetic over low-precision downcasted vectors.
|
|
289
|
-
The same index, and `add` and `search` operations will automatically down-cast or up-cast between `f64_t`, `f32_t`, `f16_t`, `i8_t`, and single-bit representations.
|
|
290
|
-
You can use the following command to check, if hardware acceleration is enabled:
|
|
291
|
-
|
|
292
|
-
```sh
|
|
293
|
-
$ python -c 'from usearch.index import Index; print(Index(ndim=768, metric="cos", dtype="f16").hardware_acceleration)'
|
|
294
|
-
> avx512+f16
|
|
295
|
-
$ python -c 'from usearch.index import Index; print(Index(ndim=166, metric="tanimoto").hardware_acceleration)'
|
|
296
|
-
> avx512+popcnt
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
Using smaller numeric types will save you RAM needed to store the vectors, but you can also compress the neighbors lists forming our proximity graphs.
|
|
300
|
-
By default, 32-bit `uint32_t` is used to enumerate those, which is not enough if you need to address over 4 Billion entries.
|
|
301
|
-
For such cases we provide a custom `uint40_t` type, that will still be 37.5% more space-efficient than the commonly used 8-byte integers, and will scale up to 1 Trillion entries.
|
|
302
|
-
|
|
303
|
-

|
|
304
305
|
|
|
305
306
|
## Functionality
|
|
306
307
|
|
|
@@ -431,7 +432,7 @@ doi = {10.5281/zenodo.7949416},
|
|
|
431
432
|
author = {Vardanian, Ash},
|
|
432
433
|
title = {{USearch by Unum Cloud}},
|
|
433
434
|
url = {https://github.com/unum-cloud/usearch},
|
|
434
|
-
version = {2.
|
|
435
|
+
version = {2.10.1},
|
|
435
436
|
year = {2023},
|
|
436
437
|
month = oct,
|
|
437
438
|
}
|
|
@@ -1,4 +1,87 @@
|
|
|
1
|
-
|
|
1
|
+
type Vector = Float32Array | Float64Array | Int8Array;
|
|
2
|
+
type Matrix = Vector[];
|
|
3
|
+
type VectorOrMatrix = Vector | Matrix;
|
|
4
|
+
/**
|
|
5
|
+
* Enumeration representing the various metric kinds used to measure the distance between vectors in the index.
|
|
6
|
+
* @enum {string}
|
|
7
|
+
* @readonly
|
|
8
|
+
*/
|
|
9
|
+
export declare enum MetricKind {
|
|
10
|
+
Unknown = "unknown",
|
|
11
|
+
Cos = "cos",
|
|
12
|
+
IP = "ip",
|
|
13
|
+
L2sq = "l2sq",
|
|
14
|
+
Haversine = "haversine",
|
|
15
|
+
Divergence = "divergence",
|
|
16
|
+
Pearson = "pearson",
|
|
17
|
+
Jaccard = "jaccard",
|
|
18
|
+
Hamming = "hamming",
|
|
19
|
+
Tanimoto = "tanimoto",
|
|
20
|
+
Sorensen = "sorensen"
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Enumeration representing the various scalar kinds used to define the type of scalar values in vectors.
|
|
24
|
+
* @enum {string}
|
|
25
|
+
* @readonly
|
|
26
|
+
*/
|
|
27
|
+
export declare enum ScalarKind {
|
|
28
|
+
Unknown = "unknown",
|
|
29
|
+
F32 = "f32",
|
|
30
|
+
F64 = "f64",
|
|
31
|
+
F16 = "f16",
|
|
32
|
+
I8 = "i8",
|
|
33
|
+
B1 = "b1"
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Represents a set of search results.
|
|
37
|
+
*/
|
|
38
|
+
export declare class Matches {
|
|
39
|
+
keys: BigUint64Array;
|
|
40
|
+
distances: Float32Array;
|
|
41
|
+
/**
|
|
42
|
+
* Constructs a Matches object.
|
|
43
|
+
*
|
|
44
|
+
* @param {BigUint64Array} keys - The keys of the nearest neighbors found.
|
|
45
|
+
* @param {Float32Array} distances - The distances of the nearest neighbors found.
|
|
46
|
+
*/
|
|
47
|
+
constructor(keys: BigUint64Array, distances: Float32Array);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Represents a set of batched search results.
|
|
51
|
+
*/
|
|
52
|
+
export declare class BatchMatches {
|
|
53
|
+
keys: BigUint64Array;
|
|
54
|
+
distances: Float32Array;
|
|
55
|
+
counts: BigUint64Array;
|
|
56
|
+
k: number;
|
|
57
|
+
/**
|
|
58
|
+
* Constructs a BatchMatches object.
|
|
59
|
+
*
|
|
60
|
+
* @param {BigUint64Array} keys - The keys of the nearest neighbors found in the batch.
|
|
61
|
+
* @param {Float32Array} distances - The distances of the nearest neighbors found in the batch.
|
|
62
|
+
* @param {BigUint64Array} counts - The number of neighbors found for each query in the batch.
|
|
63
|
+
* @param {number} k - The limit for search results per query in the batch.
|
|
64
|
+
*/
|
|
65
|
+
constructor(keys: BigUint64Array, distances: Float32Array, counts: BigUint64Array, k: number);
|
|
66
|
+
/**
|
|
67
|
+
* Retrieves a Matches object at the specified index in the batch.
|
|
68
|
+
*
|
|
69
|
+
* @param {number} i - The index at which to retrieve the Matches object.
|
|
70
|
+
* @returns {Matches} - A Matches object representing the search results at the specified index in the batch.
|
|
71
|
+
*/
|
|
72
|
+
get(i: number): Matches;
|
|
73
|
+
}
|
|
74
|
+
export interface IndexCongif {
|
|
75
|
+
dimensions: number;
|
|
76
|
+
metric: MetricKind;
|
|
77
|
+
quantization: ScalarKind;
|
|
78
|
+
connectivity: number;
|
|
79
|
+
expansion_add: number;
|
|
80
|
+
expansion_search: number;
|
|
81
|
+
multi: boolean;
|
|
82
|
+
}
|
|
83
|
+
export declare class Index {
|
|
84
|
+
#private;
|
|
2
85
|
/**
|
|
3
86
|
* Constructs a new index.
|
|
4
87
|
*
|
|
@@ -11,16 +94,7 @@ export class Index {
|
|
|
11
94
|
* @param {boolean} [multi=false] - Optional, default is false.
|
|
12
95
|
* @throws Will throw an error if any of the parameters are of incorrect type or invalid value.
|
|
13
96
|
*/
|
|
14
|
-
constructor(dimensionsOrConfigs: number |
|
|
15
|
-
dimensions: number;
|
|
16
|
-
metric: MetricKind;
|
|
17
|
-
quantization: ScalarKind;
|
|
18
|
-
connectivity: number;
|
|
19
|
-
expansion_add: number;
|
|
20
|
-
expansion_search: number;
|
|
21
|
-
multi: boolean;
|
|
22
|
-
}, metric?: MetricKind, quantization?: ScalarKind, connectivity?: number, expansion_add?: number, expansion_search?: number, multi?: boolean);
|
|
23
|
-
_compiledIndex: any;
|
|
97
|
+
constructor(dimensionsOrConfigs: number | bigint | IndexCongif, metric?: MetricKind, quantization?: ScalarKind, connectivity?: number, expansion_add?: number, expansion_search?: number, multi?: boolean);
|
|
24
98
|
/**
|
|
25
99
|
* Add vectors to the index.
|
|
26
100
|
*
|
|
@@ -43,7 +117,7 @@ export class Index {
|
|
|
43
117
|
* @throws Will throw an error if the length of keys doesn't match the number of vectors
|
|
44
118
|
* or if it's not a single key.
|
|
45
119
|
*/
|
|
46
|
-
add(keys: bigint | bigint[] | BigUint64Array, vectors:
|
|
120
|
+
add(keys: bigint | bigint[] | BigUint64Array, vectors: Vector): void;
|
|
47
121
|
/**
|
|
48
122
|
* Perform a k-nearest neighbor search on the index.
|
|
49
123
|
*
|
|
@@ -59,13 +133,13 @@ export class Index {
|
|
|
59
133
|
* query vector. If there are not enough results for a query, the result array is
|
|
60
134
|
* padded with -1s.
|
|
61
135
|
*
|
|
62
|
-
* @param {Float32Array|Float64Array|Int8Array|Array<Array<number>>} vectors - Input matrix representing query vectors, can be a TypedArray or an array of
|
|
136
|
+
* @param {Float32Array|Float64Array|Int8Array|Array<Array<number>>} vectors - Input matrix representing query vectors, can be a TypedArray or an array of TypedArray.
|
|
63
137
|
* @param {number} k - The number of nearest neighbors to search for each query vector.
|
|
64
138
|
* @return {Matches|BatchMatches} - Search results for one or more queries, containing keys, distances, and counts of the matches found.
|
|
65
139
|
* @throws Will throw an error if `k` is not a positive integer or if the size of the vectors is not a multiple of dimensions.
|
|
66
|
-
* @throws Will throw an error if `vectors` is not a valid input type (TypedArray or an array of
|
|
140
|
+
* @throws Will throw an error if `vectors` is not a valid input type (TypedArray or an array of TypedArray) or if its flattened size is not a multiple of dimensions.
|
|
67
141
|
*/
|
|
68
|
-
search(vectors:
|
|
142
|
+
search(vectors: VectorOrMatrix, k: number): Matches | BatchMatches;
|
|
69
143
|
/**
|
|
70
144
|
* Verifies the presence of one or more keys in the index.
|
|
71
145
|
*
|
|
@@ -135,103 +209,4 @@ export class Index {
|
|
|
135
209
|
*/
|
|
136
210
|
view(path: string): void;
|
|
137
211
|
}
|
|
138
|
-
|
|
139
|
-
* *
|
|
140
|
-
*/
|
|
141
|
-
export type MetricKind = string;
|
|
142
|
-
export namespace MetricKind {
|
|
143
|
-
let Unknown: string;
|
|
144
|
-
let Cos: string;
|
|
145
|
-
let IP: string;
|
|
146
|
-
let L2sq: string;
|
|
147
|
-
let Haversine: string;
|
|
148
|
-
let Divergence: string;
|
|
149
|
-
let Pearson: string;
|
|
150
|
-
let Jaccard: string;
|
|
151
|
-
let Hamming: string;
|
|
152
|
-
let Tanimoto: string;
|
|
153
|
-
let Sorensen: string;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* *
|
|
157
|
-
*/
|
|
158
|
-
export type ScalarKind = string;
|
|
159
|
-
export namespace ScalarKind {
|
|
160
|
-
let Unknown_1: string;
|
|
161
|
-
export { Unknown_1 as Unknown };
|
|
162
|
-
export let F32: string;
|
|
163
|
-
export let F64: string;
|
|
164
|
-
export let F16: string;
|
|
165
|
-
export let I8: string;
|
|
166
|
-
export let B1: string;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Represents a set of search results.
|
|
170
|
-
*/
|
|
171
|
-
export class Matches {
|
|
172
|
-
/**
|
|
173
|
-
* Constructs a Matches object.
|
|
174
|
-
*
|
|
175
|
-
* @param {BigUint64Array} keys - The keys of the nearest neighbors found.
|
|
176
|
-
* @param {Float32Array} distances - The distances of the nearest neighbors found.
|
|
177
|
-
*/
|
|
178
|
-
constructor(keys: BigUint64Array, distances: Float32Array);
|
|
179
|
-
keys: BigUint64Array;
|
|
180
|
-
distances: Float32Array;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Represents a set of batched search results.
|
|
184
|
-
*/
|
|
185
|
-
export class BatchMatches {
|
|
186
|
-
/**
|
|
187
|
-
* Constructs a BatchMatches object.
|
|
188
|
-
*
|
|
189
|
-
* @param {BigUint64Array} keys - The keys of the nearest neighbors found in the batch.
|
|
190
|
-
* @param {Float32Array} distances - The distances of the nearest neighbors found in the batch.
|
|
191
|
-
* @param {BigUint64Array} counts - The number of neighbors found for each query in the batch.
|
|
192
|
-
* @param {bigint} k - The limit for search results per query in the batch.
|
|
193
|
-
*/
|
|
194
|
-
constructor(keys: BigUint64Array, distances: Float32Array, counts: BigUint64Array, k: bigint);
|
|
195
|
-
keys: BigUint64Array;
|
|
196
|
-
distances: Float32Array;
|
|
197
|
-
counts: BigUint64Array;
|
|
198
|
-
k: bigint;
|
|
199
|
-
/**
|
|
200
|
-
* Retrieves a Matches object at the specified index in the batch.
|
|
201
|
-
*
|
|
202
|
-
* @param {number} i - The index at which to retrieve the Matches object.
|
|
203
|
-
* @returns {Matches} - A Matches object representing the search results at the specified index in the batch.
|
|
204
|
-
*/
|
|
205
|
-
get(i: number): Matches;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Performs an exact search on the given dataset to find the best matching vectors for each query.
|
|
209
|
-
*
|
|
210
|
-
* @param {Float32Array|Float64Array|Int8Array|Array<Array<number>>} dataset - The dataset containing vectors to be searched. It can be a TypedArray or an array of arrays.
|
|
211
|
-
* @param {Float32Array|Float64Array|Int8Array|Array<Array<number>>} queries - The queries containing vectors to search for in the dataset. It can be a TypedArray or an array of arrays.
|
|
212
|
-
* @param {number} dimensions - The dimensionality of the vectors in both the dataset and the queries. It defines the number of elements in each vector.
|
|
213
|
-
* @param {number} count - The number of nearest neighbors to return for each query. If the dataset contains fewer vectors than the specified count, the result will contain only the available vectors.
|
|
214
|
-
* @param {MetricKind} metric - The distance metric to be used for the search.
|
|
215
|
-
* @return {Matches|BatchMatches} - Returns a `Matches` or `BatchMatches` object containing the results of the search.
|
|
216
|
-
* @throws Will throw an error if `dimensions` and `count` are not positive integers.
|
|
217
|
-
* @throws Will throw an error if `metric` is not a valid MetricKind.
|
|
218
|
-
* @throws Will throw an error if `dataset` and `queries` are not valid input types (TypedArray or an array of arrays).
|
|
219
|
-
* @throws Will throw an error if the sizes of the flattened `dataset` and `queries` are not multiples of `dimensions`.
|
|
220
|
-
* @throws Will throw an error if `count` is greater than the number of vectors in the `dataset`.
|
|
221
|
-
*
|
|
222
|
-
* @example
|
|
223
|
-
* const dataset = [[1.0, 2.0], [3.0, 4.0]]; // Two vectors: [1.0, 2.0] and [3.0, 4.0]
|
|
224
|
-
* const queries = [[1.5, 2.5]]; // One vector: [1.5, 2.5]
|
|
225
|
-
* const dimensions = 2; // The number of elements in each vector.
|
|
226
|
-
* const count = 1; // The number of nearest neighbors to return for each query.
|
|
227
|
-
* const metric = MetricKind.IP; // Using the Inner Product distance metric.
|
|
228
|
-
*
|
|
229
|
-
* const result = exactSearch(dataset, queries, dimensions, count, metric);
|
|
230
|
-
* // result might be:
|
|
231
|
-
* // {
|
|
232
|
-
* // keys: BigUint64Array [ 1n ],
|
|
233
|
-
* // distances: Float32Array [ some_value ],
|
|
234
|
-
* // }
|
|
235
|
-
*/
|
|
236
|
-
export function exactSearch(dataset: Float32Array | Float64Array | Int8Array | Array<Array<number>>, queries: Float32Array | Float64Array | Int8Array | Array<Array<number>>, dimensions: number, count: number, metric: MetricKind): Matches | BatchMatches;
|
|
237
|
-
//# sourceMappingURL=usearch.d.ts.map
|
|
212
|
+
export {};
|