Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
5cde3fc
Fix: Python `serialized_length` missing argument (#714)
Crow-de-a-d Feb 19, 2026
3c25f20
Fix: Accurately track total allocated memory in `memory_mapping_alloc…
swasik Feb 20, 2026
8f6f8f6
Add: `memory_stats_t` struct with per-tape breakdowns
swasik Feb 21, 2026
d5a04f8
Add: expose `memory_stats` through Rust FFI bindings
swasik Feb 21, 2026
24c5bed
Merge: Accurate memory statistics (#717)
ashvardanian Feb 22, 2026
6b69e95
Fix: Potential UB in `index_dense::add` (#721)
DavIvek Mar 2, 2026
7fbf086
Fix: Postfix operators for member/candidate iterators in `index_gt` (…
yoonseok-kim Mar 2, 2026
6995246
Fix: Avoid duplicate neighbor slots in HNSW reverse links (#699)
yoonseok-kim Mar 2, 2026
30381b7
Fix: Set equality comparison in Numba JIT PyTest
ashvardanian Mar 14, 2026
98eeb9e
Docs: Link capitalization
ashvardanian Mar 27, 2026
b2361c3
Make: Switch from SimSIMD v6 to NumKong v7 submodule
ashvardanian Mar 27, 2026
46347ec
Make: Pull NumKong crate
ashvardanian Mar 28, 2026
eede286
Make: Pull SwiftPM NumKong dependency
ashvardanian Mar 28, 2026
b0f8708
Make: Pull NumKong via CMake
ashvardanian Mar 28, 2026
1b46d1b
Make: Pull NumKong from PyPi
ashvardanian Mar 28, 2026
11f4d5c
Add: Uniform hardware caps queries across SDKs
ashvardanian Mar 28, 2026
ed7454a
Chore: SimSIMD → NumKong refs
ashvardanian Apr 4, 2026
11bcde1
Improve: Allow non-sequential vector IDs in `bench`
ashvardanian Apr 4, 2026
ef0dc4f
Fix: Stale symbol name in `join` demo
ashvardanian Apr 4, 2026
bf80af8
Add: Float8 support with E5M2 & E4M3
ashvardanian Apr 4, 2026
d4fe5de
Chore: Revert using GEMM-shaped kernels
ashvardanian Apr 4, 2026
bebb539
Improve: Expose & test Float8 in Java, ObjC, Go, JS, Rust
ashvardanian Apr 5, 2026
5413341
Fix: Avoid `IntPtr` global out-of-scope alias in C#
ashvardanian Apr 5, 2026
c9ff5b8
Docs: Rust `Cos` metric docstring (#734)
l1x Apr 5, 2026
5bcf787
Fix: Guard Float16 APIs with `#if arch(arm64)` in Swift SDK (#739)
JadenGeller Apr 5, 2026
3832c02
Fix: Strip nested sub-directories from package distributions (#733)
arsenydubrovin Apr 5, 2026
ba47347
Fix: Escalate `MAP_FAILED` on POSIX (#722)
DavIvek Apr 5, 2026
786a7d9
Fix: `MAP_FAILED` on Windows (#742)
ashvardanian Apr 5, 2026
7d95f6f
Fix: Hash set iterator returns deleted tombstones in `equal_range` (#…
DavIvek Apr 5, 2026
62724d4
Make: Don't version removed dependency lock files
ashvardanian Apr 5, 2026
5bd15bb
Make: Bump Clang due to LLVM optimizer bug
ashvardanian Apr 5, 2026
42e9203
Make: Avoid `npm ci` in non-dependency-locked state
ashvardanian Apr 5, 2026
49b8b2c
Fix: Serial Float16 conversion fallbacks
ashvardanian Apr 5, 2026
5697c60
Fix: Heap-buffer-overflow in HNSW search via sorted_buffer_gt
ashvardanian Apr 5, 2026
46256a2
Fix: OpenMP flags forwarding in `build.rs` (#724)
anaslimem Apr 5, 2026
bff98ed
Make: Switch to Ruff linter (#737)
Samoed Apr 5, 2026
9ea8233
Fix: Deduplication logic in `form_reverse_links_` (#729)
yoonseok-kim Apr 5, 2026
451e2d5
Fix: Stale vector references in `refine_` within `index_get::update` …
yoonseok-kim Apr 5, 2026
fb2e2f7
Fix: Check for `config.expansion` early in `add`
ashvardanian Apr 5, 2026
05b5eb0
Fix: Move-safe init for Rust SDK (#704)
madmax983 Apr 5, 2026
6f65872
Make: Arm32-friendly NumKong version
ashvardanian Apr 5, 2026
17dfac3
Improve: Test remove/rename/multi in Rust
ashvardanian Apr 5, 2026
98486cd
Fix: MSVC type-conversion warnings (#709)
fran6co Apr 5, 2026
8ed2548
Fix: PyTest module collision & PeachPy on Python 3.11+
ashvardanian Apr 5, 2026
8a02676
Make: Use "Trusted Publishing" for NPM
ashvardanian Apr 5, 2026
d45a616
Fix: Use `RAND_MAX` instead of `INT_MAX` for random test vectors
ashvardanian Apr 5, 2026
5546dd6
Fix: NumKong dispatch for Sorensen and binary vector dimensions
ashvardanian Apr 5, 2026
79cd39f
Make: Newer `/Zc:preprocessor` for MSVC in `binding.gyp`
ashvardanian Apr 5, 2026
1a3a86e
Fix: Re-generate JNI header for `hardware_acceleration` checks
ashvardanian Apr 6, 2026
36981b0
Make: Bump deps for MSVC compatibility
ashvardanian Apr 6, 2026
2c44fb0
Fix: Don't compile NumKong C sources into macOS wheel
ashvardanian Apr 6, 2026
0a803a9
Make: Drop EOL language versions and standardize CI runners
ashvardanian Apr 6, 2026
145272f
Make: Drop deprecated SPDX license expression (#744)
Samoed Apr 6, 2026
5e0139f
Make: Split flaky CIBW jobs & add retries
ashvardanian Apr 6, 2026
e4db172
Add: Native UInt8 `u8` API and Float6 `e2m3` & `e3m2` quantization
ashvardanian Apr 6, 2026
dac569c
Improve: Extended `bench.cpp` & datasets for 100M scale
ashvardanian Apr 6, 2026
c39b15b
Improve: Type annotations for Python SDK & scripts
ashvardanian Apr 7, 2026
4f6d2d7
Improve: New benchmarking suite
ashvardanian Apr 7, 2026
2b7f469
Improve: Reuse `eval.random_vectors` in scripts
ashvardanian Apr 7, 2026
d54383d
Fix: ObjC compilation issue for `b1x8`
ashvardanian Apr 7, 2026
1c60c6c
Docs: SIFT & BigANN subsets
ashvardanian Apr 9, 2026
4a47d18
Improve: Smaller & faster `striped_locks_gt`
ashvardanian Apr 9, 2026
82e1196
Improve: Extended `uint8` interfaces for Java, Swift, ObjC, JS
ashvardanian Apr 9, 2026
95963ff
Docs: Benchmarks table formatting
ashvardanian Apr 12, 2026
c666f16
Make: Bump NumKong to v7.5
ashvardanian Apr 14, 2026
94c7ec9
Improve: Print stack-traces in test singal-handlers
ashvardanian Apr 15, 2026
7aee20f
Fix: Over-allocate & in-align striped locks
ashvardanian Apr 15, 2026
a270651
Fix: Harden `min` & `max` symbols for MSVC
ashvardanian Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
root = true

[*.yml]
indent_style = space
indent_size = 2
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,15 @@ body:
id: duplicate
attributes:
label: Is there an existing issue for this?
description: Please search [our issues](https://github.com/unum-cloud/usearch/issues) to see if this bug already exists.
description: Please search [our issues](https://github.com/unum-cloud/USearch/issues) to see if this bug already exists.
options:
- label: I have searched the existing issues
required: true
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/unum-cloud/usearch/blob/main/CODE_OF_CONDUCT.md)
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/unum-cloud/USearch/blob/main/CODE_OF_CONDUCT.md)
options:
- label: I agree to follow this project's Code of Conduct
required: true
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ body:
attributes:
value: |
Thanks for taking the time to fill out this feature request!
We have already scheduled a few features for our [next milestone](https://github.com/unum-cloud/usearch/milestones).
We have already scheduled a few features for our [next milestone](https://github.com/unum-cloud/USearch/milestones).
Still, if it is something we have yet to think about, we will happily extend our [roadmap](https://github.com/orgs/unum-cloud/projects/2).
It is also worth noting that choosing between speed and functionality, we generally prefer the former.
So in some cases, it makes more sense to build something on top of USearch rather than patch it 🤗
Expand Down Expand Up @@ -50,15 +50,15 @@ body:
id: duplicate
attributes:
label: Is there an existing issue for this?
description: Please search [our issues](https://github.com/unum-cloud/usearch/issues) to see if this bug already exists.
description: Please search [our issues](https://github.com/unum-cloud/USearch/issues) to see if this bug already exists.
options:
- label: I have searched the existing issues
required: true
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/unum-cloud/usearch/blob/main/CODE_OF_CONDUCT.md)
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/unum-cloud/USearch/blob/main/CODE_OF_CONDUCT.md)
options:
- label: I agree to follow this project's Code of Conduct
required: true
157 changes: 112 additions & 45 deletions .github/workflows/prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ on:
env:
GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN }}
PYTHONUTF8: 1
PYTHONFAULTHANDLER: 1
PYTHON_VERSION: 3.11
DOTNET_VERSION: 8.0.x
NODE_VERSION: 20
JAVA_VERSION: 21
GO_VERSION: "^1.21.0"
GO_VERSION: "^1.22.0"
ANDROID_NDK_VERSION: 26.3.11579264
ANDROID_SDK_VERSION: 21

Expand All @@ -38,10 +39,8 @@ jobs:
version-file: "VERSION"
update-version-in: |
package.json:"version": "(\d+\.\d+\.\d+)"
package-lock.json:"usearch",\n\s+"version": "(\d+\.\d+\.\d+)"
CITATION.cff:^version: (\d+\.\d+\.\d+)
Cargo.toml:^version = "(\d+\.\d+\.\d+)"
Cargo.lock:name = "usearch"\nversion = "(\d+\.\d+\.\d+)"
wasmer.toml:^version = "(\d+\.\d+\.\d+)"
conanfile.py:version = "(\d+\.\d+\.\d+)"
java/README.md:usearchVersion = '(\d+\.\d+\.\d+)'
Expand Down Expand Up @@ -74,8 +73,8 @@ jobs:
- name: Build C/C++
run: |
sudo apt update
sudo apt install -y cmake build-essential libjemalloc-dev libomp-dev gcc-12 g++-12
cmake -B build_artifacts -D CMAKE_BUILD_TYPE=RelWithDebInfo -D USEARCH_BUILD_TEST_CPP=1 -D USEARCH_BUILD_TEST_C=1 -D USEARCH_BUILD_LIB_C=1 -D USEARCH_BUILD_SQLITE=1 -D USEARCH_USE_OPENMP=1 -D USEARCH_USE_SIMSIMD=1 -D USEARCH_USE_JEMALLOC=1
sudo apt install -y cmake build-essential libjemalloc-dev libomp-dev
cmake -B build_artifacts -D CMAKE_BUILD_TYPE=RelWithDebInfo -D USEARCH_BUILD_TEST_CPP=1 -D USEARCH_BUILD_TEST_C=1 -D USEARCH_BUILD_LIB_C=1 -D USEARCH_BUILD_SQLITE=1 -D USEARCH_USE_OPENMP=1 -D USEARCH_USE_NUMKONG=1 -D USEARCH_USE_JEMALLOC=1
cmake --build build_artifacts --config RelWithDebInfo
- name: Test C++
run: build_artifacts/test_cpp
Expand All @@ -91,7 +90,7 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install pytest pytest-repeat numpy numba cppyy
pip install --upgrade git+https://github.com/Maratyszcza/PeachPy

python -m pip install .
- name: Test Python
run: pytest
Expand All @@ -102,7 +101,7 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: npm ci --skip-scripts
run: npm install --skip-scripts
- name: Build JavaScript
run: npm run build-js
- name: Test JavaScript
Expand All @@ -113,7 +112,10 @@ jobs:
run: |
rustup update stable
rustup default stable
rustup component add clippy
rustc -vV
- name: Lint Rust
run: cargo clippy --all-targets -- -D warnings
- name: Build Rust
run: cargo build
- name: Test Rust
Expand Down Expand Up @@ -155,11 +157,11 @@ jobs:
working-directory: ${{ github.workspace }}/golang/

test_ubuntu_clang:
name: Ubuntu (Clang 18)
name: Ubuntu (Clang 20)
runs-on: ubuntu-24.04
env:
CC: clang
CXX: clang++
CC: clang-20
CXX: clang++-20

steps:
- name: Checkout
Expand All @@ -168,12 +170,11 @@ jobs:
run: git submodule update --init --recursive

# C/C++
# Clang 16 isn't available from default repos on Ubuntu 22.04, so we have to install it manually
- name: Build C/C++
run: |
sudo apt update
sudo apt install -y cmake build-essential libjemalloc-dev clang
cmake -B build_artifacts -D CMAKE_BUILD_TYPE=RelWithDebInfo -D USEARCH_BUILD_TEST_CPP=1 -D USEARCH_BUILD_TEST_C=1 -D USEARCH_BUILD_LIB_C=1 -D USEARCH_BUILD_SQLITE=1 -D USEARCH_USE_OPENMP=0 -D USEARCH_USE_SIMSIMD=1 -D USEARCH_USE_JEMALLOC=1
sudo apt install -y cmake build-essential libjemalloc-dev clang-20
cmake -B build_artifacts -D CMAKE_BUILD_TYPE=RelWithDebInfo -D USEARCH_BUILD_TEST_CPP=1 -D USEARCH_BUILD_TEST_C=1 -D USEARCH_BUILD_LIB_C=1 -D USEARCH_BUILD_SQLITE=1 -D USEARCH_USE_OPENMP=0 -D USEARCH_USE_NUMKONG=1 -D USEARCH_USE_JEMALLOC=1
cmake --build build_artifacts --config RelWithDebInfo
- name: Test C++
run: build_artifacts/test_cpp
Expand All @@ -186,7 +187,7 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: npm ci --skip-scripts
run: npm install --skip-scripts
- name: Build JavaScript
run: npm run build-js
- name: Test JavaScript
Expand All @@ -201,7 +202,7 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install pytest pytest-repeat numpy numba cppyy
pip install --upgrade git+https://github.com/Maratyszcza/PeachPy

python -m pip install .
env:
CXX: clang++
Expand Down Expand Up @@ -234,7 +235,7 @@ jobs:
working-directory: ${{ github.workspace }}/csharp

test_macos:
name: MacOS
name: macOS
runs-on: macos-15

steps:
Expand All @@ -261,7 +262,7 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: npm ci --skip-scripts
run: npm install --skip-scripts
- name: Build JavaScript
run: npm run build-js
- name: Test JavaScript
Expand Down Expand Up @@ -314,7 +315,7 @@ jobs:
working-directory: ${{ github.workspace }}/csharp

test_windows_x86:
name: Windows (x86)
name: Windows (X86)
runs-on: windows-2022
steps:
- name: Checkout
Expand Down Expand Up @@ -352,7 +353,7 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: npm ci --skip-scripts
run: npm install --skip-scripts
- name: Build JavaScript
run: npm run build-js
- name: Test JavaScript
Expand Down Expand Up @@ -383,7 +384,7 @@ jobs:
working-directory: ${{ github.workspace }}/csharp

test_windows_arm:
name: Windows (Arm)
name: Windows (ARM)
runs-on: windows-2022
steps:
- name: Checkout
Expand All @@ -407,8 +408,8 @@ jobs:
Write-Host "ARM64 DLL built successfully"

build_docker:
name: Docker
runs-on: ubuntu-22.04
name: Build Docker
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
Expand All @@ -421,44 +422,110 @@ jobs:
load: true
push: false

build_wheels:
name: Build Python Wheels
runs-on: ${{ matrix.os }}
needs:
[
test_ubuntu_gcc,
test_ubuntu_clang,
test_macos,
test_windows_x86,
test_windows_arm,
]
build_wheels_linux:
name: Build Python Wheels (Linux)
runs-on: ubuntu-24.04
needs: [test_ubuntu_gcc, test_ubuntu_clang]
strategy:
matrix:
os: [ubuntu-24.04, macos-14, windows-2022]
python-version: ["38", "39", "310", "311", "312", "313", "313t", "314", "314t"]
python-version: ["310", "311", "312", "313", "313t", "314", "314t"]
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: 3.x

# We only need QEMU for Linux builds
python-version: "3.13"
- name: Setup QEMU
if: matrix.os == 'ubuntu-24.04'
uses: docker/setup-qemu-action@v3
- name: Install cibuildwheel
run: python -m pip install cibuildwheel
uses: nick-fields/retry@v4
with:
max_attempts: 3
retry_wait_seconds: 10
timeout_minutes: 180
command: python -m pip install cibuildwheel
- name: Build wheels
uses: nick-fields/retry@v4
with:
max_attempts: 2
retry_wait_seconds: 30
timeout_minutes: 180
command: cibuildwheel --output-dir wheelhouse
env:
CIBW_BUILD: cp${{ matrix.python-version }}-*
CIBW_ENABLE: cpython-freethreading
CIBW_PLATFORM: linux

build_wheels_macos:
name: Build Python Wheels (macOS)
runs-on: macos-14
needs: [test_macos]
strategy:
matrix:
python-version: ["310", "311", "312", "313", "313t", "314", "314t"]
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install cibuildwheel
uses: nick-fields/retry@v4
with:
max_attempts: 3
retry_wait_seconds: 10
timeout_minutes: 180
command: python -m pip install cibuildwheel
- name: Build wheels
run: cibuildwheel --output-dir wheelhouse
uses: nick-fields/retry@v4
with:
max_attempts: 2
retry_wait_seconds: 30
timeout_minutes: 180
command: cibuildwheel --output-dir wheelhouse
env:
CIBW_BUILD: cp${{ matrix.python-version }}-*
CIBW_ENABLE: cpython-freethreading # No-GIL 3.13t builds
CIBW_ENABLE: cpython-freethreading
CIBW_PLATFORM: macos

build_wheels_windows:
name: Build Python Wheels (Windows)
runs-on: windows-2022
needs: [test_windows_x86]
strategy:
matrix:
python-version: ["310", "311", "312", "313", "313t", "314", "314t"]
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install cibuildwheel
uses: nick-fields/retry@v4
with:
max_attempts: 3
retry_wait_seconds: 10
timeout_minutes: 180
command: python -m pip install cibuildwheel
- name: Build wheels
uses: nick-fields/retry@v4
with:
max_attempts: 2
retry_wait_seconds: 30
timeout_minutes: 180
command: cibuildwheel --output-dir wheelhouse
env:
CIBW_BUILD: cp${{ matrix.python-version }}-*
CIBW_ENABLE: cpython-freethreading
CIBW_PLATFORM: windows

test_ubuntu_cross_compilation:
name: Cross Compilation
runs-on: ubuntu-22.04
name: Cross-Compile Linux
runs-on: ubuntu-24.04
env:
CC: clang
CXX: clang++
Expand Down Expand Up @@ -512,7 +579,7 @@ jobs:

test_android:
name: Android
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
Expand Down
Loading
Loading