rustebra 0.4.0

A hybrid no_std/alloc linear algebra crate for Rust, scaling from embedded targets to dynamic Krylov subspace solvers.
Documentation
# no_std & Embedded

`rustebra` is `no_std` by default: `src/lib.rs` declares `#![cfg_attr(not(test), no_std)]`,
so the crate has no dependency on the standard library (outside test builds) and no
allocator requirement unless you opt in.

Without any feature flags, only stack-allocated, compile-time-sized types are available:
`StaticVector<T, N>` and `StaticMatrix<T, R, C>`, whose lengths/shapes are const generics.
These work on embedded targets with no heap at all.

Enabling the `alloc` feature pulls in `extern crate alloc` and unlocks heap-allocated,
runtime-sized types: `DynamicVector<T>`, `DynamicMatrix<T>`, and every sparse matrix type in
`rustebra::sparse` (`CooMatrix`, `CsrMatrix`, `CscMatrix`, and their sorted variants), all
of which are gated behind `#[cfg(feature = "alloc")]` and simply don't exist in the crate's
public API without it.

```toml
# no_std, no allocator: only StaticVector/StaticMatrix are available.
[dependencies]
rustebra = "0.3"

# adds DynamicVector/DynamicMatrix and the sparse module.
[dependencies]
rustebra = { version = "0.3", features = ["alloc"] }
```

## Gotchas

- Code that references `DynamicVector`, `DynamicMatrix`, or anything in `rustebra::sparse`
  without the `alloc` feature enabled won't compile — these items aren't hidden behind a
  runtime check, they're absent from the crate entirely.
- `StaticMatrix::determinant` on matrices larger than `4x4` returns
  `Err(DeterminantError::MatrixTooLargeWithoutAlloc)` when the `alloc` feature is disabled —
  cofactor expansion beyond that size needs heap-allocated scratch space that isn't
  available in a pure `no_std` build.