deep_causality_num 0.1.11

Number utils for for deep_causality crate.
Documentation

DeepCausality NUM types and traits

Crates.io Docs.rs MIT licensed Tests

Custom numerical traits with default implementation and types for the DeepCausality project based on the rust-num crate. This custom implementation is free of macros, free of unsafe code, free of external dependencies, and compiles for std, non-std, and non-std without float support. This crate supports all three complex number systems: Complex, Octonion, and Quaternion, which makes it suitable for scientific computing.

Numerical Traits:

Cast Traits:

  • AsPrimitive
  • FloatAsScalar
  • IntAsScalar
  • FromPrimitive
  • ToPrimitive
  • NumCast
  • IntoFloat

General traits:

  • Num
  • NumOps

Identity traits:

  • One / OneConst
  • Zero / Zero Const

Float Types

  • Float - implemented for f32 and f64
  • FloatOption - Abstract over float types (f32, f64) and their Option variants.

Complex Types

This crate implements all three complex numerical types:

  • Complex
  • Octonion
  • Quaternion

non-std support

The deep_causality_num crate provides support for no-std environments. This is particularly useful for embedded systems or other contexts where the standard library is not available. Note, the std feature is enabled by default thus you need to opt-into non-std via feature flags.

To use this crate in a no-std environment, you need to disable the default std feature and, if your application requires floating-point operations, enable the libm_math feature. The libm_math feature integrates the libm crate, which provides software implementations of floating-point math functions for no-std.

Cargo Build and Test for no-std

1. Building for no-std with Floating-Point Math:

To build the crate for no-std while including floating-point math support (via libm), use the following command:

cargo build --no-default-features --features libm_math -p deep_causality_num

2. Testing for no-std with Floating-Point Math:

To run tests in a no-std environment with floating-point math support, use:

cargo test --no-default-features --features libm_math -p deep_causality_num

There might be minor floating precision differences between std and non-std implementations that cause some tests to fail. If you encounter these, please submit a PR with a fix.

3. Building for no-std without Floating-Point Math (if not needed):

If your no-std application does not require floating-point operations, you can build without the libm_math feature:

cargo build --no-default-features -p deep_causality_num

4. Testing for no-std without Floating-Point Math (if not needed):

Similarly, to test without floating-point math functions:

cargo test --no-default-features -p deep_causality_num

However, this will cause about 138 tests because to fail since these tests are not configured for conditional test run because non-std without floating-point math is considered a corner case. If you need better support for this particular scenario, please open an issue.

Bazel Build

For regular (std) builds, run:

   bazel build //deep_causality_num/...

and

   bazel test //deep_causality_num/...

for tests. When you want to build for non-std, use

   bazel build --@rules_rust//rust/settings:no_std=alloc //deep_causality_num/...

and

   bazel test --@rules_rust//rust/settings:no_std=alloc //deep_causality_num/...

License

This project is licensed under the MIT license.

Security

For details about security, please read the security policy.

Author

  • Marvin Hansen.
  • Github GPG key ID: 369D5A0B210D39BC
  • GPG Fingerprint: 4B18 F7B2 04B9 7A72 967E 663E 369D 5A0B 210D 39BC