use crate::DType;
use numr::ops::{LinalgOps, ScalarOps, TensorOps, UtilityOps};
use numr::runtime::{Runtime, RuntimeClient};
#[cfg(feature = "sparse")]
use numr::algorithm::iterative::IterativeSolvers;
#[cfg(feature = "sparse")]
use numr::ops::IndexingOps;
#[cfg(feature = "sparse")]
use numr::sparse::SparseOps;
#[cfg(feature = "sparse")]
pub trait StiffSolverClient<R: Runtime<DType = DType>>:
TensorOps<R>
+ ScalarOps<R>
+ LinalgOps<R>
+ UtilityOps<R>
+ RuntimeClient<R>
+ IterativeSolvers<R>
+ SparseOps<R>
+ IndexingOps<R>
{
}
#[cfg(feature = "sparse")]
impl<R, T> StiffSolverClient<R> for T
where
R: Runtime<DType = DType>,
T: TensorOps<R>
+ ScalarOps<R>
+ LinalgOps<R>
+ UtilityOps<R>
+ RuntimeClient<R>
+ IterativeSolvers<R>
+ SparseOps<R>
+ IndexingOps<R>,
{
}
#[cfg(not(feature = "sparse"))]
pub trait StiffSolverClient<R: Runtime<DType = DType>>:
TensorOps<R> + ScalarOps<R> + LinalgOps<R> + UtilityOps<R> + RuntimeClient<R>
{
}
#[cfg(not(feature = "sparse"))]
impl<R, T> StiffSolverClient<R> for T
where
R: Runtime<DType = DType>,
T: TensorOps<R> + ScalarOps<R> + LinalgOps<R> + UtilityOps<R> + RuntimeClient<R>,
{
}