#![allow(missing_docs, missing_debug_implementations)] use nacfahi::models::{ FitModel, FitModelSum, basic::{Constant, Exponent, Gaussian, Linear}, }; use static_assertions::{assert_impl_all, assert_not_impl_all}; #[cfg(feature = "num-traits")] use num_traits::{Float, FloatConst}; #[derive(FitModelSum)] #[scalar_type(f64)] pub struct CustomModel { pub cst: Constant, pub exp: Exponent, } #[derive(FitModelSum)] pub struct CustomGenericModel { pub cst: Constant, pub exp: Exponent, } assert_impl_all!(CustomModel: FitModel); assert_not_impl_all!(CustomModel: FitModel); #[derive(FitModelSum)] #[scalar_type(f64)] pub struct CustomTupleModel(Constant, pub Exponent); assert_impl_all!(CustomTupleModel: FitModel); assert_not_impl_all!(CustomTupleModel: FitModel); #[derive(FitModelSum)] pub struct CustomConditionedModel where Scalar: Copy + Sync, { pub cst: Constant, pub exp: Exponent, } assert_impl_all!(CustomConditionedModel: FitModel); assert_impl_all!(CustomConditionedModel: FitModel); assert_not_impl_all!(CustomConditionedModel: FitModel); #[derive(FitModelSum)] pub struct WithBackground { signal: Signal, bg_linear: Linear, bg_exponent: Exponent, } assert_impl_all!(WithBackground>: FitModel); assert_impl_all!(WithBackground>: FitModel); assert_not_impl_all!(WithBackground>: FitModel); #[cfg(feature = "num-traits")] #[derive(FitModelSum)] #[scalar_generic(T)] pub struct Multipeak { bg: BG, signal: [Gaussian; N], } #[cfg(feature = "num-traits")] assert_impl_all!(Multipeak>: FitModel); #[cfg(feature = "num-traits")] assert_not_impl_all!(Multipeak>: FitModel); #[cfg(feature = "num-traits")] assert_impl_all!(Multipeak>: FitModel); #[cfg(feature = "num-traits")] assert_not_impl_all!(Multipeak>: FitModel); #[cfg(feature = "num-traits")] #[derive(FitModelSum)] pub struct BiMulti< Scalar: Float + FloatConst + core::iter::Sum, const EXPS: usize, const PEAKS: usize, > { pub bg: [Exponent; EXPS], peaks: [Gaussian; PEAKS], } #[cfg(feature = "num-traits")] assert_impl_all!(BiMulti: FitModel); #[cfg(feature = "num-traits")] assert_impl_all!(BiMulti: FitModel); #[cfg(feature = "num-traits")] assert_impl_all!(BiMulti: FitModel); #[derive(FitModelSum)] #[scalar_type(f64)] pub struct UnitModel; assert_impl_all!(UnitModel: FitModel);