Skip to main content

High-performance neighborlist construction for atomistic systems in Rust with Python bindings.

Project description

neighborlist-rs

High-performance neighborlist construction for atomistic systems in Rust with Python bindings.

CI PyPI version License

Features

  • High-performance Cell Lists: O(N) scaling for large systems.
  • Batched Processing: Parallelized neighbor list construction across multiple systems (ideal for GNN training).
  • Multi-Cutoff pass: Generate multiple neighbor lists (e.g., short-range GNN, long-range dispersion) in a single optimized pass.
  • SIMD Acceleration: Explicit wide SIMD kernels for small systems and brute-force fallbacks.
  • Auto-Box Inference: Automatic bounding box calculation for isolated molecules.
  • Robust PBC support: Minimum image convention for orthorhombic and triclinic cells.
  • ASE Integration: Direct support for ase.Atoms objects.
  • Zero-copy NumPy integration: Efficient data exchange via PyO3 and rust-numpy.

Installation

From PyPI

pip install neighborlist-rs

From Source

pip install .

Usage (Python)

Refer to PYTHON_API.md for full documentation and advanced usage examples.

Quick Start (with ASE)

import neighborlist_rs
from ase.build import molecule

atoms = molecule("C2H5OH")
# Single pass search directly from ASE Atoms
result = neighborlist_rs.build_from_ase(atoms, cutoff=5.0)

edge_index = result["edge_index"]  # (2, M) array of atom pairs
shifts = result["shift"]           # (M, 3) periodic shift vectors

Manual Search

import neighborlist_rs
import numpy as np

positions = np.array([[0, 0, 0], [1, 1, 1]], dtype=float)
# None for cell means isolated system (non-PBC)
result = neighborlist_rs.build_neighborlists(None, positions, cutoff=5.0)

Performance

neighborlist-rs is designed for high-performance atomistic simulations, outperforming established baselines across a wide range of system sizes and conditions.

Comprehensive Benchmarks

(Measured on CPU: ARM64 8-core / NVIDIA GB10 proxy. Results in wall-clock time ms.)

1. Single System Scaling

Single System Benchmark

The table below shows the average wall-clock time (in milliseconds) to construct the neighbor list. Lower is better.

System Cutoff ASE Matscipy Freud Vesin neighborlist-rs
Isolated 1k 6.0 Å 101.5 3.3 4.1 1.7 3.0
14.0 Å 2688.1 10.2 12.2 5.8 2.8
Ethanol 1k 6.0 Å 149.9 5.9 2.7 3.0 5.3
(PBC) 14.0 Å 6677.0 130.8 N/A* 64.0 37.6
Ethanol 10k 6.0 Å 1222.8 50.7 34.9 37.9 19.8
(PBC) 14.0 Å 11948.5 608.5 485.1 342.6 250.5

*Freud requires box dimensions > 2x cutoff.

Detailed Raw Timing Summary
======================================== Single System Benchmarks ========================================

>>> CUTOFF: 6.0 Angstroms <<<

--- Isolated 1k (N=1000, rc=6.0) ---
Library              | Device | Time (ms)  | Std       
-------------------------------------------------------
 ASE                 | CPU   | 101.48     | 0.76      
 Matscipy            | CPU   | 3.28       | 0.01      
 Freud               | CPU   | 4.13       | 0.85      
 Vesin               | CPU   | 1.72       | 0.02      
 RS (1 thread)       | CPU   | 3.16       | 0.47      
 RS (Parallel)       | CPU   | 2.97       | 0.26      
 TorchCluster        | CPU   | 2.49       | 0.11      
 TorchCluster        | GPU   | 18.51      | 1.05      
 TorchNL             | CPU   | 16.34      | 3.01      
 TorchNL             | GPU   | 6.52       | 0.80      

--- Ethanol 1k (PBC) (N=1008, rc=6.0) ---
Library              | Device | Time (ms)  | Std       
-------------------------------------------------------
 ASE                 | CPU   | 149.92     | 15.19     
 Matscipy            | CPU   | 5.91       | 0.01      
 Freud               | CPU   | 2.71       | 0.59      
 Vesin               | CPU   | 2.99       | 0.02      
 RS (1 thread)       | CPU   | 5.44       | 0.11      
 RS (Parallel)       | CPU   | 5.35       | 0.01      
 TorchCluster        | ---   | N/A (No PBC support) |           
 TorchNL             | CPU   | 31.72      | 1.27      
 TorchNL             | GPU   | 18.85      | 4.69      

