usearch 2.3.0 → 2.3.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.
@@ -219,7 +219,7 @@ jobs:
219
219
  publish_hashes:
220
220
  name: Add hashes to release notes
221
221
  runs-on: ubuntu-latest
222
- needs: [versioning, create_linux_deb_package, create_windows_dll_library, create_macos_library]
222
+ needs: [versioning, create_linux_deb_package, create_windows_dll_library, create_macos_library, deploy_docs_pages]
223
223
  steps:
224
224
  - name: Get last release ID
225
225
  id: last_release
@@ -266,6 +266,7 @@ jobs:
266
266
  * ${{ steps.hashes.outputs.asset_name_6 }} : `${{ steps.hashes.outputs.asset_hash_6 }}`
267
267
  * ${{ steps.hashes.outputs.asset_name_7 }} : `${{ steps.hashes.outputs.asset_hash_7 }}`
268
268
  * ${{ steps.hashes.outputs.asset_name_8 }} : `${{ steps.hashes.outputs.asset_hash_8 }}`
269
+ * ${{ steps.hashes.outputs.asset_name_9 }} : `${{ steps.hashes.outputs.asset_hash_9 }}`
269
270
 
270
271
 
271
272
  build_wheels:
package/.releaserc CHANGED
@@ -77,10 +77,14 @@
77
77
  "conanfile.py",
78
78
  "package.json",
79
79
  "Cargo.toml",
80
- "wasmer.toml"
80
+ "wasmer.toml",
81
+ "./include/usearch/index.hpp",
82
+ "README.md",
83
+ "./csharp/nuget/nuget-package.props",
84
+ "CITATION.cff"
81
85
  ],
82
86
  "message": "Build: Released ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
83
87
  }
84
88
  ]
85
89
  ]
86
- }
90
+ }
package/CITATION.cff CHANGED
@@ -5,7 +5,7 @@ authors:
5
5
  given-names: "Ash"
6
6
  orcid: "https://orcid.org/0000-0002-4882-1815"
7
7
  title: "USearch by Unum Cloud"
8
- version: 0.13.0
8
+ version: 2.3.1
9
9
  doi: 10.5281/zenodo.7949416
10
10
  date-released: 2022-06-12
11
11
  url: "https://github.com/unum-cloud/usearch"
package/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "usearch"
3
- version = "2.3.0"
3
+ version = "2.3.1"
4
4
  authors = ["Ash Vardanian <1983160+ashvardanian@users.noreply.github.com>"]
5
5
  description = "Smaller & Faster Single-File Vector Search Engine from Unum"
6
6
  edition = "2021"
package/README.md CHANGED
@@ -392,7 +392,7 @@ doi = {10.5281/zenodo.7949416},
392
392
  author = {Vardanian, Ash},
393
393
  title = {{USearch by Unum Cloud}},
394
394
  url = {https://github.com/unum-cloud/usearch},
395
- version = {1.0.0},
395
+ version = {2.3.1},
396
396
  year = {2022},
397
397
  month = jun,
398
398
  }
package/conanfile.py CHANGED
@@ -4,7 +4,7 @@ from conans import ConanFile
4
4
  class USearchConan(ConanFile):
5
5
 
6
6
  name = 'USearch'
7
- version = '2.3.0'
7
+ version = '2.3.1'
8
8
  license = 'Apache 2.0'
9
9
  url = 'https://github.com/unum-cloud/usearch'
10
10
  description = 'Smaller & Faster Single-File Vector Search Engine from Unum'
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
2
  <Project>
3
3
  <PropertyGroup>
4
- <Version Condition="'$(Version)' == ''">0.0.2</Version>
4
+ <Version Condition="'$(Version)' == ''">2.3.1</Version>
5
5
 
6
6
  <Authors>Unum</Authors>
7
7
  <Company>Unum</Company>
@@ -9,9 +9,9 @@
9
9
  #ifndef UNUM_USEARCH_HPP
10
10
  #define UNUM_USEARCH_HPP
11
11
 
12
- #define USEARCH_VERSION_MAJOR 0
13
- #define USEARCH_VERSION_MINOR 0
14
- #define USEARCH_VERSION_PATCH 0
12
+ #define USEARCH_VERSION_MAJOR 2
13
+ #define USEARCH_VERSION_MINOR 3
14
+ #define USEARCH_VERSION_PATCH 1
15
15
 
16
16
  // Inferring C++ version
17
17
  // https://stackoverflow.com/a/61552074
@@ -41,7 +41,15 @@
41
41
  #endif
42
42
 
43
43
  #if USEARCH_USE_SIMSIMD
44
- #if __linux__
44
+ #if defined(USEARCH_DEFINED_LINUX)
45
+ #define SIMSIMD_TARGET_X86_AVX2 1
46
+ #define SIMSIMD_TARGET_X86_AVX512 1
47
+ #define SIMSIMD_TARGET_ARM_NEON 1
48
+ #define SIMSIMD_TARGET_ARM_SVE 1
49
+ #include <simsimd/simsimd.h>
50
+ #elif defined(USEARCH_DEFINED_APPLE)
51
+ #define SIMSIMD_TARGET_X86_AVX2 1
52
+ #define SIMSIMD_TARGET_ARM_NEON 1
45
53
  #include <simsimd/simsimd.h>
46
54
  #endif
47
55
  #endif
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "usearch",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "Smaller & Faster Single-File Vector Search Engine from Unum",
5
5
  "author": "Ash Vardanian",
6
6
  "license": "Apache 2.0",
