Fast symbolic differentiation library - Rust-powered Python bindings
Project description
SymbAnaFis: Symbolic Analysis for Physics
A fast, focused Rust library for symbolic differentiation and analysis, designed for physics and engineering applications.
Features
- Symbolic Differentiation: Compute derivatives of complex mathematical expressions.
- Context-Aware Parsing: Support for fixed variables (constants) and custom functions.
- Simplification: Comprehensive algebraic, trigonometric, hyperbolic, and logarithmic simplification rules.
- Extensible: Easily add new functions and simplification rules.
- Safe: Built with Rust's safety guarantees, with limits on recursion depth and node count.
Installation
Add this to your Cargo.toml:
[dependencies]
symb_anafis = "0.1.0"
Quick Start
use symb_anafis::{diff, simplify};
fn main() {
// Differentiate sin(x) * x with respect to x
let derivative = diff(
"sin(x) * x".to_string(),
"x".to_string(),
None, // No fixed variables
None // No custom functions
).unwrap();
println!("Derivative: {}", derivative);
// Output: cos(x) * x + sin(x)
// Simplify an expression
let simplified = simplify(
"x^2 + 2*x + 1".to_string(),
None, // No fixed variables
None // No custom functions
).unwrap();
println!("Simplified: {}", simplified);
// Output: (x + 1)^2
}
Configuration
You can configure safety limits using environment variables:
SYMB_ANAFIS_MAX_DEPTH: Maximum AST depth (default: 100)SYMB_ANAFIS_MAX_NODES: Maximum AST node count (default: 10000)
export SYMB_ANAFIS_MAX_DEPTH=200
export SYMB_ANAFIS_MAX_NODES=50000
Advanced Usage
Expression Simplification
You can simplify expressions without differentiation:
use symb_anafis::simplify;
fn main() {
// Simplify a complex expression
let result = simplify(
"sin(x)^2 + cos(x)^2".to_string(),
None, // No fixed variables
None // No custom functions
).unwrap();
println!("Simplified: {}", result);
// Output: 1
}
Multi-Character Symbols
For symbols with multiple characters (like "sigma", "alpha", etc.), pass them as fixed variables to ensure they're treated as single symbols:
use symb_anafis::simplify;
fn main() {
// This treats "sigma" as one symbol
let result = simplify(
"(sigma^2)^2".to_string(),
Some(&["sigma".to_string()]),
None
).unwrap();
println!("Simplified: {}", result);
// Output: sigma^4
}
Fixed Variables and Custom Functions
You can define constants (like a, b) and custom functions (like f(x)) that are treated correctly during differentiation.
use symb_anafis::diff;
fn main() {
// Differentiate a * f(x) with respect to x
let result = diff(
"a * f(x)".to_string(),
"x".to_string(),
Some(&["a".to_string()]), // 'a' is a constant
Some(&["f".to_string()]) // 'f' is a custom function
).unwrap();
println!("Derivative: {}", result);
// Output: a * ∂_f(x)/∂_x
}
Supported Functions
- Trigonometric:
sin,cos,tan,cot,sec,csc,asin,acos,atan,acot,asec,acsc - Hyperbolic:
sinh,cosh,tanh,coth,sech,csch,asinh,acosh,atanh,acoth,asech,acsch - Exponential/Logarithmic:
exp,ln,log,log10,log2 - Roots:
sqrt,cbrt - Absolute Value/Sign:
abs,sign - Special:
sinc,erf,erfc,gamma,digamma,trigamma,tetragamma,polygamma,beta,LambertW,besselj,bessely,besseli,besselk
Note: The polygamma(n, x) function provides derivatives for all polygamma functions. Functions with non-elementary derivatives use custom notation.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file symb_anafis-0.2.2.tar.gz.
File metadata
- Download URL: symb_anafis-0.2.2.tar.gz
- Upload date:
- Size: 131.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.10.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1feb7871925e645feccd8b1921fb014f522043a255785017a78bc551ba532643
|
|
| MD5 |
4291934d8afea0370246b40f17b688f1
|
|
| BLAKE2b-256 |
b3f259181b504e0aad767544d6d6993882dc80dd3cac4f48e7184d8baf3ba846
|
File details
Details for the file symb_anafis-0.2.2-cp314-cp314-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: symb_anafis-0.2.2-cp314-cp314-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 539.0 kB
- Tags: CPython 3.14, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.10.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
647e81aca4a893e269dbee0ae43f7bfa15fe2cbe23cbad46dd70163c51234e23
|
|
| MD5 |
c6140e04605123bd41f66cfb746d027e
|
|
| BLAKE2b-256 |
7c879e5c130f0dd4611ae5697f47ff6e73a8c2e92e627be555d62648b46b1c84
|