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.6.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.6-cp313-cp313-win_amd64.whl (546.6 kB view details)

Uploaded CPython 3.13Windows x86-64

neighborlist_rs-0.1.6-cp313-cp313-manylinux_2_24_x86_64.whl (739.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64

neighborlist_rs-0.1.6-cp313-cp313-manylinux_2_24_aarch64.whl (698.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64

neighborlist_rs-0.1.6-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.6-cp312-cp312-win_amd64.whl (547.0 kB view details)

Uploaded CPython 3.12Windows x86-64

neighborlist_rs-0.1.6-cp312-cp312-manylinux_2_24_x86_64.whl (739.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64

neighborlist_rs-0.1.6-cp312-cp312-manylinux_2_24_aarch64.whl (699.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64

neighborlist_rs-0.1.6-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.6-cp311-cp311-win_amd64.whl (546.5 kB view details)

Uploaded CPython 3.11Windows x86-64

neighborlist_rs-0.1.6-cp311-cp311-manylinux_2_24_x86_64.whl (737.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64

neighborlist_rs-0.1.6-cp311-cp311-manylinux_2_24_aarch64.whl (698.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64

neighborlist_rs-0.1.6-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.6.tar.gz.

File metadata

  • Download URL: neighborlist_rs-0.1.6.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.6.tar.gz
Algorithm Hash digest
SHA256 a22a589fcd8dfe4c678df5f9e4270c0e38a59044faebf4ad11838321522c0e91
MD5 5ea53e677f1931912b3b4a6ac493c1aa
BLAKE2b-256 4621b7950f11d0de23f3b9d02a8271160f0b7c036ba37ba189ba866a88721be7

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6.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.6-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 30c58708e679a38aee686e478dedb737a2bfac67fff7f2912cd814b8511a13d1
MD5 21132c46715d80e57f1b326cef4150cf
BLAKE2b-256 c8879959f4508979fd9e6d5a61a98e8381f1e1d490721b6005c6a07ed6f99565

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp313-cp313-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp313-cp313-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 d8308ed1fdaf41d85219c04a2152d03fe68cbe000f01a8f92ecb8fc45fce6827
MD5 4754b79e7783635940e798a20eb603ae
BLAKE2b-256 6094c0cc380250ec7e6d465c2e59dca3ff4c83addf7c55aa866a16ecbdf6a18f

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp313-cp313-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp313-cp313-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 862442eec8a925cfae4b02ffb10169237bd6c2df28eb37d176bf3f747a21d1e2
MD5 f5fd7f60b36f0164f07231ee2fb8445e
BLAKE2b-256 f401a4358b8f859a734ae5e2cab2bce46413a5dc8c001355b97eef8d24e6025d

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-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.6-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 47e177df56eed50848d66ea338811d99631384e2e89abc23801c7531d68ca224
MD5 fca2df542079b41e33e01e9571bb5a72
BLAKE2b-256 f13e09cfd1ccdb680c2187f7587774b3df247ed6d37be4f9e2ad0c4aea490439

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3322f689156475233f19bd8e01378cf826702f33691b973399799b94a1e68aba
MD5 9f53ad1f891f7aaa7057c3f43fbb7a7b
BLAKE2b-256 1d854ff3ae32565748afded5c262e5a17186be3d7dff4399cb22036717079530

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp312-cp312-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp312-cp312-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 bec29dc15d6c95f1c9adf425474bbaf039932905e8d3035433edae56b40af179
MD5 1c9017ae20ed893a3e98017d8fbb575b
BLAKE2b-256 c30219b5724e89053f6543d5dda73897faec3625e67178d3908e9e4fa718cc1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp312-cp312-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp312-cp312-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 154793f8e2bc1ec417d8dcad245f03ea85d567d8adb69cc10185ce68cd3da541
MD5 d892f8fa1fe8ccbac16194ce100a60a4
BLAKE2b-256 97cc0854d0f29fb7b005e73d19566f3f488e0b28385f54ce9a3b564d1ec07f9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-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.6-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 a2d88875aae6f38dc2f6d9e10b82f909ae8307d65771ffba8f1240b67038eb56
MD5 80113e958436df2e97bbc85e5bb7772d
BLAKE2b-256 68c7278889b6bf141459fbbace1e05c285c7f4cd4faaa9ccc51212712daef78e

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7aca73ed56c1f291e3d4f4a1624ccd2f0c8e629f9b8b80318c6ed42240a1929c
MD5 8e65e6e2e1fd60ee93d42c41f4be16f8
BLAKE2b-256 d9fd2b76579a6088bf36b9cacf7d01aac960cab511679dcd8837af1d2767791b

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp311-cp311-manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp311-cp311-manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 7ded5a53c10cfba8c9871681aeef4b0393fe74bc05f91015b5986f5d3c4e5423
MD5 0a0b63fb517395e171113d29f9e2d2c7
BLAKE2b-256 5f995020b774ac7fb93bfa1d3d9ec20274c7db3f90de06f117dee466450c92d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-cp311-cp311-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for neighborlist_rs-0.1.6-cp311-cp311-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 d34e00d415ca793eb45e5cedc4c69b9ae2184e6f3d51f2e8676f75357a28ff5c
MD5 04dda83f5f249306fbb455cc5f720046
BLAKE2b-256 ee3481dcb2fa2c0df290b8d1e9df8d112f506efc2965ce4a0ee2802bc8dbeedd

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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.6-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.6-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 98dfa5f60fe70e83e3cf8468faad33b26bcb6dee21cb083d2710b34ce10ebf43
MD5 8497f7cf3b4fda46f01ceb9d7d017860
BLAKE2b-256 8104e1a1a161fd1c3f58b21eeb266b43168fa271c794f4f952abae655828e838

See more details on using hashes here.

Provenance

The following attestation bundles were made for neighborlist_rs-0.1.6-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