Packages
Tensor library for Gleam/BEAM with a pure Gleam API, zero-copy views, and optional native acceleration
Current section
Files
Jump to
Current section
Files
src/viva_tensor@core@error.erl
-module(viva_tensor@core@error).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/viva_tensor/core/error.gleam").
-export([shape_to_string/1, to_string/1]).
-export_type([tensor_error/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(false).
-type tensor_error() :: {shape_mismatch, list(integer()), list(integer())} |
{invalid_shape, binary()} |
{dimension_error, binary()} |
{broadcast_error, list(integer()), list(integer())} |
{index_out_of_bounds, integer(), integer()} |
{dtype_error, binary()} |
{axis_out_of_bounds, binary(), integer(), integer()} |
{rank_mismatch, binary(), integer(), list(integer())} |
{operand_shape_mismatch, binary(), binary(), binary(), list(integer())} |
{slice_arity_mismatch, list(integer()), list(integer()), list(integer())} |
{backend_mismatch, binary(), binary(), binary(), binary()} |
{nif_not_loaded, binary()}.
-file("src/viva_tensor/core/error.gleam", 193).
?DOC(false).
-spec shape_to_string(list(integer())) -> binary().
shape_to_string(Shape) ->
<<<<"["/utf8,
(gleam@string:join(
gleam@list:map(Shape, fun erlang:integer_to_binary/1),
<<", "/utf8>>
))/binary>>/binary,
"]"/utf8>>.
-file("src/viva_tensor/core/error.gleam", 113).
?DOC(false).
-spec to_string(tensor_error()) -> binary().
to_string(Error) ->
case Error of
{shape_mismatch, Expected, Got} ->
<<<<<<"Shape mismatch: expected "/utf8,
(shape_to_string(Expected))/binary>>/binary,
", got "/utf8>>/binary,
(shape_to_string(Got))/binary>>;
{invalid_shape, Reason} ->
<<"Invalid shape: "/utf8, Reason/binary>>;
{dimension_error, Reason@1} ->
<<"Dimension error: "/utf8, Reason@1/binary>>;
{broadcast_error, A, B} ->
<<<<<<"Cannot broadcast shapes "/utf8, (shape_to_string(A))/binary>>/binary,
" and "/utf8>>/binary,
(shape_to_string(B))/binary>>;
{index_out_of_bounds, Index, Size} ->
<<<<<<"Index "/utf8, (erlang:integer_to_binary(Index))/binary>>/binary,
" out of bounds for size "/utf8>>/binary,
(erlang:integer_to_binary(Size))/binary>>;
{dtype_error, Reason@2} ->
<<"Dtype error: "/utf8, Reason@2/binary>>;
{axis_out_of_bounds, Operation, Axis, Rank} ->
<<<<<<<<<<<<<<Operation/binary, ": axis "/utf8>>/binary,
(erlang:integer_to_binary(Axis))/binary>>/binary,
" is out of bounds for tensor of rank "/utf8>>/binary,
(erlang:integer_to_binary(Rank))/binary>>/binary,
" (valid: 0.."/utf8>>/binary,
(erlang:integer_to_binary(Rank - 1))/binary>>/binary,
")"/utf8>>;
{rank_mismatch, Operation@1, Expected_rank, Got_shape} ->
<<<<<<<<<<<<Operation@1/binary, " requires a "/utf8>>/binary,
(erlang:integer_to_binary(Expected_rank))/binary>>/binary,
"D tensor, got rank "/utf8>>/binary,
(erlang:integer_to_binary(erlang:length(Got_shape)))/binary>>/binary,
" with shape "/utf8>>/binary,
(shape_to_string(Got_shape))/binary>>;
{operand_shape_mismatch, Operation@2, Operand, Expected@1, Got@1} ->
<<<<<<<<<<<<Operation@2/binary, ": "/utf8>>/binary, Operand/binary>>/binary,
" has shape "/utf8>>/binary,
(shape_to_string(Got@1))/binary>>/binary,
", expected "/utf8>>/binary,
Expected@1/binary>>;
{slice_arity_mismatch, Tensor_shape, Start, Lengths} ->
<<<<<<<<<<<<<<"slice: start and length must have rank "/utf8,
(erlang:integer_to_binary(
erlang:length(Tensor_shape)
))/binary>>/binary,
" (tensor shape "/utf8>>/binary,
(shape_to_string(Tensor_shape))/binary>>/binary,
"); got start="/utf8>>/binary,
(shape_to_string(Start))/binary>>/binary,
", length="/utf8>>/binary,
(shape_to_string(Lengths))/binary>>;
{backend_mismatch, Operation@3, Out, Lhs, Rhs} ->
<<<<<<<<<<<<Operation@3/binary, ": backend mismatch — out="/utf8>>/binary,
Out/binary>>/binary,
", lhs="/utf8>>/binary,
Lhs/binary>>/binary,
", rhs="/utf8>>/binary,
Rhs/binary>>;
{nif_not_loaded, Operation@4} ->
<<Operation@4/binary,
": native NIF library not loaded (build with `make zig` or `gleam build` after configuring the Zig toolchain)"/utf8>>
end.