list
Module
Provides utilities for working with static and variadic lists.
You can import these APIs from the utils
package. For example:
from utils.list import Dim
Dim
A static or dynamic dimension modeled with an optional integer.
This class is meant to represent an optional static dimension. When a value is present, the dimension has that static value. When a value is not present, the dimension is dynamic.
Aliases:
type = Variant[i1, Int]
Fields:
- value (
Variant[i1, Int]
): Either a boolean indicating that the dimension is dynamic, or the static value of the dimension.
Functions:
__init__
__init__(value: Int) -> Self
Creates a statically-known dimension.
Args:
- value (
Int
): The static dimension value.
Returns:
A dimension with a static value.
__init__(value: index) -> Self
Creates a statically-known dimension.
Args:
- value (
index
): The static dimension value.
Returns:
A dimension with a static value.
__init__() -> Self
Creates a dynamic dimension.
Returns:
A dimension value with no static value.
__init__(value: Variant[i1, Int]) -> Self
__bool__
__bool__(self: Self) -> Bool
Returns True if the dimension has a static value.
Returns:
Whether the dimension has a static value.
__eq__
__eq__(self: Self, rhs: Self) -> Bool
Compares two dimensions for equality.
Args:
- rhs (
Self
): The other dimension.
Returns:
True if the dimensions are the same.
__mul__
__mul__(self: Self, rhs: Self) -> Self
Multiplies two dimensions.
If either are unknown, the result is unknown as well.
Args:
- rhs (
Self
): The other dimension.
Returns:
The product of the two dimensions.
has_value
has_value(self: Self) -> Bool
Returns True if the dimension has a static value.
Returns:
Whether the dimension has a static value.
is_dynamic
is_dynamic(self: Self) -> Bool
Returns True if the dimension has a dynamic value.
Returns:
Whether the dimension is dynamic.
get
get(self: Self) -> Int
Gets the static dimension value.
Returns:
The static dimension value.
is_multiple
is_multiple[alignment: Int](self: Self) -> Bool
Checks if the dimension is aligned.
Parameters:
- alignment (
Int
): The alignment requirement.
Returns:
Whether the dimension is aligned.
DimList
This type represents a list of dimensions. Each dimension may have a static value or not have a value, which represents a dynamic dimension.
Fields:
- value (
VariadicList[Dim]
): The underlying storage for the list of dimensions.
Functions:
__init__
__init__(values: VariadicList[Dim]) -> Self
Creates a dimension list from the given list of values.
Args:
- values (
VariadicList[Dim]
): The initial dim values list.
Returns:
A dimension list.
__init__(*values: Dim) -> Self
Creates a dimension list from the given Dim values.
Args:
- values (
*Dim
): The initial dim values.
Returns:
A dimension list.
__len__
__len__(self: Self) -> Int
Gets the size of the DimList.
Returns:
The number of elements in the DimList.
at
at[i: Int](self: Self) -> Dim
Gets the dimension at a specified index.
Parameters:
- i (
Int
): The dimension index.
Returns:
The dimension at the specified index.
product
product[length: Int](self: Self) -> Dim
Computes the product of all the dimensions in the list.
If any are dynamic, the result is a dynamic dimension value.
Parameters:
- length (
Int
): The number of elements in the list.
Returns:
The product of all the dimensions.
product_range
product_range[start: Int, end: Int](self: Self) -> Dim
Computes the product of a range of the dimensions in the list.
If any in the range are dynamic, the result is a dynamic dimension value.
Parameters:
- start (
Int
): The starting index. - end (
Int
): The end index.
Returns:
The product of all the dimensions.
contains
contains[length: Int](self: Self, value: Dim) -> Bool
Determines whether the dimension list contains a specified dimension value.
Parameters:
- length (
Int
): The number of elements in the list.
Args:
- value (
Dim
): The value to find.
Returns:
True if the list contains a dimension of the specified value.
all_known
all_known[length: Int](self: Self) -> Bool
Determines whether all dimensions are statically known.
Parameters:
- length (
Int
): The number of elements in the list.
Returns:
True if all dimensions have a static value.
create_unknown
create_unknown[length: Int]() -> Self
Creates a dimension list of all dynamic dimension values.
Parameters:
- length (
Int
): The number of elements in the list.
Returns:
A list of all dynamic dimension values.
VariadicList
A utility class to access variadic function arguments. Provides a ālistā view of the function argument so that the size of the argument list and each individual argument can be accessed.
Parameters:
- type (
AnyType
): The type of the elements in the list.
Aliases:
StorageType = variadic<*"type">
Fields:
- value (
variadic<*"type">
): The underlying storage for the variadic list.
Functions:
__init__
__init__(*value: *"type") -> Self
Constructs a VariadicList from a variadic list of arguments.
Args:
- value (
**"type"
): The variadic argument list to construct the variadic list with.
Returns:
The VariadicList constructed.
__init__(*value: *"type") -> Self
Constructs a VariadicList from a variadic argument type.
Args:
- value (
**"type"
): The variadic argument to construct the list with.
Returns:
The VariadicList constructed.
__getitem__
__getitem__(self: Self, index: Int) -> *"type"
Gets a single element on the variadic list.
Args:
- index (
Int
): The index of the element to access on the list.
Returns:
The element on the list corresponding to the given index.
__len__
__len__(self: Self) -> Int
Gets the size of the list.
Returns:
The number of elements on the variadic list.
VariadicListMem
A utility class to access variadic function arguments of memory-only types that may have ownership. It exposes pointers to the elements in a way that can be enumerated. Each element may be accessed with __get_address_as_lvalue
.
Parameters:
- type (
AnyType
): The type of the elements in the list.
Aliases:
StorageType = variadic<pointer<*"type">>
Fields:
- value (
variadic<pointer<*"type">>
): The underlying storage, a variadic list of pointers to elements of the given type.
Functions:
__init__
__init__(*value: pointer<*"type">) -> Self
Constructs a VariadicList from a variadic argument type.
Args:
- value (
*pointer<*"type">
): The variadic argument to construct the list with.
Returns:
The VariadicList constructed.
__getitem__
__getitem__(self: Self, index: Int) -> pointer<*"type">
Gets a single element on the variadic list.
Args:
- index (
Int
): The index of the element to access on the list.
Returns:
A low-level pointer to the element on the list corresponding to the given index.
__len__
__len__(self: Self) -> Int
Gets the size of the list.
Returns:
The number of elements on the variadic list.