defmodule Nx.TemplateBackend do
@moduledoc """
An opaque backend written that is used as template
to declare the type, shape, and names of tensors to
be expected in the future.
It doesn't perform any operation, it always raises.
"""
@behaviour Nx.Backend
defstruct []
@impl true
def inspect(%Nx.Tensor{}, opts) do
if opts.custom_options[:skip_template_backend_header] do
Inspect.Algebra.empty()
else
"Nx.TemplateBackend"
end
end
funs =
Nx.Backend.behaviour_info(:callbacks) --
(Nx.Backend.behaviour_info(:optional_callbacks) ++ Module.definitions_in(__MODULE__, :def))
for {fun, arity} <- funs do
args = Macro.generate_arguments(arity, __MODULE__)
@impl true
def unquote(fun)(unquote_splicing(args)) do
raise "cannot perform operations on a Nx.TemplateBackend tensor"
end
end
end