mathhook

Crates.iomathhook
lib.rsmathhook
version0.2.0
created_at2025-12-15 17:22:34.848406+00
updated_at2025-12-29 02:55:20.252651+00
descriptionHigh-performance educational computer algebra system with ergonomic Rust macros
homepagehttps://github.com/AhmedMashour/mathhook
repositoryhttps://github.com/AhmedMashour/mathhook
max_upload_size
id1986425
size57,818
Ahmed Mashhour (AhmedMashour)

documentation

https://docs.rs/mathhook

README

MathHook

Crates.io Documentation License: MIT OR Apache-2.0

High-performance educational computer algebra system for Rust.

Features

  • Memory-optimized: 32-byte Expression enum for cache performance
  • Hybrid API: Expression methods + separate solver objects
  • Multi-format parsing: LaTeX, Wolfram Language, standard notation
  • Educational focus: Step-by-step explanations
  • Comprehensive macros: symbol!, symbols!, expr!, function!

Installation

[dependencies]
mathhook = "0.2.0"

Quick Start

use mathhook::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create symbols using macros
    let x = symbol!(x);

    // Build expressions using expr! macro
    let quadratic = expr!(x^2 + 2*x + 1);

    // Simplify
    let simplified = quadratic.simplify();

    // Calculus
    let derivative = quadratic.derivative(x.clone());

    // Parse from string
    let parser = Parser::new(&ParserConfig::default());
    let parsed = parser.parse("sin(x)^2 + cos(x)^2")?;

    Ok(())
}

Actual API Reference

For the complete API documentation, see docs.rs/mathhook.

Quick Reference

The prelude (use mathhook::prelude::*) provides:

Export Purpose
Expression Core 32-byte symbolic expression type
Symbol Symbolic variables
Number Integer, Rational, Float, Complex
MathSolver Equation solving
Parser Multi-format expression parsing
symbol!, expr! Expression construction macros

Memory Guarantee

use mathhook::prelude::*;
assert!(std::mem::size_of::<Expression>() <= 32);

Documentation

License

MathHook is dual-licensed under MIT OR Apache-2.0. See LICENSE.

Commit count: 0

cargo fmt