use std::collections::HashMap;
use dyn_clone::DynClone;
use laddu_core::{amplitude::ParameterMap, LadduResult};
use nalgebra::DVector;
use super::LikelihoodExpression;
pub trait LikelihoodTerm: DynClone + Send + Sync {
fn evaluate(&self, parameters: &[f64]) -> LadduResult<f64>;
fn evaluate_gradient(&self, parameters: &[f64]) -> LadduResult<DVector<f64>>;
fn fix_parameter(&self, _name: &str, _value: f64) -> LadduResult<()> {
Ok(())
}
fn free_parameter(&self, _name: &str) -> LadduResult<()> {
Ok(())
}
fn rename_parameter(&self, _old: &str, _new: &str) -> LadduResult<()> {
Ok(())
}
fn rename_parameters(&self, _mapping: &HashMap<String, String>) -> LadduResult<()> {
Ok(())
}
fn parameter_map(&self) -> ParameterMap {
ParameterMap::default()
}
fn update(&self) {}
fn into_expression(self) -> LadduResult<LikelihoodExpression>
where
Self: Sized + 'static,
{
LikelihoodExpression::from_term(Box::new(self))
}
}
dyn_clone::clone_trait_object!(LikelihoodTerm);