chematic-perception
Pure Rust molecular structure perception — ring detection, aromaticity, stereochemistry, charges.
Features
Ring Detection (SSSR)
- Horton minimum cycle basis: deterministic smallest-ring basis
- Gaussian Elimination (GF(2)): Linear algebra over finite fields
- Usage:
find_sssr(&mol) -> RingSet
Aromaticity Model
- Hückel 4n+2 π-Electron Rule: Aromatic vs non-aromatic detection
- Antiaromaticity (4n) (NEW in v0.1.32): Identifies unstable systems
- Cyclobutadiene, Cyclooctatetraene, etc.
- API:
assign_aromaticity(&mol) -> AromaticityModelring_classifications(&mol) -> Vec<RingAromaticity>antiaromatic_rings(&mol) -> Vec<Vec<AtomIdx>>has_antiaromaticity(&mol) -> bool
Stereochemistry
- CIP Priority Rules: Determine R/S configuration
- 2D → 3D Stereo: Assign stereoisomers from 2D wedge/dash
- E/Z Geometry: Double-bond stereochemistry
- Chiral Enumeration: Generate all stereoisomers
Molecular Properties
- Implicit Hydrogens: OpenSMILES valence rules
- Formal Charges: Automatic charge assignment
- Heteroatoms: N, O, S, P, halogens with correct aromaticity
Quick Start
Detect rings
use find_sssr;
let rings = find_sssr;
println!;
for ring in rings.rings
Classify aromaticity
use assign_aromaticity;
let model = assign_aromaticity;
let classifications = model.ring_classifications;
for in classifications.iter.enumerate
Check for antiaromaticity (NEW)
if model.has_antiaromaticity
Assign stereochemistry
use assign_stereo_from_2d;
let mol_with_stereo = assign_stereo_from_2d?;
// mol_with_stereo: 2D wedge/dash bonds converted to R/S
Algorithms
| Algorithm | Purpose | Complexity |
|---|---|---|
| Horton candidates + GF(2) | SSSR ring detection | graph-dependent; bounded by the implementation |
| Hückel 4n+2 Rule | Aromaticity classification | O(n) |
| CIP Priority Rules | R/S stereochemistry | O(n log n) |
| E/Z Geometry Detection | Double-bond stereochemistry | O(n) |
Crate Dependencies
chematic-core— Atom, Bond, Molecule typeschematic-smiles— SMILES parsing
Zero FFI: Pure Rust, WASM-compatible.
Validation
Run cargo test -p chematic-perception. Model choices, differential results, and known residuals are documented in docs/validation.md and docs/compatibility-scope.md. Release history is maintained in the repository CHANGELOG.md.
License
MIT OR Apache-2.0