usearch 2.15.2 → 2.16.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/README.md +1 -1
- package/binding.gyp +1 -1
- package/c/CMakeLists.txt +10 -3
- package/cpp/README.md +1 -1
- package/cpp/bench.cpp +2 -2
- package/cpp/test.cpp +16 -0
- package/include/usearch/index.hpp +44 -17
- package/include/usearch/index_dense.hpp +51 -89
- package/include/usearch/index_plugins.hpp +468 -43
- package/javascript/lib.cpp +17 -5
- package/javascript/usearch.test.js +205 -34
- package/package.json +1 -1
- 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/simsimd/.git-blame-ignore-revs +2 -0
- package/simsimd/CODE_OF_CONDUCT.md +128 -0
- package/simsimd/CONTRIBUTING.md +84 -26
- package/simsimd/Cargo.lock +1 -1
- package/simsimd/Cargo.toml +4 -4
- package/simsimd/MANIFEST.in +3 -0
- package/simsimd/Package.swift +15 -3
- package/simsimd/README.md +534 -177
- package/simsimd/binding.gyp +6 -2
- package/simsimd/build.rs +13 -1
- package/simsimd/c/lib.c +266 -53
- package/simsimd/include/simsimd/binary.h +321 -112
- package/simsimd/include/simsimd/curved.h +803 -0
- package/simsimd/include/simsimd/dot.h +694 -521
- package/simsimd/include/simsimd/elementwise.h +1437 -0
- package/simsimd/include/simsimd/geospatial.h +9 -3
- package/simsimd/include/simsimd/mesh.h +69 -0
- package/simsimd/include/simsimd/probability.h +234 -206
- package/simsimd/include/simsimd/simsimd.h +1476 -617
- package/simsimd/include/simsimd/sparse.h +1428 -0
- package/simsimd/include/simsimd/spatial.h +1556 -742
- package/simsimd/include/simsimd/types.h +276 -132
- package/simsimd/javascript/lib.c +1 -2
- package/simsimd/javascript/simsimd.ts +4 -4
- package/simsimd/package.json +4 -4
- package/simsimd/rust/lib.rs +179 -1
- package/simsimd/scripts/bench.cxx +1070 -0
- package/simsimd/scripts/bench.ipynb +187 -0
- package/simsimd/{javascript → scripts}/bench.js +1 -1
- package/simsimd/{rust/benches/sqeuclidean.rs → scripts/bench_sqeuclidean.rs} +6 -6
- package/simsimd/scripts/bench_vectors.py +700 -0
- package/simsimd/scripts/bench_vectors_live.py +213 -0
- package/simsimd/scripts/test.c +155 -0
- package/simsimd/{javascript → scripts}/test.mjs +2 -2
- package/simsimd/scripts/test.py +1410 -0
- package/simsimd/swift/{source/SimSIMD.swift → SimSIMD.swift} +6 -2
- package/simsimd/swift/{tests/SimSIMDTests.swift → Test.swift} +1 -1
- /package/simsimd/{rust/benches/cosine.rs → scripts/bench_cosine.rs} +0 -0
- /package/simsimd/{rust/benches/native.rs → scripts/bench_native.rs} +0 -0
|
@@ -6,15 +6,21 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Contains:
|
|
8
8
|
* - Haversine (Great Circle) distance
|
|
9
|
-
* -
|
|
9
|
+
* - Vincenty's distance function for Oblate Spheroid Geodesics
|
|
10
10
|
*
|
|
11
11
|
* For datatypes:
|
|
12
12
|
* - 32-bit IEEE-754 floating point
|
|
13
13
|
* - 64-bit IEEE-754 floating point
|
|
14
14
|
*
|
|
15
15
|
* For hardware architectures:
|
|
16
|
-
* - Arm
|
|
17
|
-
* - x86
|
|
16
|
+
* - Arm: NEON
|
|
17
|
+
* - x86: Haswell
|
|
18
|
+
*
|
|
19
|
+
* In most cases, for distance computations, we don't need the exact Haversine formula.
|
|
20
|
+
* The very last part of the computation applies `asin(sqrt(x))` non-linear transformation.
|
|
21
|
+
* Both `asin` and `sqrt` are monotonically increasing functions, so their product is also
|
|
22
|
+
* monotonically increasing. This means, for relative similarity/closeness computation we
|
|
23
|
+
* can avoid that expensive last step.
|
|
18
24
|
*
|
|
19
25
|
* x86 intrinsics: https://www.intel.com/content/www/us/en/docs/intrinsics-guide/
|
|
20
26
|
* Arm intrinsics: https://developer.arm.com/architectures/instruction-sets/intrinsics/
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file mesh.h
|
|
3
|
+
* @brief SIMD-accelerated similarity measures for meshes and rigid 3D bodies.
|
|
4
|
+
* @author Ash Vardanian
|
|
5
|
+
* @date June 19, 2024
|
|
6
|
+
*
|
|
7
|
+
* Contains:
|
|
8
|
+
* - Root Mean Square Deviation (RMSD) for rigid body superposition
|
|
9
|
+
* - Kabsch algorithm for optimal rigid body superposition
|
|
10
|
+
*
|
|
11
|
+
* For datatypes:
|
|
12
|
+
* - 64-bit IEEE-754 floating point
|
|
13
|
+
* - 32-bit IEEE-754 floating point
|
|
14
|
+
* - 16-bit IEEE-754 floating point
|
|
15
|
+
* - 16-bit brain-floating point
|
|
16
|
+
*
|
|
17
|
+
* For hardware architectures:
|
|
18
|
+
* - Arm: Neon
|
|
19
|
+
* - x86: Genoa, Sapphire
|
|
20
|
+
*
|
|
21
|
+
* x86 intrinsics: https://www.intel.com/content/www/us/en/docs/intrinsics-guide/
|
|
22
|
+
* Arm intrinsics: https://developer.arm.com/architectures/instruction-sets/intrinsics/
|
|
23
|
+
*/
|
|
24
|
+
#ifndef SIMSIMD_MESH_H
|
|
25
|
+
#define SIMSIMD_MESH_H
|
|
26
|
+
|
|
27
|
+
#include "types.h"
|
|
28
|
+
|
|
29
|
+
#ifdef __cplusplus
|
|
30
|
+
extern "C" {
|
|
31
|
+
#endif
|
|
32
|
+
|
|
33
|
+
// clang-format off
|
|
34
|
+
|
|
35
|
+
/* Serial backends for all numeric types.
|
|
36
|
+
* By default they use 32-bit arithmetic, unless the arguments themselves contain 64-bit floats.
|
|
37
|
+
* For double-precision computation check out the "*_accurate" variants of those "*_serial" functions.
|
|
38
|
+
*/
|
|
39
|
+
SIMSIMD_PUBLIC void simsimd_rmsd_f64_serial(simsimd_f64_t const* a, simsimd_f64_t const* b, simsimd_size_t n, simsimd_f64_t* a_centroid, simsimd_f64_t* b_centroid, simsimd_distance_t* result);
|
|
40
|
+
SIMSIMD_PUBLIC void simsimd_kabsch_f64_serial(simsimd_f64_t const* a, simsimd_f64_t const* b, simsimd_size_t n, simsimd_f64_t* a_centroid, simsimd_f64_t* b_centroid, simsimd_distance_t* result);
|
|
41
|
+
|
|
42
|
+
SIMSIMD_PUBLIC void simsimd_rmsd_f32_serial(simsimd_f32_t const* a, simsimd_f32_t const* b, simsimd_size_t n, simsimd_f32_t* a_centroid, simsimd_f32_t* b_centroid, simsimd_distance_t* result);
|
|
43
|
+
SIMSIMD_PUBLIC void simsimd_kabsch_f32_serial(simsimd_f32_t const* a, simsimd_f32_t const* b, simsimd_size_t n, simsimd_f32_t* a_centroid, simsimd_f32_t* b_centroid, simsimd_distance_t* result);
|
|
44
|
+
|
|
45
|
+
SIMSIMD_PUBLIC void simsimd_rmsd_f16_serial(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_size_t n, simsimd_f16_t* a_centroid, simsimd_f16_t* b_centroid, simsimd_distance_t* result);
|
|
46
|
+
SIMSIMD_PUBLIC void simsimd_kabsch_f16_serial(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_size_t n, simsimd_f16_t* a_centroid, simsimd_f16_t* b_centroid, simsimd_distance_t* result);
|
|
47
|
+
|
|
48
|
+
SIMSIMD_PUBLIC void simsimd_rmsd_bf16_serial(simsimd_bf16_t const* a, simsimd_bf16_t const* b, simsimd_size_t n, simsimd_bf16_t* a_centroid, simsimd_bf16_t* b_centroid, simsimd_distance_t* result);
|
|
49
|
+
SIMSIMD_PUBLIC void simsimd_kabsch_bf16_serial(simsimd_bf16_t const* a, simsimd_bf16_t const* b, simsimd_size_t n, simsimd_bf16_t* a_centroid, simsimd_bf16_t* b_centroid, simsimd_distance_t* result);
|
|
50
|
+
|
|
51
|
+
/* Double-precision serial backends for all numeric types.
|
|
52
|
+
* For single-precision computation check out the "*_serial" counterparts of those "*_accurate" functions.
|
|
53
|
+
*/
|
|
54
|
+
SIMSIMD_PUBLIC void simsimd_rmsd_f32_accurate(simsimd_f32_t const* a, simsimd_f32_t const* b, simsimd_size_t n, simsimd_f32_t* a_centroid, simsimd_f32_t* b_centroid, simsimd_distance_t* result);
|
|
55
|
+
SIMSIMD_PUBLIC void simsimd_kabsch_f32_accurate(simsimd_f32_t const* a, simsimd_f32_t const* b, simsimd_size_t n, simsimd_f32_t* a_centroid, simsimd_f32_t* b_centroid, simsimd_distance_t* result);
|
|
56
|
+
|
|
57
|
+
SIMSIMD_PUBLIC void simsimd_rmsd_f16_accurate(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_size_t n, simsimd_f16_t* a_centroid, simsimd_f16_t* b_centroid, simsimd_distance_t* result);
|
|
58
|
+
SIMSIMD_PUBLIC void simsimd_kabsch_f16_accurate(simsimd_f16_t const* a, simsimd_f16_t const* b, simsimd_size_t n, simsimd_f16_t* a_centroid, simsimd_f16_t* b_centroid, simsimd_distance_t* result);
|
|
59
|
+
|
|
60
|
+
SIMSIMD_PUBLIC void simsimd_rmsd_bf16_accurate(simsimd_bf16_t const* a, simsimd_bf16_t const* b, simsimd_size_t n, simsimd_bf16_t* a_centroid, simsimd_bf16_t* b_centroid, simsimd_distance_t* result);
|
|
61
|
+
SIMSIMD_PUBLIC void simsimd_kabsch_bf16_accurate(simsimd_bf16_t const* a, simsimd_bf16_t const* b, simsimd_size_t n, simsimd_bf16_t* a_centroid, simsimd_bf16_t* b_centroid, simsimd_distance_t* result);
|
|
62
|
+
|
|
63
|
+
// clang-format on
|
|
64
|
+
|
|
65
|
+
#ifdef __cplusplus
|
|
66
|
+
}
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
#endif
|