use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
pub trait MatrixEquationAlgorithms<R: Runtime<DType = DType>> {
fn solve_sylvester(&self, a: &Tensor<R>, b: &Tensor<R>, c: &Tensor<R>) -> Result<Tensor<R>>;
fn solve_continuous_lyapunov(&self, a: &Tensor<R>, q: &Tensor<R>) -> Result<Tensor<R>>;
fn solve_discrete_lyapunov(&self, a: &Tensor<R>, q: &Tensor<R>) -> Result<Tensor<R>>;
fn solve_care(
&self,
a: &Tensor<R>,
b: &Tensor<R>,
q: &Tensor<R>,
r: &Tensor<R>,
) -> Result<Tensor<R>>;
fn solve_dare(
&self,
a: &Tensor<R>,
b: &Tensor<R>,
q: &Tensor<R>,
r: &Tensor<R>,
) -> Result<Tensor<R>>;
fn solve_care_iterative(
&self,
a: &Tensor<R>,
b: &Tensor<R>,
q: &Tensor<R>,
r: &Tensor<R>,
) -> Result<Tensor<R>>;
fn solve_dare_iterative(
&self,
a: &Tensor<R>,
b: &Tensor<R>,
q: &Tensor<R>,
r: &Tensor<R>,
) -> Result<Tensor<R>>;
fn solve_discrete_lyapunov_iterative(&self, a: &Tensor<R>, q: &Tensor<R>) -> Result<Tensor<R>>;
}