use crate::DType;
use numr::autograd::Var;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use super::types::{SensitivityOptions, SensitivityResult};
use crate::integrate::ODEOptions;
use crate::integrate::error::IntegrateResult;
pub trait AdjointSensitivityAlgorithms<R: Runtime<DType = DType>> {
#[allow(clippy::too_many_arguments)]
fn adjoint_sensitivity<F, G>(
&self,
f: F,
g: G,
t_span: [f64; 2],
y0: &Tensor<R>,
p: &Tensor<R>,
ode_opts: &ODEOptions,
sens_opts: &SensitivityOptions,
) -> IntegrateResult<SensitivityResult<R>>
where
F: Fn(&Var<R>, &Var<R>, &Var<R>, &Self) -> Result<Var<R>>,
G: Fn(&Var<R>, &Self) -> Result<Var<R>>;
}