Skip to contents

Use this to canonicalize inputs at the start of a function so it works both with eager executing and in combination with jit(). Use as_anvl_array() for a single input and as_anvl_arrays() for multiple inputs. The latter will also ensure all arrays are from the same backend and live on the same device. Both take a .promote rule saying which data type the input is brought to.

Usage

as_anvl_array(x, device = NULL, .promote = NULL)

as_anvl_arrays(..., .promote = NULL)

Arguments

x

(arrayish)
Input to canonicalize.

device

(NULL | device)
Target device. If x is an AnvlArray on a different device, an error is raised.

.promote

(NULL | function)
Which data type every input is brought to. See promotion_rule for more information. A rule materializes an R value at its answer rather than converting it afterwards, so it keeps every digit.

...

(arrayish)
Inputs to align.

Value

as_anvl_array(): (AnvlArray | GraphBox)
An AnvlArray in eager code and a GraphBox inside a trace.

as_anvl_arrays(): (list)
One such value per input, named like ....

Examples

as_anvl_array(1L)
#> AnvlArray
#>  1
#> [ CPUi32{} ] 
# a rule builds the R value at the data type it names
as_anvl_array(1, .promote = promotion_dtype("f64"))
#> AnvlArray
#>  1
#> [ CPUf64{} ] 
as_anvl_arrays(nv_array(1:3), 1L)
#> [[1]]
#> AnvlArray
#>  1
#>  2
#>  3
#> [ CPUi32{3} ] 
#> 
#> [[2]]
#> AnvlArray
#>  1
#> [ CPUi32{} ] 
#> 
as_anvl_arrays(nv_array(1L), nv_array(1.5), .promote = promotion_common())
#> [[1]]
#> AnvlArray
#>  1
#> [ CPUf32{1} ] 
#> 
#> [[2]]
#> AnvlArray
#>  1.5000
#> [ CPUf32{1} ] 
#>