package/python/lib.cpp CHANGED
@@ -1021,8 +1021,8 @@ PYBIND11_MODULE(compiled, m) {
1021
1021
 
1022
1022
  m.def(
1023
1023
  "hardware_acceleration",
1024
- [](scalar_kind_t scalar_kind, std::size_t dimensions, metric_kind_t metric_kind) -> bool {
1025
- return metric_t(dimensions, metric_kind, scalar_kind).isa_kind() != isa_kind_t::auto_k;
1024
+ [](scalar_kind_t scalar_kind, std::size_t dimensions, metric_kind_t metric_kind) -> py::str {
1025
+ return isa_name(metric_t(dimensions, metric_kind, scalar_kind).isa_kind());
1026
1026
  },
1027
1027
  py::kw_only(), //
1028
1028
  py::arg("dtype") = scalar_kind_t::f32_k, //
package/rust/README.md CHANGED
@@ -6,18 +6,20 @@
6
6
  cargo add usearch
7
7
  ```
8
8
 
9
+ You can find [interface documentation on docs.rs](https://docs.rs/usearch/2.3.0/usearch/ffi/struct.Index.html).
10
+
9
11
  ## Quickstart
10
12
 
11
13
  ```rust
12
14
 
13
15
  let options = IndexOptions {
14
- dimensions: 3,
15
- metric: MetricKind::IP,
16
- quantization: ScalarKind::F16,
17
- connectivity: 0,
18
- expansion_add: 0,
19
- expansion_search: 0
20
- };
16
+ dimensions: 3,
17
+ metric: MetricKind::IP,
18
+ quantization: ScalarKind::F16,
19
+ connectivity: 0,
20
+ expansion_add: 0,
21
+ expansion_search: 0
22
+ };
21
23
 
22
24
  let index = new_index(&options).unwrap();
23
25
 
@@ -39,17 +41,6 @@ let results = index.search(&first, 10).unwrap();
39
41
  assert_eq!(results.keys.len(), 2);
40
42
  ```
41
43
 
42
- ## Multi-Threading
43
-
44
- ```rust
45
- assert!(index.add_in_thread(42, &first, 0).is_ok());
46
- assert!(index.add_in_thread(43, &second, 0).is_ok());
47
- let results = index.search_in_thread(&first, 10, 0).unwrap();
48
- ```
49
-
50
- Being a systems-programming language, Rust has better control over memory management and concurrency but lacks function overloading.
51
- Aside from the `add` and `search`, USearch Rust binding also provides `add_in_thread` and `search_in_thread`, which let users identify the calling thread to use underlying temporary memory more efficiently.
52
-
53
44
  ## Serialization
54
45
 
55
46
  ```rust
@@ -58,6 +49,14 @@ assert!(index.load("index.usearch").is_ok());
58
49
  assert!(index.view("index.usearch").is_ok());
59
50
  ```
60
51
 
52
+ Similarly, serializing to/from buffers is supported.
53
+
54
+ ```rust
55
+ assert!(index.save_to_buffer(&mut serialization_buffer).is_ok());
56
+ assert!(index.load_from_buffer(&serialization_buffer).is_ok());
57
+ assert!(index.view_from_buffer(&serialization_buffer).is_ok());
58
+ ```
59
+
61
60
  ## Metrics
62
61
 
63
62
  ```rust
package/swift/README.md CHANGED
@@ -9,13 +9,13 @@ https://github.com/unum-cloud/usearch
9
9
  ## Quickstart
10
10
 
11
11
  ```swift
12
- let index = Index.l2sq(dimensions: 3, connectivity: 8)
13
- let vectorA: [Float32] = [0.3, 0.5, 1.2]
14
- let vectorB: [Float32] = [0.4, 0.2, 1.2]
15
- index.add(key: 42, vector: vectorA[...])
16
- index.add(key: 43, vector: vectorB[...])
12
+ let index = USearchIndex.make(metric: .Cos, dimensions: 3, connectivity: 8)
13
+ let vectorA: [Float32] = [0.3, 0.5, 1.2] // `Float32` and `Float64` are always supported
14
+ let vectorB: [Float32] = [0.4, 0.2, 1.2] // `Float16` supports on the OS & hardware version
15
+ index.add(key: 42, vector: vectorA) // Pass full arrays or slices
16
+ index.add(key: 43, vector: vectorB)
17
17
 
18
- let results = index.search(vector: vectorA[...], count: 10)
18
+ let results = index.search(vector: vectorA, count: 10)
19
19
  assert(results.0[0] == 42)
20
20
  ```
21
21
 
@@ -32,7 +32,7 @@ struct USearchMobileApp: App {
32
32
  let index = USearchIndex.make(metric: .IP, dimensions: 2, connectivity: 16, quantization: .F32)
33
33
  let _ = index.reserve(10)
34
34
  let coordiantes: Array<Float32> = [40.177200, 44.503490]
35
- let _ = index.add(key: 10, vector: coordiantes[...])
35
+ let _ = index.add(key: 10, vector: coordiantes)
36
36
  VStack {
37
37
  Text("USearch index contains \(index.length) vectors")
38
38
  Spacer()
@@ -42,3 +42,7 @@ struct USearchMobileApp: App {
42
42
  }
43
43
  }
44
44
  ```
45
+
46
+ You can find a working example of using USearch with SwiftUI maps at [ashvardanian/SwiftVectorSearch](https://github.com/ashvardanian/SwiftVectorSearch).
47
+
48
+ [![](https://media.githubusercontent.com/media/ashvardanian/SwiftVectorSearch/main/USearch%2BSwiftUI.gif)](https://github.com/ashvardanian/SwiftVectorSearch)
package/wasmer.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name="unum/usearch"
3
- version="2.3.0"
3
+ version="2.3.1"
4
4
  description="Smaller & Faster Single-File Vector Search Engine from Unum"
5
5
  license="Apache-2.0"
6
6
  readme="README.md"