math-symbols

Crates.iomath-symbols
lib.rsmath-symbols
version0.2.1
created_at2023-06-23 07:49:26.098445+00
updated_at2025-12-23 09:35:31.678085+00
descriptionSymbols for computer algebra
homepage
repositoryhttps://github.com/a-maier/math-symbols
max_upload_size
id898083
size18,245
(a-maier)

documentation

README

math-symbols

Named symbols for use in compute algebra systems. Symbol names are stored centrally such that copies are cheap and need little memory.

Example

use math_symbols::*;

// Define a number of symbols with variable name equal to symbol name
symbols!(x, y, z);
assert_eq!(x.name(), "x");
assert_eq!(y.name(), "y");
assert_eq!(z.name(), "z");

// Symbols are identified by their names
let xx = Symbol::new("x");
assert_eq!(x, xx);

// Symbols are ordered by their creation time
assert!(x < y);

// We can generate symbol names dynamically. The allocated
// memory will be leaked if and only if a new symbol has to be created.
for i in 0..5 {
    // leaks memory
    let xi = Symbol::new(format!("x{i}"));
}

for i in 0..5 {
    // does not leak any additional memory
    let xi = Symbol::new(format!("x{i}"));
}

Features

  • serde adds support for (de)serialisation with serde
  • By default each symbol is internally stored in a u32. Hence, the total number of symbols is limited to 2^32. The features u8, u16, u64, u128, usize enable symbols Symbolu8, Symbolu16, Symbolu64, Symbolu128, Symbolusize, and macros symbols_u8, symbols_u16, symbols_u64, symbols_u128, symbols_usize for the corresponding storage type.

Similar crates

License: GPL-3.0-or-later

Commit count: 6

cargo fmt