ccalc-engine 0.25.0

Core computation engine for ccalc: tokenizer, parser, AST evaluator, and memory cells
Documentation
[package]
name = "ccalc-engine"
version.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
edition.workspace = true
description = "Core computation engine for ccalc: tokenizer, parser, AST evaluator, and memory cells"
readme = "README.md"
keywords = ["calculator", "matlab", "octave", "repl", "math"]
categories = ["mathematics", "parser-implementations", "embedded"]

[features]
default = []

# Accelerate matrix multiply (A*B, A.*B) via system-installed OpenBLAS.
# Does NOT affect inv(A) / det(A) — those use linfa-linalg (pure Rust, always on).
#   Linux:   sudo apt install libopenblas-dev
#   macOS:   brew install openblas
#   Windows: install OpenBLAS via vcpkg or MSYS2
# Build: cargo build --release --features blas
blas = ["dep:blas-src", "ndarray/blas"]

# Statically link OpenBLAS from source (same scope as blas — only matrix multiply).
# Requires gfortran + cmake.
#   Linux/macOS: sudo apt install gfortran cmake  /  brew install gcc cmake
#   Windows: requires MSYS2 + MinGW + gfortran — non-trivial; prefer blas instead.
# Build: cargo build --release --features blas-static
blas-static = ["blas", "dep:openblas-src"]

# JSON encode/decode: jsondecode() and jsonencode() built-ins.
# Adds the serde_json crate; omitted from the default build to keep the binary lean.
# Build: cargo build --release --features json
json = ["dep:serde_json"]

# MAT file read: load('file.mat') built-in.
# Adds the matrw crate; omitted from the default build to keep the binary lean.
# Build: cargo build --release --features mat
mat = ["dep:matrw"]

[dependencies]
dirs = "5"
indexmap = "2"
ndarray = "0.16"
rand = { version = "0.8", features = ["small_rng"] }
libm = "0.2"
blas-src = { version = "0.10", optional = true, default-features = false, features = ["openblas"] }
openblas-src = { version = "0.10", optional = true, features = ["static"] }
serde_json = { version = "1", optional = true }
matrw = { version = "=0.1.4", optional = true }

[dev-dependencies]
criterion = { version = "0.5", features = ["html_reports"] }
tempfile = "3"

[[bench]]
name = "engine"
harness = false