1#![allow(dead_code)]
2
3mod 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 {}
88impl 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}