symplex 0.22.1

Exact symbolic mathematics for Rust: calculus, summation, solving, linear algebra, transforms, compile-time dimensional analysis, and Rust/C code generation
Documentation
# What's New in 0.12

**Statistics, redesigned to compose.**  A distribution is now a
[`Family`](guide/statistics.md#continuous-families) — a struct with its
support, density and closed forms — behind an opaque `Distribution`
handle that owns the generic machinery.  That is what makes the new
constructions one-liners:

- `x.given(&event)` — conditioning (`Truncated`): `E[N | N > 0] = √(2/π)`,
  `E[B | B ≥ 2] = 325/131`.
- `x.transform("Y", &g)``aX + b` with every closed form transported
  (`Affine`), strictly monotone maps and ``/`|X|` by the
  change-of-variables formula (`Transformed`), finite ranges mapped and
  merged.
- `Distribution::mixture(&[(w, F), …])`.
- Your own families: implement `Family`, wrap with
  `Distribution::from_family`.

**Events through the set machinery.**  With numeric bounds any boolean
combination of relations in the variable is accepted — `P(N² < 1)`,
`P(N < −1 ∨ N > 1)`, `E[X | X² > 1]` — and several 0.11 answers that were
wrong are fixed (`P(X = 3 ∧ X > 5)`, `P(X > 1 ∧ X ≥ 2)`, `P(X = ½)` for an
integer variable, `Uniform(0,1).cdf(3)`).

**New closed forms.**  `betainc` / `betainc_regularized` (SymPy's
4-argument form) give `Beta`, `StudentT` and the new `FDistribution`
their CDFs; `erfinv` compiles, so `Normal`/`LogNormal` (and everything
built on them) sample; `Σ C(k+c, k) xᵏ` and the binomial theorem with
symbolic `n` and `p` close, so `NegativeBinomial` needs no polynomial
workaround.

See [Migrating from 0.11 to 0.12](reference/migrating-0.12.md) for the
one-line fixes to code that matched on the old enums.