Skip to main content

Protein I/O for JAX with high-performance Rust backend

Project description

Proxide

Proxide is a high-performance library for Protein I/O and Physics bridging in JAX. It combines a flexible Python/JAX frontend with a highly optimized Rust backend (_proxider) to provide fast structure parsing, force field parameterization, and seamless integration with JAX MD.

NOTE: This is a research library in active development.


🚀 Features

  • Hybrid Architecture:
    • Rust Backend: 25x faster parsing (PDB/mmCIF), 50x faster topology generation, and robust force field parameterization.
    • JAX Frontend: Differentiable physics, geometric deep learning utilities, and seamless GPU integration.
  • Robust I/O: Load PDB, mmCIF, and PQR files with automatic error handling and corrections.
  • Molecular Dynamics: Parse OpenMM XML force fields, assign GAFF parameters, and generate fully parameterized AtomicSystem objects for JAX MD.
  • Trajectory Support: High-performance parsing of XTC, DCD, and TRR trajectories.

📦 Installation

Proxide requires a Rust toolchain to build the backend extension.

Prerequisites

  • Python: 3.11+
  • Rust: 1.75+ (Install via rustup.rs)
  • C++ Compiler: For compiling HDF5/chemfiles dependencies if needed.

From Source

# Clone the repository
git clone https://github.com/maraxen/proxide.git
cd proxide

# Install with uv (recommended) or pip
uv pip install .

# For development (includes test dependencies)
uv pip install -e ".[dev]"

The installation process will automatically compile the Rust _proxider extension using maturin.

Optional: Espaloma Charge (ML partial charges)

Inference uses the JAX/Equinox port expaloma (bundled weights; no PyTorch/DGL at runtime). The [espaloma] extra pulls expaloma from PyPI (and rdkit).

uv pip install -e ".[espaloma]"

For local development against an editable expaloma checkout, use a path override (e.g. uv.sources in your workspace) or:

uv pip install -e ../expaloma
uv pip install -e ".[dev]"

OpenFF toolkit wrapper (legacy upstream espaloma_charge): uv pip install -e ".[espaloma-openff]".

API: proxide.chem.partial_charges (assign_espaloma_charges_rdkit, etc.). Validation uses golden vectors under tests/data/espaloma_golden/; refresh those files when bumping expaloma.

pytest -m espaloma

🛠️ Usage

Loading a Structure

Use the high-level parse_structure function for fast, robust parsing:

from proxide import parse_structure

# Load a PDB file to a unified Protein object
protein = parse_structure("path/to/structure.pdb")

# Access data as JAX arrays
print(protein.coordinates.shape)  # (N_residues, 37, 3)

Force Field Parameterization

Proxide can automatically assign force field parameters (charges, radii, etc.) via the Rust backend:

from proxide import parse_structure, OutputSpec

# Configure parsing options
spec = OutputSpec(
    add_hydrogens=True,             # Add missing geometric hydrogens
    infer_bonds=True,               # Infer connectivity if missing
    parameterize_md=True,           # Compute MD parameters
    force_field="protein.ff14SB.xml" # Use standard AMBER force field
)

# Parse and parameterize in one step
protein = parse_structure("path/to/structure.pdb", spec)

# Access MD parameters
print(protein.charges)  # Partial charges
print(protein.sigma)    # Lennard-Jones sigma

Trajectory Parsing

from proxide import parse_xtc

# Fast Rust-based XTC parsing
traj_data = parse_xtc("path/to/trajectory.xtc")
coords = traj_data["coordinates"]  # (N_frames, N_atoms, 3)

Fast Partial Charges (Espaloma)

Proxide provides access to high-performance Expaloma graph-neural-network inference for charge assignment using native Rust embedded weights:

# Assign charges with the fast Rust backend
proxide charges molecule.sdf --backend rust

⚡ Performance

The migration to a Rust backend has yielded significant performance improvements compared to the pure Python implementation:

Operation Speedup Example Metric
PDB Parsing 25x -
mmCIF Parsing 25x -
Topology Generation 50x -
Force Field Loading 10x -
Espaloma Inference 7.5x 13.6ms (JAX) ➔ 1.8ms (Rust)

🚀 Deployment & CI/CD

Proxide uses Maturin to seamlessly build Python wheels and publish them to PyPI. To publish proxide releases securely without secrets, we utilize PyPI Trusted Publishing (OIDC). Do not configure a PYPI_API_TOKEN GitHub Secret. Instead, create a Trusted Publisher in the PyPI dashboard bound to this repository to allow .github/workflows/publish.yml to authenticate.


⚠️ Migration Notes

