use nalgebra::{Dim, RealField};
use thiserror::Error;
use super::domain::Domain;
pub trait Problem {
type Scalar: RealField + Copy;
type Dim: Dim;
fn dim(&self) -> Self::Dim;
fn domain(&self) -> Domain<Self::Scalar> {
Domain::with_dim(self.dim().value())
}
}
#[derive(Debug, Error)]
pub enum ProblemError {
#[error("invalid dimensionality")]
InvalidDimensionality,
#[error("invalid value encountered")]
InvalidValue,
#[error("{0}")]
Custom(Box<dyn std::error::Error>),
}