Metadata-Version: 2.4
Name: molcrafts-molrs
Version: 0.13.2
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Rust
Classifier: Topic :: Scientific/Engineering :: Chemistry
Requires-Dist: numpy>=2.0
Requires-Dist: tox>=4.23 ; extra == 'dev'
Requires-Dist: maturin>=1.0,<2.0 ; extra == 'dev'
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: numpy>=2.0 ; extra == 'dev'
Requires-Dist: zensical>=0.0.51 ; extra == 'doc'
Requires-Dist: mkdocstrings[python] ; extra == 'doc'
Requires-Dist: molcrafts-zensical-theme>=0.2.3 ; extra == 'doc'
Provides-Extra: dev
Provides-Extra: doc
License-File: LICENSE
Summary: Python bindings for molrs molecular simulation library
Home-Page: https://github.com/MolCrafts/molrs
License-Expression: BSD-3-Clause
Requires-Python: >=3.12
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM

# molcrafts-molrs

[![PyPI](https://img.shields.io/pypi/v/molcrafts-molrs.svg)](https://pypi.org/project/molcrafts-molrs/)

Python bindings for the [molrs](https://github.com/MolCrafts/molrs) molecular modeling toolkit.

Install with `pip install molcrafts-molrs` and `import molrs`. Full docs:
<https://docs.molcrafts.org/molrs/>.

## Install

```bash
pip install molcrafts-molrs
```

Requires Python 3.12+.

## Quick start (0.13 surface)

```python
import numpy as np
import molrs

# SMILES → atomistic graph (class API under molrs.io)
mol = molrs.io.SmilesIR("CCO").to_atomistic()

# 3D coordinates
from molrs.conformer import Conformer

mol = Conformer().generate(mol)

# Force field: typify → pairs → potentials (no typifier.build())
from molrs.ff import MMFF94Typifier, extract_coords, intramolecular_pairs

typed = MMFF94Typifier().typify(mol)
frame = typed.to_frame()
frame["pairs"] = intramolecular_pairs(frame)
pots = MMFF94Typifier().forcefield().to_potentials(frame)
coords = extract_coords(frame)
energy, forces = pots.calc_energy_forces(coords)
assert forces.shape == (frame["atoms"].nrows, 3)
```

## Package layout

| Import | Owns |
|--------|------|
| `molrs` (top level) | Core: `Frame`, `Block`, `Atomistic`, `Box`, neighbors, … |
| `molrs.io` | Readers/writers, `SmilesIR` |
| `molrs.ff` | Force fields, typifiers, potentials |
| `molrs.compute` | RDF, MSD, transport, dielectric, … |
| `molrs.conformer` | 3D generation |
| `molrs.perceive` | Rings / aromaticity builder |

Users of analysis APIs: analysis time is **fs** (LAMMPS `real`). MSD needs
**unwrapped** coordinates. VACF is the unbiased \(C(\tau)\) used for Green–Kubo D
and VDOS.

## Development

```bash
maturin develop --release
pytest -q
```

