-module(viva_tensor@layout). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/viva_tensor/layout.gleam"). -export_type([tensor_storage/0, tensor_device/0, tensor_dtype/0, tensor_memory_layout/0, tensor_layout/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC( " Tensor layout metadata.\n" "\n" " A tensor is not just its values. To interpret tensor storage correctly, every\n" " backend needs the same small contract: shape, strides, offset, dtype, device,\n" " and storage representation.\n" ). -type tensor_storage() :: dense_storage | strided_storage | native_storage. -type tensor_device() :: beam_cpu | native_cpu | {cuda_device, integer()}. -type tensor_dtype() :: float64 | float32 | float16 | b_float16 | float8_e4_m3 | int8 | int4 | sparse_float16. -type tensor_memory_layout() :: row_major | column_major | strided_layout | packed_fp8_layout | packed_sparse24_layout. -type tensor_layout() :: {tensor_layout, tensor_storage(), tensor_device(), tensor_dtype(), list(integer()), list(integer()), integer(), integer(), integer(), boolean()}.