use crate::DType;
use numr::error::Result;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use super::rotation::Rotation;
#[derive(Debug, Clone)]
pub struct ProcrustesResult<R: Runtime<DType = DType>> {
pub rotation: Rotation<R>,
pub translation: Tensor<R>,
pub scale: f64,
pub transformed: Tensor<R>,
pub disparity: f64,
}
pub trait ProcrustesAlgorithms<R: Runtime<DType = DType>> {
fn procrustes(
&self,
source: &Tensor<R>,
target: &Tensor<R>,
scaling: bool,
reflection: bool,
) -> Result<ProcrustesResult<R>>;
fn orthogonal_procrustes(&self, a: &Tensor<R>, b: &Tensor<R>) -> Result<(Tensor<R>, f64)>;
}
#[cfg(test)]
mod tests {
}