A Rust library for parsing, representing, and transforming chemical formulas.
chemformula is a Rust crate for working with chemical formulas, providing tools for:
- Parsing chemical formula strings
- Representing formulas as structured data
- Transforming and manipulating formulas
- Working with elements and compositions
It is designed for:
- Chemistry-related software
- Scientific computing
- Data processing pipelines involving chemical compositions
- 🧪 Parse chemical formulas (e.g.,
H2O,Al2O3,Al(OH)4[-], etc.) - 🧱 Structured representation of formulas
- 🔄 Formula transformation utilities
- 🧬 Element-level abstraction
- ⚡ Lightweight and fast
- 🧠 Designed for extensibility
- Language: Rust
- No heavy dependencies (lightweight core)
src/
├── lib.rs # Library entry point
├── main.rs # Example / CLI entry
├── formula.rs # Core formula representation
├── element.rs # Element definitions
├── parse.rs # Parsing logic
├── transform.rs # Formula transformations
[dependencies]
chemformula = "0.2"use std::str::FromStr;
use chemformula::Formula;
pub fn main(){
let name = "Al(OH)4[-]";
let frm = Formula::from_str(name).unwrap();
println!("name = {:?}, formula = {:?}, wmass = {:?}", &name, &frm, frm.wmass());
}Please refer to the /examples folder to see how the crate functionality works.
use chemformula::Element;
// Example usage (depends on your API)
let oxygen = Element::from_str("O").unwrap();use std::str::FromStr;
use nalgebra::{dvector};
use chemformula::Formula;
use chemformula::Transform;
pub fn main(){
let binitial = vec!["CaO", "Al2O3", "SiO2"];
let bfinal = vec!["Ca", "Al", "Si", "O"];
let transform = Transform::new(&binitial, &bfinal, false).unwrap();
let compinitial = dvector![0.4, 0.5, 0.1]; // moles, initial
let compfinal = transform.transform_init2final(&compinitial, false, false, false);
println!("FINAL COMPOSITION (moles) = {:.6?}", &compfinal.data.as_slice());
let compfinal = transform.transform_init2final(&compinitial, false, false, true);
println!("FINAL COMPOSITION (Xfraction) = {:.6?}", &compfinal.data.as_slice());
let compfinal = transform.transform_init2final(&compinitial, false, true, false);
println!("FINAL COMPOSITION (grams) = {:.6?}", &compfinal.data.as_slice());
let compfinal = transform.transform_init2final(&compinitial, false, true, true);
println!("FINAL COMPOSITION (Wfraction) = {:.6?}", &compfinal.data.as_slice());
}Handles conversion from string → structured formula.
Defines internal representation of a chemical formula.
Represents chemical elements.
Provides utilities for modifying formulas.
cargo testContributions are welcome!
- Fork the repo
- Create a branch
- Commit changes
- Open a PR
https://github.com/evnekdev/chemformula/issues
MIT
Evgenii Nekhoroshev
https://github.com/evnekdev