use thiserror::Error as ThisError;
#[derive(Debug, Clone, PartialEq, Eq, ThisError)]
pub enum ModelBuildError {
#[error(
"Parameter list {:?} contains duplicates! Parameter lists must comprise only unique elements.",
function_parameters
)]
DuplicateParameterNames {
function_parameters: Vec<String>,
},
#[error("A function or model parameter list is empty! It must at least contain one parameter.")]
EmptyParameters,
#[error(
"Function parameter '{}' is not part of the model parameters.",
function_parameter
)]
FunctionParameterNotInModel {
function_parameter: String,
},
#[error(
"Parameter '{}' given for partial derivative does not exist in parameter list '{:?}'.",
parameter,
function_parameters
)]
InvalidDerivative {
parameter: String,
function_parameters: Vec<String>,
},
#[error(
"Derivative for parameter '{}' was already provided! Give each partial derivative exactly once.",
parameter
)]
DuplicateDerivative {
parameter: String,
},
#[error(
"Function with paramter list {:?} is missing derivative for parametr '{}'.",
function_parameters,
missing_parameter
)]
MissingDerivative {
missing_parameter: String,
function_parameters: Vec<String>,
},
#[error(
"Tried to construct model with no functions. A model must contain at least one function."
)]
EmptyModel,
#[error(
"Model depends on parameter '{}', but none of its functions use it. Each model parameter must occur in at least one function.",
parameter
)]
UnusedParameter {
parameter: String,
},
#[error(
"Incorrect number of parameters for function: expected {}, got {}",
expected,
actual
)]
IncorrectParameterCount {
actual: usize,
expected: usize,
},
#[error(
"Parameter names may not contain comma separator: '{}'. Did you want to give two parameters?",
param_name
)]
CommaInParameterNameNotAllowed {
param_name: String,
},
#[error("Missing vector for independent variable x")]
MissingX,
#[error("Missing initial guesses for model parameters")]
MissingInitialParameters,
#[error(
"Illegal call to 'partial_deriv': a call to this function can only follow a call to 'function' or another call to 'partial_deriv'"
)]
IllegalCallToPartialDeriv,
}