--- Ethanol 10k (PBC) (N=10008, rc=6.0) ---
Library              | Device | Time (ms)  | Std       
-------------------------------------------------------
 ASE                 | CPU   | 1222.77    | 2.29      
 Matscipy            | CPU   | 50.70      | 0.21      
 Freud               | CPU   | 34.93      | 2.36      
 Vesin               | CPU   | 37.92      | 0.56      
 RS (1 thread)       | CPU   | 20.61      | 0.68      
 RS (Parallel)       | CPU   | 19.82      | 0.10      
 TorchCluster        | ---   | N/A (No PBC support) |           
 TorchNL             | CPU   | 487.77     | 8.08      
 TorchNL             | GPU   | 134.06     | 27.62     


>>> CUTOFF: 14.0 Angstroms <<<

--- Isolated 1k (N=1000, rc=14.0) ---
Library              | Device | Time (ms)  | Std       
-------------------------------------------------------
 ASE                 | CPU   | 2688.05    | 5.74      
 Matscipy            | CPU   | 10.16      | 0.03      
 Freud               | CPU   | 12.20      | 2.00      
 Vesin               | CPU   | 5.82       | 0.06      
 RS (1 thread)       | CPU   | 2.89       | 0.07      
 RS (Parallel)       | CPU   | 2.82       | 0.06      
 TorchCluster        | CPU   | 9.14       | 0.51      
 TorchCluster        | GPU   | 18.36      | 0.82      
 TorchNL             | CPU   | 81.01      | 4.50      
 TorchNL             | GPU   | 24.08      | 1.98      

--- Ethanol 1k (PBC) (N=1008, rc=14.0) ---
Library              | Device | Time (ms)  | Std       
-------------------------------------------------------
 ASE                 | CPU   | 6676.95    | 4.42      
 Matscipy            | CPU   | 130.84     | 0.63      
 Vesin               | CPU   | 63.95      | 0.47      
 RS (1 thread)       | CPU   | 37.62      | 0.22      
 RS (Parallel)       | CPU   | 37.88      | 0.15      
 TorchCluster        | ---   | N/A (No PBC support) |           
 TorchNL             | CPU   | 522.08     | 8.28      
 TorchNL             | GPU   | 90.39      | 2.55      

--- Ethanol 10k (PBC) (N=10008, rc=14.0) ---
Library              | Device | Time (ms)  | Std       
-------------------------------------------------------
 ASE                 | CPU   | 11948.54   | 273.39    
 Matscipy            | CPU   | 608.45     | 2.64      
 Freud               | CPU   | 485.05     | 3.00      
 Vesin               | CPU   | 342.63     | 1.84      
 RS (1 thread)       | CPU   | 250.45     | 5.98      
 RS (Parallel)       | CPU   | 264.32     | 3.57      
 TorchCluster        | ---   | N/A (No PBC support) |           
 TorchNL             | CPU   | 4605.02    | 71.68     
 TorchNL             | GPU   | 790.87     | 9.78      

2. Multi-Cutoff Pass [6.0, 14.0] Å

Benchmark for generating two neighbor lists simultaneously (e.g., GNN + Dispersion). (System: Ethanol 10k atoms)

Library Strategy Time (ms)
neighborlist-rs Single Pass (Native) 313
Vesin Filtered (14.0 -> 6.0) 414
Freud Filtered (14.0 -> 6.0) 491
Matscipy Filtered (14.0 -> 6.0) 667
ASE Filtered (14.0 -> 6.0) 11680

3. Batch Throughput (GNN Workloads)

Batch Throughput Benchmark

Throughput in systems per second for batches of isolated 100-atom molecules.

Batch Size neighborlist-rs TorchCluster TorchNL
1 34,477 11,756 525
32 38,198 11,047 481
128 35,293 12,173 445

Note: TorchCluster does not support Periodic Boundary Conditions (PBC).

Key Optimizations

  • Spatial Sorting: Uses Z-order (Morton) indexing to improve cache locality.
  • Dynamic Configuration: Runtime-tunable thresholds for switching between SIMD Brute-Force and Cell Lists.
  • Two-Pass Search: Minimizes heap allocations by pre-calculating neighbor counts.
  • Cross-Platform SIMD: Optimized for both x86_64 (AVX2/FMA) and aarch64 (NEON).

Verification

Run Rust tests:

cargo test

Run Python tests:

pytest tests/

License