If you are migrating from older versions of Proxide:

  1. Biotite Removal: Direct dependency on biotite for parsing has been removed. All parsing is now handled by _proxider.
  2. API Changes:
    • proxide.io.parsing.biotite -> proxide.parse_structure
    • proxide.physics.force_fields -> proxide.load_forcefield
  3. JAX by Default: Most I/O functions now return JAX arrays by default. Use use_jax=False if you specifically need NumPy arrays.

🔧 Development

Running Tests

# Run all tests
uv run pytest

# Run fast smoke tests
uv run pytest -m smoke

Building Wheels Locally

Before pushing a release to GitHub, test the wheel build locally to catch platform-specific issues early:

# Test the build locally (validates HDF5 static compilation and workflow config)
bash scripts/test-wheel-build.sh

# This will:
# 1. Check build prerequisites (cargo, rustc, python3)
# 2. Build the Rust extension with static HDF5 compilation
# 3. Verify the GitHub workflow is correctly configured

Note: The Rust extension uses static HDF5 compilation via the hdf5-metno crate with the static feature enabled. This means HDF5 is compiled from source during the build and included in the binary, eliminating platform-specific library dependencies.

Linting and Typing

# Linting
uv run ruff check src/proxide/ --fix

# Type Checking
uv run ty check

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

proxide-0.1.0a6.tar.gz (7.2 MB view details)

Uploaded Source

Built Distributions

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

proxide-0.1.0a6-cp311-abi3-win_amd64.whl (12.1 MB view details)

Uploaded CPython 3.11+Windows x86-64

proxide-0.1.0a6-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.2 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ x86-64

proxide-0.1.0a6-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.0 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64

proxide-0.1.0a6-cp311-abi3-macosx_11_0_arm64.whl (10.5 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

proxide-0.1.0a6-cp311-abi3-macosx_10_12_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

Details for the file proxide-0.1.0a6.tar.gz.

File metadata

  • Download URL: proxide-0.1.0a6.tar.gz
  • Upload date:
  • Size: 7.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for proxide-0.1.0a6.tar.gz
Algorithm Hash digest
SHA256 604ce1a0dcb1135d054deb0165826aca9fbe923d2d47c6e07ad8317e8e35bc22
MD5 dc1ed010dd117a97951bf5847c8ec3e1
BLAKE2b-256 a557d9c2c1c1b03a1517fb8baf0ef3eab9018e45d6a80887413b6ddc32d8cde2

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxide-0.1.0a6.tar.gz:

Publisher: publish.yml on maraxen/proxide

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

File details

Details for the file proxide-0.1.0a6-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: proxide-0.1.0a6-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 12.1 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for proxide-0.1.0a6-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 af38042f3b4e842a83800e3f54432bb506ca0c420d758aa95eaa769de60c2a24
MD5 6f607509c6655a3f65d62e4003b23bbc
BLAKE2b-256 2790b129d24a67a4c2eb9c6e21db3acaa62e765c0b1719dcbc39ba888d1e059b

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxide-0.1.0a6-cp311-abi3-win_amd64.whl:

Publisher: publish.yml on maraxen/proxide

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

File details

Details for the file proxide-0.1.0a6-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for proxide-0.1.0a6-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 14745d15a399b16924eac8e51532cfd38678323da3aa4adccb9e465f1e5c5fd8
MD5 9da24e9ec41265888e2f681938dc1330
BLAKE2b-256 865041d3b00f83bc27b03e6ea361df8ef97fce8d2005c890a13d4d75a4f46fed

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxide-0.1.0a6-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on maraxen/proxide

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

File details

Details for the file proxide-0.1.0a6-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for proxide-0.1.0a6-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8ff02219a71d4c2cea120680c5673521fae88c32b16d0dc259ba8e063a6060cc
MD5 9ec48cded0e3f395cde039695e91883d
BLAKE2b-256 d3718c87b9007815546156ea159261831e423aed8c123964e3dd684dfa29f21b

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxide-0.1.0a6-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on maraxen/proxide

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

File details

Details for the file proxide-0.1.0a6-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for proxide-0.1.0a6-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89ba19e76b45d5cf2fd8b00ded4247a6e7fa40077221bcccbec94b8b80a77a04
MD5 06fb8e2b7d45203ffab8a88b7a62a363
BLAKE2b-256 66ef6d820db04045c42da87fb6575fb2011e01d5705fc5ed1d1e9e138bd8c45a

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxide-0.1.0a6-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on maraxen/proxide

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

File details

Details for the file proxide-0.1.0a6-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for proxide-0.1.0a6-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9bde0dd8894986eff93c24821b9cbcdebe42c957005eceaaf23a0a005a478c0a
MD5 3503a3ee04b972932c6241f2df88a8ba
BLAKE2b-256 aff908c8ce22bbb7413ba15f9b61fc5a2731d11d6796c44d653b002f3f7a3941

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxide-0.1.0a6-cp311-abi3-macosx_10_12_x86_64.whl:

Publisher: publish.yml on maraxen/proxide

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