calibrator/
lib.rs

1#![allow(dead_code)]
2
3//! Calibrator is a library for working with measurement systems.
4//!
5//!
6
7mod core;
8mod interface;
9mod metrics;
10mod models;
11mod stats;
12
13use std::fmt;
14
15pub use core::{CalibrationDataGenError, ScalarLimit};
16pub use interface::{
17    BuildError, Calibrate, Calibrated, CalibratedStochastic, CalibratedSystem, CalibrationBuilder,
18    ChannelData, Detectable, MockBuilderError, MockSourceBuilder, Observation, ObservationBuilder,
19    Operating, ResponseTag, StimulusTag, StochasticCalibratedSystemError,
20    StochasticCalibrationDataConfig, TargetRange, UncalibratedStochastic,
21};
22pub use linfa::Float as LinfaFloat;
23pub use metrics::Metrics;
24pub use models::{
25    stochastic::{ScalarStochasticMeasurementModel, StochasticMeasurementModel},
26    NetStateLimits, ProbabilisticLimitConfig, StochasticLimitConfig,
27};
28pub use ndarray::{Array1, Array2};
29pub use polycal::{Fit, PolyCalError};
30pub use rand_distr::{Distribution, StandardNormal};
31
32pub trait CalibrationFloat:
33    Copy
34    + ndarray::ScalarOperand
35    + tracing::Value
36    + ndarray_linalg::Lapack
37    + ndarray_linalg::Scalar<Real = Self>
38    + num_traits::float::FloatCore
39    + Default
40    + Send
41    + Sync
42    + num_traits::Float
43    + num_traits::FromPrimitive
44    + fmt::Debug
45    + fmt::Display
46    + num_traits::ToPrimitive
47    + argmin::core::ArgminFloat
48    + std::iter::Sum
49    + polycal::ArgminFloat
50    + polycal::ArgminDot<Self, Self>
51    + polycal::ArgminL2Norm<Self>
52    + polycal::ArgminMul<Self, Self>
53    + polycal::ArgminAdd<Self, Self>
54    + polycal::ArgminSub<Self, Self>
55    + polycal::ArgminConj
56    + polycal::ArgminZeroLike
57    + trellis_runner::TrellisFloat
58    + cert::Uncertainty<Float = Self>
59    + From<cert::AbsUncertainty<Self>>
60    + ArgminMul<Array1<Self>, Array1<Self>>
61{
62}
63
64use argmin_math::{
65    ArgminAdd, ArgminDot, ArgminInv, ArgminL2Norm, ArgminMul, ArgminSub, ArgminTranspose,
66};
67
68pub trait CalibrationVector:
69    ArgminSub<Array1<Self::Float>, Array1<Self::Float>>
70    + ArgminL2Norm<Self::Float>
71    + ArgminMul<Self::Float, Array1<Self::Float>>
72    + ArgminAdd<Array1<Self::Float>, Array1<Self::Float>>
73    + ArgminDot<Array1<Self::Float>, Self::Float>
74{
75    type Float: CalibrationFloat;
76}
77pub trait CalibrationMatrix:
78    ArgminDot<Array1<Self::Float>, Array1<Self::Float>>
79    + ArgminDot<Array2<Self::Float>, Array2<Self::Float>>
80    + ArgminInv<Array2<Self::Float>>
81    + ArgminTranspose<Array2<Self::Float>>
82{
83    type Float: CalibrationFloat;
84}
85
86impl CalibrationFloat for f64 {}
87impl CalibrationFloat for f32 {}
88//
89impl CalibrationVector for Array1<f32> {
90    type Float = f32;
91}
92impl CalibrationVector for Array1<f64> {
93    type Float = f64;
94}
95
96impl CalibrationMatrix for Array2<f32> {
97    type Float = f32;
98}
99impl CalibrationMatrix for Array2<f64> {
100    type Float = f64;
101}