pub struct StructuredTensor<T: Scalar>(pub StructuredTensor<T>);Expand description
AD-capable structured tensor wrapper shared by dynamic tenferro frontends.
This newtype keeps Differentiable and placement helpers on top of
tenferro_tensor::StructuredTensor<T>.
§Examples
use tenferro_internal_frontend_core::StructuredTensor;
use tenferro_tensor::{MemoryOrder, Tensor};
let payload = Tensor::<f64>::from_slice(&[1.0, 2.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let wrapped = StructuredTensor::from(payload);
assert!(wrapped.is_dense());Tuple Fields§
§0: StructuredTensor<T>Implementations§
Source§impl<T: Scalar> StructuredTensor<T>
impl<T: Scalar> StructuredTensor<T>
pub fn with_payload_like(&self, payload: Tensor<T>) -> Result<Self>
pub fn into_payload(self) -> Tensor<T>
pub fn permute_logical(&self, perm: &[usize]) -> Result<Self>
pub fn conj(&self) -> Selfwhere
T: Conjugate,
pub fn to_dense(&self) -> Result<Tensor<T>>
pub fn memory_space(&self) -> LogicalMemorySpace
pub fn preferred_compute_device(&self) -> Option<ComputeDevice>
pub fn set_preferred_compute_device(&mut self, device: Option<ComputeDevice>)
pub fn to_memory_space_async(&self, target: LogicalMemorySpace) -> Result<Self>
pub fn wait(&self)
pub fn is_ready(&self) -> bool
Methods from Deref<Target = StructuredTensor<T>>§
Sourcepub fn to_dense(&self) -> Result<Tensor<T>, Error>
pub fn to_dense(&self) -> Result<Tensor<T>, Error>
Materialize this structured tensor into a dense tensor.
§Examples
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let payload =
Tensor::<f64>::from_slice(&[1.0, 2.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let x = StructuredTensor::from_diagonal_vector(payload, 2).unwrap();
let dense = x.to_dense().unwrap();
assert_eq!(dense.dims(), &[2, 2]);
assert_eq!(dense.get(&[0, 0]), Some(&1.0));
assert_eq!(dense.get(&[0, 1]), Some(&0.0));Sourcepub fn permute_logical(
&self,
perm: &[usize],
) -> Result<StructuredTensor<T>, Error>
pub fn permute_logical( &self, perm: &[usize], ) -> Result<StructuredTensor<T>, Error>
Returns the same logical tensor with permuted logical axes.
This permutes both the logical axes and the compressed payload class order, then rebuilds the canonical axis-class representation.
§Examples
ⓘ
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let dense = Tensor::<f64>::from_slice(
&[1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
&[2, 3],
MemoryOrder::ColumnMajor,
)
.unwrap();
let x = StructuredTensor::from_dense(dense);
let y = x.permute_logical(&[1, 0]).unwrap();
assert_eq!(y.logical_dims(), &[3, 2]);Sourcepub fn conj(&self) -> StructuredTensor<T>where
T: Conjugate,
pub fn conj(&self) -> StructuredTensor<T>where
T: Conjugate,
Returns the same structured tensor with payload conjugation toggled.
§Examples
ⓘ
use num_complex::Complex64;
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let payload = Tensor::<Complex64>::from_slice(
&[Complex64::new(1.0, 2.0), Complex64::new(3.0, 4.0)],
&[2],
MemoryOrder::ColumnMajor,
)
.unwrap();
let x = StructuredTensor::from_diagonal_vector(payload, 2).unwrap();
let y = x.conj();
assert_eq!(y.logical_dims(), x.logical_dims());Sourcepub fn logical_dims(&self) -> &[usize]
pub fn logical_dims(&self) -> &[usize]
Returns logical dimensions.
§Examples
ⓘ
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let payload =
Tensor::<f64>::from_slice(&[1.0, 2.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let x = StructuredTensor::from_diagonal_vector(payload, 2).unwrap();
assert_eq!(x.logical_dims(), &[2, 2]);Sourcepub fn axis_classes(&self) -> &[usize]
pub fn axis_classes(&self) -> &[usize]
Returns axis classes for logical axes.
§Examples
ⓘ
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let payload =
Tensor::<f64>::from_slice(&[1.0, 2.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let x = StructuredTensor::from_diagonal_vector(payload, 2).unwrap();
assert_eq!(x.axis_classes(), &[0, 0]);Sourcepub fn class_count(&self) -> usize
pub fn class_count(&self) -> usize
Returns the number of distinct axis classes.
§Examples
ⓘ
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let payload =
Tensor::<f64>::from_slice(&[1.0, 2.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let x = StructuredTensor::from_diagonal_vector(payload, 3).unwrap();
assert_eq!(x.class_count(), 1);Sourcepub fn is_diag(&self) -> bool
pub fn is_diag(&self) -> bool
Returns true when the layout is a pure diagonal.
§Examples
ⓘ
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let payload =
Tensor::<f64>::from_slice(&[1.0, 2.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let x = StructuredTensor::from_diagonal_vector(payload, 2).unwrap();
assert!(x.is_diag());Sourcepub fn with_payload_like(
&self,
payload: Tensor<T>,
) -> Result<StructuredTensor<T>, Error>
pub fn with_payload_like( &self, payload: Tensor<T>, ) -> Result<StructuredTensor<T>, Error>
Rebuild the same structured layout with a different payload tensor.
§Examples
ⓘ
use tenferro_tensor::{MemoryOrder, StructuredTensor, Tensor};
let payload =
Tensor::<f64>::from_slice(&[1.0, 2.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let layout = StructuredTensor::from_diagonal_vector(payload, 2).unwrap();
let replacement =
Tensor::<f64>::from_slice(&[3.0, 4.0], &[2], MemoryOrder::ColumnMajor).unwrap();
let updated = layout.with_payload_like(replacement).unwrap();
assert!(updated.is_diag());Trait Implementations§
Source§impl<T: Clone + Scalar> Clone for StructuredTensor<T>
impl<T: Clone + Scalar> Clone for StructuredTensor<T>
Source§fn clone(&self) -> StructuredTensor<T>
fn clone(&self) -> StructuredTensor<T>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<T: Scalar> Deref for StructuredTensor<T>
impl<T: Scalar> Deref for StructuredTensor<T>
Source§impl<T: Scalar> DerefMut for StructuredTensor<T>
impl<T: Scalar> DerefMut for StructuredTensor<T>
Source§impl<T> Differentiable for StructuredTensor<T>where
T: Scalar,
impl<T> Differentiable for StructuredTensor<T>where
T: Scalar,
Source§type Tangent = StructuredTensor<T>
type Tangent = StructuredTensor<T>
The tangent type for this value. Read more
Source§fn zero_tangent(&self) -> Self::Tangent
fn zero_tangent(&self) -> Self::Tangent
Returns the zero tangent for this value (additive identity).
Source§fn accumulate_tangent(a: Self::Tangent, b: &Self::Tangent) -> Self::Tangent
fn accumulate_tangent(a: Self::Tangent, b: &Self::Tangent) -> Self::Tangent
Accumulates (adds) two tangents:
a + b.Source§fn num_elements(&self) -> usize
fn num_elements(&self) -> usize
Returns the number of scalar elements in this value. Read more
Source§fn seed_cotangent(&self) -> Self::Tangent
fn seed_cotangent(&self) -> Self::Tangent
Returns the seed cotangent for reverse-mode pullback. Read more
Source§impl From<StructuredTensor<Complex<f32>>> for DynTensor
impl From<StructuredTensor<Complex<f32>>> for DynTensor
Source§fn from(value: StructuredTensor<Complex32>) -> Self
fn from(value: StructuredTensor<Complex32>) -> Self
Converts to this type from the input type.
Source§impl From<StructuredTensor<Complex<f64>>> for DynTensor
impl From<StructuredTensor<Complex<f64>>> for DynTensor
Source§fn from(value: StructuredTensor<Complex64>) -> Self
fn from(value: StructuredTensor<Complex64>) -> Self
Converts to this type from the input type.
Source§impl<T: Scalar> From<StructuredTensor<T>> for StructuredTensor<T>
impl<T: Scalar> From<StructuredTensor<T>> for StructuredTensor<T>
Source§fn from(inner: StructuredTensor<T>) -> Self
fn from(inner: StructuredTensor<T>) -> Self
Converts to this type from the input type.
Source§impl From<StructuredTensor<f32>> for DynTensor
impl From<StructuredTensor<f32>> for DynTensor
Source§fn from(value: StructuredTensor<f32>) -> Self
fn from(value: StructuredTensor<f32>) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl<T> Freeze for StructuredTensor<T>
impl<T> !RefUnwindSafe for StructuredTensor<T>
impl<T> Send for StructuredTensor<T>
impl<T> Sync for StructuredTensor<T>
impl<T> Unpin for StructuredTensor<T>
impl<T> !UnwindSafe for StructuredTensor<T>
Blanket Implementations§
§impl<'short, T, Target> AsGeneralizedRef<'short, &'short Target> for T
impl<'short, T, Target> AsGeneralizedRef<'short, &'short Target> for T
fn as_generalized_ref(&'short self) -> &'short Target
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more