<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Numra blog</title><description>Release announcements, design notes, and longer-form posts about Numra.</description><link>https://numra-rs.org/</link><language>en-us</language><item><title>Announcing Numra 0.1.0</title><link>https://numra-rs.org/blog/announcing-numra-0-1-0/</link><guid isPermaLink="true">https://numra-rs.org/blog/announcing-numra-0-1-0/</guid><description>Numra 0.1.0 is on crates.io: 21 native-Rust crates of numerical methods that compose under one API — ODE, SDE, DDE, FDE, IDE, PDE, SPDE, optimization, autodiff, FFT, statistics, and more.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Numra 0.1.0 is on &lt;a href=&quot;https://crates.io/crates/numra&quot;&gt;crates.io&lt;/a&gt;. One &lt;code&gt;cargo add numra&lt;/code&gt; gives you ordinary and stochastic differential equations, delay equations, fractional and integral equations, PDEs and SPDEs, optimization, automatic differentiation, FFT, statistics, signal processing, and quadrature — implemented in Rust, sharing one set of abstractions, designed to compose without glue.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cargo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; numra&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This post is the &lt;em&gt;why&lt;/em&gt;. The &lt;a href=&quot;/changelog&quot;&gt;changelog&lt;/a&gt; is the &lt;em&gt;what&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;the-thesis-one-workspace-native-rust-methods-that-compose&quot;&gt;The thesis: one workspace, native Rust, methods that compose&lt;/h2&gt;
&lt;p&gt;Most numerical computing in Rust today is a thin shell over decades-old C or Fortran libraries. That works, and it gets you battle-tested code, but it has costs you only notice once you try to &lt;em&gt;compose&lt;/em&gt; methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An ODE solver returning a &lt;code&gt;Vec&amp;#x3C;f64&gt;&lt;/code&gt; that an optimizer can’t ingest without conversion.&lt;/li&gt;
&lt;li&gt;An autodiff library whose gradients an FFI solver can’t accept because the type doesn’t cross the boundary.&lt;/li&gt;
&lt;li&gt;A PDE discretization that gives you a sparse matrix in one crate’s format and a linear solver in another’s.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Numra is the bet that if you implement the numerics natively in Rust, share a small core of abstractions (&lt;code&gt;Scalar&lt;/code&gt;, &lt;code&gt;Vector&lt;/code&gt;, &lt;code&gt;Signal&lt;/code&gt;, &lt;code&gt;Uncertain&lt;/code&gt;) across every subsystem, and design every public type to be a first-class citizen everywhere else in the workspace, the resulting library is &lt;em&gt;qualitatively&lt;/em&gt; different to use.&lt;/p&gt;
&lt;p&gt;You stop writing adapters. You write the math.&lt;/p&gt;
&lt;h2 id=&quot;what-composability-looks-like-in-practice&quot;&gt;What composability looks like in practice&lt;/h2&gt;
&lt;p&gt;Here’s a complete, self-contained example: solve a stiff ODE, build a cubic spline through the trajectory, then integrate the spline back to verify conservation — three subsystems, no glue.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; numra&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;integrate&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{quad, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;QuadOptions&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; numra&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;interp&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;CubicSpline&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Interpolant&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;use&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; numra&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ode&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;DoPri5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;OdeProblem&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;Solver&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;SolverOptions&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// y&apos; = -y, y(0) = 1 on [0, 3]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; problem &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; OdeProblem&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    |&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;_t, y&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;], dydt&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;#x26;mut&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { dydt[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;y[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]; },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    0.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;vec!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; opts &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; SolverOptions&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;rtol&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;e-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;dense&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; result &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; DoPri5&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;solve&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;problem, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;opts)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;unwrap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// ODE -&gt; Interpolation: just hand the trajectory to a spline.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; y_series &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; result&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;component&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;unwrap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; spline &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; CubicSpline&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;natural&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;result&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;t, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;y_series)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;unwrap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// Interpolation -&gt; Quadrature: the spline IS a callable f64 -&gt; f64.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;let&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; q &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; quad&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; spline&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;interpolate&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(t), &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;0.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3.0&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;#x26;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;QuadOptions&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;())&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;unwrap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// integral_0^3 e^(-t) dt = 1 - e^(-3) ≈ 0.9502&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;assert!&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;((q&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;value &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3.0_&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;f64&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;exp&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;()))&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;abs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() &amp;#x3C; &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;e-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No type conversions. No &lt;code&gt;Into&lt;/code&gt; impls in your code. No “wrap this with a closure that does the dance.” This is the workflow that’s &lt;a href=&quot;https://github.com/moussaoutlook/numra-rs/blob/main/numra/tests/interop_workflows.rs&quot;&gt;enforced by an integration test&lt;/a&gt; so it stays that way.&lt;/p&gt;
&lt;p&gt;Five other workflows are checked the same way: ODE → FFT → signal processing → peak detection, parameter estimation → sensitivity → uncertainty, autodiff → optimization → curve fitting, PDE → statistics, and stats sampling → Monte Carlo ODE.&lt;/p&gt;
&lt;h2 id=&quot;whats-in-010&quot;&gt;What’s in 0.1.0&lt;/h2&gt;

























































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Subsystem&lt;/th&gt;&lt;th&gt;What it gives you&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::ode&lt;/code&gt;&lt;/td&gt;&lt;td&gt;DoPri5, Tsit5, Verner 6/7/8/9, Radau5, ESDIRK, BDF, &lt;code&gt;Auto&lt;/code&gt; (stiffness-aware), forward sensitivity, event detection, DAE&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::sde&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Euler-Maruyama, Milstein, stochastic Runge-Kutta, multiple noise correlations&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::dde&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Method-of-steps with continuous extension; handles state-dependent delays&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::fde&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Caputo and Riemann-Liouville fractional derivatives, predictor-corrector schemes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::ide&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Volterra and Fredholm integro-differential equations&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::pde&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Method-of-lines on structured 2D/3D grids, sparse operator assembly&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::spde&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Stochastic PDEs combining &lt;code&gt;pde&lt;/code&gt; discretization with &lt;code&gt;sde&lt;/code&gt; time integration&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::linalg&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Dense linear algebra via &lt;a href=&quot;https://github.com/sarah-ek/faer-rs&quot;&gt;faer&lt;/a&gt;; decompositions, eigensolvers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::nonlinear&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Newton, Broyden, trust-region methods&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::optim&lt;/code&gt;&lt;/td&gt;&lt;td&gt;First- and second-order unconstrained, constrained, and stochastic optimizers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::ocp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Parameter estimation and optimal-control problems against ODE/DAE dynamics&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::integrate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Adaptive quadrature (Gauss-Kronrod), tanh-sinh, Romberg&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::interp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Linear, cubic, Akima, B-spline, RBF&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::special&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Gamma, beta, error, Bessel, Mittag-Leffler families&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::fft&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Radix-2/4 and mixed-radix FFTs, real and complex&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::stats&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Distributions, descriptive statistics, hypothesis tests&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::fit&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Linear and nonlinear least-squares curve fitting with analytical or AD Jacobians&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::autodiff&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Forward-mode dual numbers, gradients and Jacobians as closures&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::dsp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;IIR/FIR filter design, peak detection, windowing&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;numra::core&lt;/code&gt;&lt;/td&gt;&lt;td&gt;The shared abstractions everything else builds on&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Twenty member crates plus the &lt;code&gt;numra&lt;/code&gt; facade. The full inventory and per-method coverage matrix is in the &lt;a href=&quot;https://github.com/moussaoutlook/numra-rs/blob/main/docs/audit/public-api-method-inventory.md&quot;&gt;public API inventory&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;the-design-constraints-i-refused-to-compromise&quot;&gt;The design constraints I refused to compromise&lt;/h2&gt;
&lt;p&gt;A few decisions defined what 0.1.0 had to be before I’d ship it:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Native Rust everywhere.&lt;/strong&gt; No FFI to LAPACK, SUNDIALS, FFTW, or similar. Every algorithm in this release is implemented in Rust source you can read in this repo. Dense linear algebra builds on &lt;a href=&quot;https://github.com/sarah-ek/faer-rs&quot;&gt;faer&lt;/a&gt;, itself a native-Rust project.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One shared &lt;code&gt;Scalar&lt;/code&gt; trait.&lt;/strong&gt; The same generic numeric trait is used by every solver, every quadrature rule, every optimizer. That’s what lets you flip between &lt;code&gt;f64&lt;/code&gt;, &lt;code&gt;f32&lt;/code&gt;, and (eventually) extended-precision or AD types without rewriting your problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solvers as first-class values.&lt;/strong&gt; &lt;code&gt;DoPri5&lt;/code&gt;, &lt;code&gt;Tsit5&lt;/code&gt;, &lt;code&gt;Radau5&lt;/code&gt;, and the rest are types you can name, store, and choose between at runtime via the &lt;code&gt;Auto&lt;/code&gt; selector or your own logic. No string-keyed dispatch, no factory functions, no enum-of-everything.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Composability tested, not promised.&lt;/strong&gt; Six end-to-end workflows are checked by CI as integration tests. If a future change breaks composability between subsystems, the tests fail.&lt;/p&gt;
&lt;h2 id=&quot;installation-and-citation&quot;&gt;Installation and citation&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;cargo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; numra&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Documentation: the &lt;a href=&quot;https://book.numra-rs.org/&quot;&gt;user book&lt;/a&gt; for narrative, &lt;a href=&quot;https://docs.rs/numra/0.1.0&quot;&gt;docs.rs&lt;/a&gt; for the API reference, the &lt;a href=&quot;https://examples.numra-rs.org/&quot;&gt;examples gallery&lt;/a&gt; for end-to-end programs.&lt;/p&gt;
&lt;p&gt;If Numra contributes to published work, please cite it. The repository has a &lt;a href=&quot;https://github.com/moussaoutlook/numra-rs/blob/main/CITATION.cff&quot;&gt;&lt;code&gt;CITATION.cff&lt;/code&gt;&lt;/a&gt;, and Zenodo has minted two DOIs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Concept DOI (always resolves to the latest version): &lt;a href=&quot;https://doi.org/10.5281/zenodo.20159709&quot;&gt;&lt;code&gt;10.5281/zenodo.20159709&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Version DOI for 0.1.0 (use this if reproducibility against a specific implementation matters): &lt;a href=&quot;https://doi.org/10.5281/zenodo.20159710&quot;&gt;&lt;code&gt;10.5281/zenodo.20159710&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;BibTeX, RIS, and a longer note on why citation matters live on the &lt;a href=&quot;/cite&quot;&gt;Cite page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;licensing&quot;&gt;Licensing&lt;/h2&gt;
&lt;p&gt;Numra ships under the &lt;strong&gt;Numra Academic &amp;#x26; Research License (Non-Commercial)&lt;/strong&gt;: free for academic and research use, source-available, and a separate commercial license is required for production or for-profit use. The full text is in &lt;a href=&quot;https://github.com/moussaoutlook/numra-rs/blob/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt;, and the &lt;a href=&quot;/commercial&quot;&gt;Commercial licensing page&lt;/a&gt; explains the why.&lt;/p&gt;
&lt;h2 id=&quot;whats-next&quot;&gt;What’s next&lt;/h2&gt;
&lt;p&gt;The 0.1.0 release establishes the surface area. The next few releases will deepen it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sparse linear algebra (matrix-free and assembled), unlocking larger PDE problems&lt;/li&gt;
&lt;li&gt;More PDE discretizations beyond method-of-lines (finite volume, spectral)&lt;/li&gt;
&lt;li&gt;Adjoint sensitivity to complement the forward sensitivity already in &lt;code&gt;numra::ode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;A constraint solver and DAE index-2/3 reduction in &lt;code&gt;numra::ode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GPU acceleration as an opt-in feature, once the CPU story is fully stable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;/roadmap&quot;&gt;roadmap page&lt;/a&gt; tracks the current direction, and the &lt;a href=&quot;https://github.com/moussaoutlook/numra-rs/issues&quot;&gt;issue tracker&lt;/a&gt; is the right place to push back on it.&lt;/p&gt;
&lt;p&gt;If you build something with Numra, &lt;a href=&quot;https://github.com/moussaoutlook/numra-rs/discussions&quot;&gt;tell me&lt;/a&gt;. 0.1.0 is the &lt;em&gt;start&lt;/em&gt; of the conversation about what composable numerical methods in Rust should look like.&lt;/p&gt;</content:encoded><category>release</category><category>numerical-methods</category><category>rust</category><author>Moussa Leblouba</author></item></channel></rss>