Representation of an abstract array type.
During tracing, it is wrapped in a GraphNode held by a GraphBox.
In the lowered AnvlGraph it is also part of GraphNodes representing the values in the program.
The base class represents an unknown value, but child classes exist for:
closed-over constants:
ConcreteArrayscalar arrays arising from R literals:
LiteralArraysequence patterns:
IotaArray
To convert a arrayish value to an abstract array, use to_abstract().
Arguments
- dtype
(
tengen::DataType|character(1))
The data type of the array.- shape
(
stablehlo::Shape|integer())
The shape of the array. Can be provided as an integer vector.- ambiguous
(
logical(1))
Whether the type is ambiguous. Ambiguous types usually arise from R literals (e.g.,1L,1.0) and follow special promotion rules. See thevignette("type-promotion")for more details.
Extractors
The following extractors are available on AbstractArray objects:
dtype(): Get the data type of the array.shape(): Get the shape (dimensions) of the array.ambiguous(): Get whether the dtype is ambiguous.ndims(): Get the number of dimensions.
Examples
# -- Creating abstract arrays --
a <- AbstractArray("f32", c(2L, 3L))
a
#> AbstractArray(dtype=f32, shape=2x3)
dtype(a)
#> <f32>
shape(a)
#> [1] 2 3
ambiguous(a)
#> [1] FALSE
# Shorthand
nv_aval("f32", c(2L, 3L))
#> AbstractArray(dtype=f32, shape=2x3)
# How AbstractArrays appear in an AnvlGraph
graph <- trace_fn(function(x) x + 1, list(x = nv_aval("i32", 4L)))
graph
#> <AnvlGraph>
#> Inputs:
#> %x1: i32[4]
#> Body:
#> %1: f32?[4] = convert [dtype = f32, ambiguous = TRUE] (%x1)
#> %2: f32?[4] = broadcast_in_dim [shape = 4, broadcast_dimensions = <any>] (1:f32?)
#> %3: f32?[4] = add(%1, %2)
#> Outputs:
#> %3: f32?[4]
graph$inputs[[1]]$aval
#> AbstractArray(dtype=i32, shape=4)