Contents

ChrisGVE/thales

Rust crate for mathematical equation solving - algebraic, numerical, and coordinate transformations

Features

  • Expression Parsing - Parse mathematical expressions with full operator precedence
  • Equation Solving - Linear, quadratic, polynomial, transcendental, and systems of equations
  • Calculus - Differentiation, integration, limits, Taylor series, ODEs
  • Numerical Methods - Newton-Raphson, bisection, Brent's method when symbolic fails
  • Coordinate Systems - 2D/3D transformations, complex numbers, De Moivre's theorem
  • Units & Dimensions - Dimensional analysis and unit conversion
  • iOS Support - FFI bindings for Swift via swift-bridge

Installation

[dependencies]
thales = "0.4.2"

Quick Start

Solve an Equation

use thales::{parse_equation, SmartSolver, Solver, Variable};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let equation = parse_equation("2*x + 5 = 13")?;
    let solver = SmartSolver::new();
    let x = Variable::new("x");
    let (solution, path) = solver.solve(&equation, &x)?;

    // View step-by-step solution
    for step in path.steps() {
        println!("{}", step);
    }
    Ok(())
}

Coordinate Transformations

use thales::{Cartesian2D, Polar};

fn main() {
    let point = Cartesian2D::new(3.0, 4.0);
    let polar = point.to_polar();

    assert!((polar.r - 5.0).abs() < 1e-10);

    // Round-trip conversion
    let back = polar.to_cartesian();
    assert!((back.x - 3.0).abs() < 1e-10);
}

Documentation

The full documentation is available on docs.rs/thales, including:

Guides

| Guide | Description | |-------|-------------| | Solving Equations | Linear, quadratic, polynomial, and systems | | Calculus Operations | Derivatives, integrals, limits, ODEs | | Series Expansions | Taylor, Maclaurin, Laurent, asymptotic | | Coordinate Systems | 2D/3D transforms, complex numbers | | Numerical Methods | Root-finding algorithms | | Working with Units | Dimensional analysis | | Error Handling | ThalesError patterns |

LaTeX Support

Thales can parse LaTeX mathematical notation into its internal expression tree via parse_latex.

Supported constructs

| Category | LaTeX syntax | Examples | |----------|-------------|---------| | Fractions | \frac{num}{denom} | \frac{1}{2}, \frac{x+1}{y} | | Square root | \sqrt{x} | \sqrt{2}, \sqrt{x+1} | | nth root | \sqrt[n]{x} | \sqrt[3]{8}, \sqrt[n]{x} | | Superscripts | x^{n} or x^n | x^{2}, e^{-x} | | Subscripts | x_{n} or x_n | x_{1}, x_{12} | | Greek letters | \alpha, \beta, \pi, etc. | \alpha, \theta, \pi | | Trig functions | \sin, \cos, \tan, etc. | \sin{x}, \cos(\theta) | | Logarithms / exp | \ln, \log, \exp | \ln{x}, \log_{10}{x}, \log_{2}{8} | | Integrals | \int_{a}^{b} expr \, dx | \int_{0}^{1} x \, dx, \int x dx | | Limits | \lim_{x \to a} | \lim_{x \to 0} x, \lim_{x \to \infty} x | | Sums | \sum_{i=a}^{b} | \sum_{i=1}^{10} i | | Operators | \cdot, \times, \div, \pm | a \cdot b, 2 \times 3 |

Not yet supported

The following constructs are not currently parsed and will return an error:

  • Double/contour integrals: \iint, \oint
  • Products: \prod
  • Partial derivatives: \partial
  • Matrix environments: \begin{matrix}, \begin{pmatrix}, \begin{bmatrix}, etc.

Optional LAPACK Acceleration

Enable hardware-accelerated matrix operations (eigenvalues, eigenvectors, QR decomposition, linear system solving) by selecting a LAPACK backend:

# macOS / iOS — links against Apple Accelerate.framework
thales = { version = "0.3", features = ["lapack-accelerate"] }

# Linux — uses reference LAPACK (requires liblapack-dev / gfortran)
thales = { version = "0.3", features = ["lapack-netlib"] }

# Linux — uses OpenBLAS (requires libopenblas-dev)
thales = { version = "0.3", features = ["lapack-openblas"] }

The lapack feature is an alias for lapack-accelerate. Without any LAPACK feature, thales uses pure-Rust implementations for all numerical linear algebra.

iOS Cross-Compilation

Build for iOS with FFI support:

# Add iOS targets
rustup target add aarch64-apple-ios aarch64-apple-ios-sim

# Build for device
cargo build --release --features ffi --target aarch64-apple-ios

See IOS_BUILD.md for complete iOS integration instructions.

Changelog

See CHANGELOG.md for version history and release notes.

License

MIT License - see LICENSE for details.

Package Metadata

Repository: ChrisGVE/thales

Stars: 2

Forks: 0

Open issues: 0

Default branch: main

Primary language: rust

License: MIT

README: README.md