Licensed under either of:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neighborlist_rs-0.1.4.tar.gz (1.8 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

neighborlist_rs-0.1.4-cp313-cp313-win_amd64.whl (547.1 kB view details)

Uploaded CPython 3.13Windows x86-64

neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_x86_64.whl (739.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64

neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_aarch64.whl (698.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64

neighborlist_rs-0.1.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.3 MB view details)

Uploaded CPython 3.13macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

neighborlist_rs-0.1.4-cp312-cp312-win_amd64.whl (547.4 kB view details)

Uploaded CPython 3.12Windows x86-64

neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_x86_64.whl (740.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64

neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_aarch64.whl (698.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64

neighborlist_rs-0.1.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.3 MB view details)

Uploaded CPython 3.12macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

neighborlist_rs-0.1.4-cp311-cp311-win_amd64.whl (546.8 kB view details)

Uploaded CPython 3.11Windows x86-64

neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_x86_64.whl (737.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64

neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_aarch64.whl (698.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64

neighborlist_rs-0.1.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.3 MB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file neighborlist_rs-0.1.4.tar.gz.

File metadata

  • Download URL: neighborlist_rs-0.1.4.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for neighborlist_rs-0.1.4.tar.gz
Algorithm Hash digest
SHA256 0fc8d18b2b270cad553c7975e7043c3c909de968818aef711df0c824d3861760
MD5 2fc1acad881deaa2253a90c3a17d458a
BLAKE2b-256 65b87d15e8d68d2c0a4d008646ee7165e8591d9484d04241055e801d92750f3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4.tar.gz:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f9dc636e46c879fcec89c07573fcaf91f4b10ddcebd03be4ac0b7fcf2b526da6
MD5 ace36371a618939a7f41884b2c385854
BLAKE2b-256 32af896c6306cbf810a910c7be125b45deb46b183081a60d301bc745c892d382

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp313-cp313-win_amd64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 25e23d91a64563a78f2d6ef58874c4163f0c57c6d16077593f2b0c7291c72048
MD5 1949b5e2c1982ffeb7d05bb03cf66cad
BLAKE2b-256 c2ad9c60567b3ca5d60129034a34e7678ed56ae133d9295837701e02d236e3ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_x86_64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 4ce783d13010f219d26d286510f18fd66b8089e9af3b81f61224b0499c0a49fc
MD5 e8a6cddc0ebdd84a4e44a1ce27ae6e05
BLAKE2b-256 2d32c1693d3833cc189680827a755c2f84f651488525ba384fed89655806331a

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp313-cp313-manylinux_2_24_aarch64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 5b2e2a532536b5c60b45a0fdbcb42664a94e1b9bd6d814dc8356af49e98184a9
MD5 6156c45e4b9b9fd9bc95aaeca5921e5f
BLAKE2b-256 9b1160fc6b353ab38193c47a436107fbdaaffcf62bfe462bd52131b5e94373b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 615996e84a006abfbdb1953e11f579a5225f0479be90fc6cd98edf83133652d7
MD5 2fccb68efce00bce750a0f3473ce6e96
BLAKE2b-256 8f11ee350d137fa4d4d9d7f202d2011a52c955e80f0a54d46704baecc9ec9d28

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp312-cp312-win_amd64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 a081bb806a981950d26ee72694627751e07d28429a16b835a280fbd842aca78d
MD5 99eda1be93f9d1a9e855d4595a7f0f2d
BLAKE2b-256 93e7b3b06a4b5025236e76c895ff74d6e0483cb03f242d5283c28292305b5fb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_x86_64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 c6795de21257f7690ad4a77bec97625ddcd286b90bceb401bd921cf25c44e670
MD5 83ef4fa0906f0435a785f312d1774cdf
BLAKE2b-256 7e94208a397a57d409967b0de6ac059b8c071d24964ecbfcdb7e83ae5bf32ca2

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp312-cp312-manylinux_2_24_aarch64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 2ae055cdcd8b51b9f1d84ab46b051c403d8686519c84eb3b7dc2ce0197cb6eb1
MD5 b803a6cf60035e1710bff4fb4c3adf6a
BLAKE2b-256 5e80f881f11c8c6fdf71d4eed4289e2fb707bfca0696e83cac2d435977247ecb

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c792535c887deee0ceac5c4cb0018f1e2e8c80a128dd35530ce86fa7a5934445
MD5 737fae99a31d5ba5d19b86df7116da04
BLAKE2b-256 74f7bd77d10c27d04301fed25bd6cfff2e86b653e09b2ed7aff952d9ce1170c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp311-cp311-win_amd64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 33a70abf1858fba0241fdf5e08442712720fc0a5130c1c4904b61b2d09c85ad8
MD5 83326893f5c5e6fd2382abbb38695dea
BLAKE2b-256 9200e8ddefb1f9e03ba5a5366ff96c418390f86afeaafa485cf7aba35962fc4b

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_x86_64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 5dcb6292ff9ea845b4f25e8732bea21efc426a2c72c9649b1a078c71f1283ac1
MD5 3206a5094d49e611e8c074c5ac7aeb1a
BLAKE2b-256 905c8bbedbcd1102183bf40ad5d9352743a933f4d649c1d56b966ae35d8dc564

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp311-cp311-manylinux_2_24_aarch64.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file neighborlist_rs-0.1.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 42653dc77685bc733a31e66d9041417e8ede27d2313194a673d747fae5360daa
MD5 b52b07f39b6c3bbb8c7a6fd257735d59
BLAKE2b-256 1c350556f494cb76b609e0623bfa7359d8075cb190996581ef1baac5fb7af475

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on solccp/neighborlist-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page