use crate::DenseTensorData;
impl<T> DenseTensorData<T>
where
T: ariadnetor_core::Scalar,
{
pub fn conj(&self) -> Self {
self.map(|x| x.conj())
}
pub fn to_complex(&self) -> DenseTensorData<T::Complex> {
self.map(|x| x.into_complex())
}
pub fn real(&self) -> DenseTensorData<T::Real> {
self.map(|x| x.re())
}
pub fn imag(&self) -> DenseTensorData<T::Real> {
self.map(|x| x.im())
}
pub fn norm_frobenius(&self) -> T::Real {
self.storage().norm_frobenius()
}
pub fn norm(&self) -> T::Real {
self.storage().norm()
}
pub fn normalize(&mut self) -> T::Real {
self.storage_mut().normalize()
}
pub fn normalized(&self) -> (Self, T::Real) {
let mut result = self.clone();
let norm = result.normalize();
(result, norm)
}
}