Skip to content

Latest commit

 

History

History
64 lines (50 loc) · 4.04 KB

File metadata and controls

64 lines (50 loc) · 4.04 KB

Proposed Components Roadmap

Prioritized backlog of reusable numerical components for generic embedded applications, ordered easiest → hardest to implement within the constraints of this library (templated on float / math::Q15 / math::Q31, no heap, bounded containers, #pragma GCC optimize + OPTIMIZE_FOR_SPEED hot paths, typed tests, doc/ page).

Difficulty legend:

Stars Meaning Typical effort
★☆☆☆☆ Trivial primitive — a few methods, minimal math Hours
★★☆☆☆ Easy — well-defined recurrence, small state Half day
★★★☆☆ Moderate — real algorithm, still finite/bounded 1–2 days
★★★★☆ Advanced — non-trivial linear algebra / numerics Several days
★★★★★ Hard / research-grade — iterative eigen-numerics or adaptive theory 1+ week

Numeric-type note. DSP filters and fixed-gain trackers should template all three types (float, Q15, Q31). Items marked (float-first) involve dynamic range or iterative conditioning that make fixed-point impractical initially — implement and validate in float, mirroring the dynamics-module convention.


Master list (by priority)

# Component Target module Difficulty

Items 48–52 are the evaluation & metrics primitives — reusable quantities the per-family unit-test reference TESTING.md depends on but which the library does not yet expose. Detailed below under Evaluation & metrics primitives.

Evaluation & metrics primitives

Reusable quantities that quantify how well an algorithm behaves — the properties the per-family unit-test reference TESTING.md asks tests to assert. Today math/Statistics.hpp already provides Mean, Variance, MeanSquaredError, RootMeanSquaredError, MeanAbsoluteError, RSquaredScore, AutoCorrelation, and control_analysis/FrequencyResponse provides magnitude/phase. The items below are the missing pieces. All are float-only, no-heap, and operate on bounded math::Vector/math::Matrix inputs; tests are TEST_F on float.

Test-only helpers (not production components). A ULP/relative-error comparator and a finite-difference gradient check (for optimization/) are pure test utilities — add them to the numerical.math_test_helper INTERFACE library (numerical/math/test_doubles/), not to numerical/ production code.

Per-component implementation checklist

Every new component should follow the established repository conventions:

  • Header-only template supporting float / math::Q15 / math::Q31 (or float-first where noted)
  • #pragma GCC optimize("O3", "fast-math") after #pragma once; OPTIMIZE_FOR_SPEED on hot paths
  • No heap, no recursion, bounded containers (infra::BoundedVector, std::array)
  • static_assert on supported types and dimensions
  • Typed tests (TYPED_TEST) for multi-type components; TEST_F for single-type; StrictMock only
  • Design-first doc/<domain>/<Name>.md following doc/TEMPLATE.md; add its row to doc/<domain>/README.md and README.md's Documentation table (the booklet regenerates from these tables in CI — no manual booklet edit)
  • Explicit template instantiation .cpp guarded by NUMERICAL_TOOLBOX_COVERAGE_BUILD + numerical_add_coverage_sources
  • CMakeLists.txt via numerical_add_header_library() / ${NUMERICAL_VISIBILITY}
  • Simulator + .vscode/launch.json entry where a visual demo adds value