pub struct TensorMeta {
pub dtype: DType,
pub extents: Vec<ShapeExtent<SymDim>>,
pub scalar_identity: Option<&'static str>,
}Expand description
Per-value tensor metadata used by AD rules.
Shape information is stored as per-axis ShapeExtent values. Callers must
explicitly choose whether they need an exact shape or only a known bound.
§Examples
use tenferro_ops::{SymDim, TensorMeta};
use tenferro_tensor::DType;
let meta = TensorMeta::exact(DType::F64, vec![SymDim::from(2usize), SymDim::from(3usize)]);
assert_eq!(meta.rank(), 2);Fields§
§dtype: DTypeElement dtype of the tensor value.
extents: Vec<ShapeExtent<SymDim>>Per-axis shape guarantees.
scalar_identity: Option<&'static str>Canonical identity of an externally defined scalar, when the value carries one.
A semantic program’s identity must be reproducible across processes, while an
externally defined scalar’s tag is a process-local TypeId, so a traced value
whose dtype is external declares the stable name here.
Implementations§
Source§impl TensorMeta
impl TensorMeta
Sourcepub fn exact(dtype: DType, shape: Vec<SymDim>) -> Self
pub fn exact(dtype: DType, shape: Vec<SymDim>) -> Self
Construct metadata whose every axis is exact.
§Examples
use tenferro_ops::{SymDim, TensorMeta};
use tenferro_tensor::DType;
let meta = TensorMeta::exact(DType::F64, vec![SymDim::from(4usize)]);
assert_eq!(meta.exact_shape(), Some(vec![SymDim::from(4usize)]));Sourcepub fn with_extents(dtype: DType, extents: Vec<ShapeExtent<SymDim>>) -> Self
pub fn with_extents(dtype: DType, extents: Vec<ShapeExtent<SymDim>>) -> Self
Construct metadata from per-axis extents.
§Examples
use tenferro_ops::{ShapeExtent, SymDim, TensorMeta};
use tenferro_tensor::DType;
let meta = TensorMeta::with_extents(
DType::F64,
vec![ShapeExtent::upper_bound(SymDim::from(8usize))],
);
assert_eq!(meta.exact_shape(), None);Sourcepub fn with_scalar_identity(self, identity: &'static str) -> Self
pub fn with_scalar_identity(self, identity: &'static str) -> Self
Declare the canonical identity of an externally defined scalar.
§Examples
use tenferro_ops::{SymDim, TensorMeta};
use tenferro_tensor::DType;
let dtype = DType::External(std::any::TypeId::of::<f64>());
let meta = TensorMeta::exact(dtype, vec![SymDim::from(2usize)])
.with_scalar_identity("example.scalar.v1");
assert_eq!(meta.scalar_identity(), Some("example.scalar.v1"));Sourcepub const fn scalar_identity(&self) -> Option<&'static str>
pub const fn scalar_identity(&self) -> Option<&'static str>
Return the declared identity of an externally defined scalar, if any.
§Examples
use tenferro_ops::{SymDim, TensorMeta};
use tenferro_tensor::DType;
let dtype = DType::External(std::any::TypeId::of::<f64>());
assert_eq!(TensorMeta::exact(dtype, vec![SymDim::from(1usize)]).scalar_identity(), None);
assert_eq!(
TensorMeta::exact(dtype, vec![SymDim::from(1usize)])
.with_scalar_identity("example.scalar.v1")
.scalar_identity(),
Some("example.scalar.v1")
);Sourcepub fn extents(&self) -> &[ShapeExtent<SymDim>]
pub fn extents(&self) -> &[ShapeExtent<SymDim>]
Return the per-axis shape guarantees.
§Examples
use tenferro_ops::{SymDim, TensorMeta};
use tenferro_tensor::DType;
let meta = TensorMeta::exact(DType::F64, vec![SymDim::from(4usize)]);
assert_eq!(meta.extents().len(), 1);Sourcepub fn exact_shape(&self) -> Option<Vec<SymDim>>
pub fn exact_shape(&self) -> Option<Vec<SymDim>>
Return the shape only when every axis is exact.
§Examples
use tenferro_ops::{ShapeExtent, SymDim, TensorMeta};
use tenferro_tensor::DType;
let meta = TensorMeta::with_extents(
DType::F64,
vec![ShapeExtent::upper_bound(SymDim::from(8usize))],
);
assert_eq!(meta.exact_shape(), None);Sourcepub fn bound_shape(&self) -> Option<Vec<SymDim>>
pub fn bound_shape(&self) -> Option<Vec<SymDim>>
Return one known bound per axis when every axis has a bound.
This is intentionally separate from TensorMeta::exact_shape: a bound
is not proof of the runtime size.
Trait Implementations§
Source§impl Clone for TensorMeta
impl Clone for TensorMeta
Source§fn clone(&self) -> TensorMeta
fn clone(&self) -> TensorMeta
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more