Mojo struct
TensorType
A symbolic tensor type.
It is not an eager tensor type!! It contains no actual data, but instead represents a value at some point in time during model execution.
Most internal values in a model will be tensors. This type represents their element type (dtype) and dimensions (dims) at a specific point during model computation. It allows us to do some optimistic optimizations and shape inference during graph construction, and to provide more detailed shape information to the compiler for further optimizatino passes.
It can also represent a fully dynamic rank tensor. The presence of dynamic rank tensors in a graph will often degrade performance dramatically and prevents many classes of optimizations.
Fieldsβ
- βdtype (
DType
): The element type of the tensor value. - βdims (
List[Dim, 0]
): The dimensions of the tensor value, if it is known-rank.
Implemented traitsβ
AnyType
,
CollectionElement
,
Copyable
,
Movable
Methodsβ
__init__
β
__init__(inout self: Self, dtype: DType)
Constructs a 0-d tensor type.
Args:
- βdtype (
DType
): The element type of the tensor data.
__init__(inout self: Self, dtype: DType, *dims: Dim)
Constructs a tensor type.
Args:
- βdtype (
DType
): The element type of the tensor data. - β*dims (
Dim
): The shape dimensions of the tensor. The number of dims is the rank of the tensor.
__init__(inout self: Self, dtype: DType, dims: List[Dim, 0])
Constructs a ranked tensor type.
Args:
- βdtype (
DType
): The element type of the tensor data. - βdims (
List[Dim, 0]
): The shape dimensions of the tensor. The number of dims is the rank of the tensor.
__init__(inout self: Self, spec: TensorSpec)
Constructs a tensor type from a TensorSpec.
Since TensorSpec can only contain static shapes, this will always construct a static tensor.
Args:
- βspec (
TensorSpec
): The dtype and static shape of the tensor.
__eq__
β
__eq__(self: Self, other: Self) -> Bool
Checks whether the two tensors are identical (same rank, type, shape).
Args:
- βother (
Self
): The other tensor to check equality against.
Returns:
True if the tensors have identical element type and shape, False otherwise.
to_mlir
β
to_mlir(self: Self, ctx: Context) -> Type
Converts to an _mlir.Type instance.
Args:
- βctx (
Context
): The mlir.Context in which to create the type.
Returns:
An _mlir.Type in the specified Context.
from_mlir
β
static from_mlir(t: Type) -> Self
Constructs a tensor type from an _mlir type.
Args:
- βt (
Type
): The _mlir Type object to parse into a tensor type.
Returns:
The tensor type represented by the _mlir Type value.
is_static
β
is_static(self: Self) -> Bool
Checks whether the tensor type has a fully static shape or not.
A tensor must have all of its dimensions be static
(or be 0-dimensional)
in order to be static
.
Returns:
True if the tensor has a fully static shape, False otherwise.
rank
β
rank(self: Self) -> Int
Gets the rank of the tensor type.
Returns:
The tensor's static rank, or 0 for a dynamic tensor. A 0-dimensional static tensor also has a rank of 0, so check ranked
directly to check if a tensor is ranked or not.
dim
β
dim(self: Self, pos: Int) -> Dim
Gets the pos'th dimension of the tensor type.
Supports negative-indexing, ie. t.dim(-1)
will give the last
dimension.
Args:
- βpos (
Int
): The dimension index to retrieve.
Returns:
The dimension value at dimension pos
.
Raises:
If the dimension is out-of-bounds, or if the tensor is unranked.
num_elements
β
num_elements(self: Self) -> SIMD[int64, 1]
Counts the total number of elements in the tensor type.
For a static tensor, returns the product of all static dimensions. This is the number of elements the tensor will hold during execution, TensorType doesn't actually hold any element values at all.
For any non-static tensor, ie. a tensor having any symbolic or dynamic dimensions, the return value will be meaningless.
Returns:
The number of elements the tensor contains.
cast
β
cast(self: Self, dtype: DType) -> Self
Constructs a new tensor type of the same shape with the new dtype.
Args:
- βdtype (
DType
): The new element type for the tensor.
Returns:
A new tensor type with the same shape, and the new element type.
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!
π What went wrong?