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@ffi.erl
-module(viva_tensor@core@ffi).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/viva_tensor/core/ffi.gleam").
-export([list_to_array/1, array_get/2, array_size/1, array_to_list/1, array_dot/2, array_matmul/5, array_sum/1, array_scale/2, is_nif_loaded/0, nif_backend_info/0, nif_matmul/5, nif_dot/2, nif_sum/1, nif_scale/2, sqrt/1, log/1, exp/1, cos/1, sin/1, tan/1, tanh/1, pow/2, abs/1, random_uniform/0, now_microseconds/0, zig_is_loaded/0, cuda_available/0, zig_backend_info/0, zig_dot/2, zig_sum/1, zig_scale/2, zig_add/2, zig_mul/2, zig_matmul/5, nt_zeros/1, nt_ones/1, nt_fill/2, nt_from_list/2, nt_to_list/1, nt_shape/1, nt_size/1, nt_broadcast_to/2, nt_add/2, nt_sub/2, nt_mul/2, nt_scale/2, nt_negate/1, nt_maximum/2, nt_minimum/2, nt_equal/2, nt_not_equal/2, nt_greater/2, nt_greater_equal/2, nt_less/2, nt_less_equal/2, nt_logical_not/1, nt_logical_and/2, nt_logical_or/2, nt_logical_xor/2, nt_where/3, nt_dot/2, nt_sum/1, nt_max/1, nt_min/1, nt_count_nonzero/1, nt_matmul/5, nt_matmul_inplace/6, nt_transpose/1, nt_relu/1, nt_sigmoid/1, nt_exp/1, nt_log/1, nt_add_mut/2, nt_scale_mut/2, nt_negate_mut/1, nt_relu_mut/1, nt_add_into/3, nt_sub_into/3, nt_mul_into/3, nt_scale_into/3, nt_saturn_blend/3, nt_fused_linear_relu/6, nt_fused_linear_relu_into/7, nt_resonance_mul/2, nt_resonance_power/2, nt_softmax_axis/2, nt_layer_norm/4, nt_gelu_exact/1, lns_from_f64/1, lns_to_f64/1, lns_mul/2, lns_mul_corrected/2, lns_div/2, lns_sqrt/1, lns_rsqrt/1, horde_create/2, horde_set_positions/2, horde_set_velocities/2, horde_integrate/2, horde_dampen/2, horde_wrap/2, horde_get_positions/1, horde_get_velocities/1, horde_count/1, horde_kinetic_energy/1, hdc_create/1, hdc_random/2, hdc_bind/2, hdc_similarity/2, hdc_permute/2, hdc_dim/1, nt_matmul_nf4/7, ct_from_list/2, ct_to_list/1, ct_shape/1, ct_matmul/5, ct_matmul_inplace/6, cuda_sync/0, ct16_available/0, ct16_from_list/2, ct16_to_list/1, ct16_shape/1, ct16_matmul/5, ct16_matmul_inplace/6, ct16_matmul_fused_relu/6, ct16_matmul_fused_gelu/6, ct16_linear_relu/7, ct16_linear_gelu/7, ct_int8_available/0, ct_int8_from_list/2, ct_int8_to_list/1, ct_int8_shape/1, ct_int8_matmul/5, sparse_available/0, sparse_from_ct16/1, sparse_shape/1, sparse_compression_ratio/1, sparse_matmul/5]).
-export_type([erlang_array/0, native_tensor_ref/0, lns_tensor_ref/0, horde_ref/0, hdc_vector_ref/0, cuda_tensor_ref/0, cuda_tensor16_ref/0, cuda_int8_tensor_ref/0, sparse_tensor_ref/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 erlang_array() :: any().
-type native_tensor_ref() :: any().
-type lns_tensor_ref() :: any().
-type horde_ref() :: any().
-type hdc_vector_ref() :: any().
-type cuda_tensor_ref() :: any().
-type cuda_tensor16_ref() :: any().
-type cuda_int8_tensor_ref() :: any().
-type sparse_tensor_ref() :: any().
-file("src/viva_tensor/core/ffi.gleam", 56).
?DOC(false).
-spec list_to_array(list(float())) -> erlang_array().
list_to_array(Lst) ->
viva_tensor_ffi:list_to_array(Lst).
-file("src/viva_tensor/core/ffi.gleam", 65).
?DOC(false).
-spec array_get(erlang_array(), integer()) -> float().
array_get(Arr, Index) ->
viva_tensor_ffi:array_get(Arr, Index).
-file("src/viva_tensor/core/ffi.gleam", 70).
?DOC(false).
-spec array_size(erlang_array()) -> integer().
array_size(Arr) ->
viva_tensor_ffi:array_size(Arr).
-file("src/viva_tensor/core/ffi.gleam", 78).
?DOC(false).
-spec array_to_list(erlang_array()) -> list(float()).
array_to_list(Arr) ->
viva_tensor_ffi:array_to_list(Arr).
-file("src/viva_tensor/core/ffi.gleam", 92).
?DOC(false).
-spec array_dot(erlang_array(), erlang_array()) -> float().
array_dot(A, B) ->
viva_tensor_ffi:array_dot(A, B).
-file("src/viva_tensor/core/ffi.gleam", 105).
?DOC(false).
-spec array_matmul(
erlang_array(),
erlang_array(),
integer(),
integer(),
integer()
) -> erlang_array().
array_matmul(A, B, M, N, K) ->
viva_tensor_ffi:array_matmul(A, B, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 116).
?DOC(false).
-spec array_sum(erlang_array()) -> float().
array_sum(Arr) ->
viva_tensor_ffi:array_sum(Arr).
-file("src/viva_tensor/core/ffi.gleam", 121).
?DOC(false).
-spec array_scale(erlang_array(), float()) -> erlang_array().
array_scale(Arr, Scalar) ->
viva_tensor_ffi:array_scale(Arr, Scalar).
-file("src/viva_tensor/core/ffi.gleam", 140).
?DOC(false).
-spec is_nif_loaded() -> boolean().
is_nif_loaded() ->
viva_tensor_nif:is_nif_loaded().
-file("src/viva_tensor/core/ffi.gleam", 147).
?DOC(false).
-spec nif_backend_info() -> binary().
nif_backend_info() ->
viva_tensor_nif:backend_info().
-file("src/viva_tensor/core/ffi.gleam", 157).
?DOC(false).
-spec nif_matmul(list(float()), list(float()), integer(), integer(), integer()) -> {ok,
list(float())} |
{error, binary()}.
nif_matmul(A, B, M, N, K) ->
viva_tensor_nif:matmul(A, B, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 168).
?DOC(false).
-spec nif_dot(list(float()), list(float())) -> {ok, float()} | {error, binary()}.
nif_dot(A, B) ->
viva_tensor_nif:dot(A, B).
-file("src/viva_tensor/core/ffi.gleam", 173).
?DOC(false).
-spec nif_sum(list(float())) -> {ok, float()} | {error, binary()}.
nif_sum(Data) ->
viva_tensor_nif:sum(Data).
-file("src/viva_tensor/core/ffi.gleam", 178).
?DOC(false).
-spec nif_scale(list(float()), float()) -> {ok, list(float())} |
{error, binary()}.
nif_scale(Data, Scalar) ->
viva_tensor_nif:scale(Data, Scalar).
-file("src/viva_tensor/core/ffi.gleam", 191).
?DOC(false).
-spec sqrt(float()) -> float().
sqrt(X) ->
math:sqrt(X).
-file("src/viva_tensor/core/ffi.gleam", 199).
?DOC(false).
-spec log(float()) -> float().
log(X) ->
math:log(X).
-file("src/viva_tensor/core/ffi.gleam", 207).
?DOC(false).
-spec exp(float()) -> float().
exp(X) ->
math:exp(X).
-file("src/viva_tensor/core/ffi.gleam", 212).
?DOC(false).
-spec cos(float()) -> float().
cos(X) ->
math:cos(X).
-file("src/viva_tensor/core/ffi.gleam", 217).
?DOC(false).
-spec sin(float()) -> float().
sin(X) ->
math:sin(X).
-file("src/viva_tensor/core/ffi.gleam", 222).
?DOC(false).
-spec tan(float()) -> float().
tan(X) ->
math:tan(X).
-file("src/viva_tensor/core/ffi.gleam", 230).
?DOC(false).
-spec tanh(float()) -> float().
tanh(X) ->
math:tanh(X).
-file("src/viva_tensor/core/ffi.gleam", 235).
?DOC(false).
-spec pow(float(), float()) -> float().
pow(X, Y) ->
math:pow(X, Y).
-file("src/viva_tensor/core/ffi.gleam", 243).
?DOC(false).
-spec abs(float()) -> float().
abs(X) ->
case X < +0.0 of
true ->
+0.0 - X;
false ->
X
end.
-file("src/viva_tensor/core/ffi.gleam", 261).
?DOC(false).
-spec random_uniform() -> float().
random_uniform() ->
rand:uniform().
-file("src/viva_tensor/core/ffi.gleam", 373).
?DOC(false).
-spec now_microseconds() -> integer().
now_microseconds() ->
viva_tensor_ffi:now_microseconds().
-file("src/viva_tensor/core/ffi.gleam", 395).
?DOC(false).
-spec zig_is_loaded() -> boolean().
zig_is_loaded() ->
viva_tensor_zig:is_loaded().
-file("src/viva_tensor/core/ffi.gleam", 405).
?DOC(false).
-spec cuda_available() -> boolean().
cuda_available() ->
viva_tensor_zig:cuda_available().
-file("src/viva_tensor/core/ffi.gleam", 412).
?DOC(false).
-spec zig_backend_info() -> binary().
zig_backend_info() ->
viva_tensor_zig:backend_info().
-file("src/viva_tensor/core/ffi.gleam", 420).
?DOC(false).
-spec zig_dot(list(float()), list(float())) -> {ok, float()} | {error, binary()}.
zig_dot(A, B) ->
viva_tensor_zig:simd_dot(A, B).
-file("src/viva_tensor/core/ffi.gleam", 425).
?DOC(false).
-spec zig_sum(list(float())) -> {ok, float()} | {error, binary()}.
zig_sum(Data) ->
viva_tensor_zig:simd_sum(Data).
-file("src/viva_tensor/core/ffi.gleam", 430).
?DOC(false).
-spec zig_scale(list(float()), float()) -> {ok, list(float())} |
{error, binary()}.
zig_scale(Data, Scalar) ->
viva_tensor_zig:simd_scale(Data, Scalar).
-file("src/viva_tensor/core/ffi.gleam", 438).
?DOC(false).
-spec zig_add(list(float()), list(float())) -> {ok, list(float())} |
{error, binary()}.
zig_add(A, B) ->
viva_tensor_zig:simd_add(A, B).
-file("src/viva_tensor/core/ffi.gleam", 443).
?DOC(false).
-spec zig_mul(list(float()), list(float())) -> {ok, list(float())} |
{error, binary()}.
zig_mul(A, B) ->
viva_tensor_zig:simd_mul(A, B).
-file("src/viva_tensor/core/ffi.gleam", 451).
?DOC(false).
-spec zig_matmul(list(float()), list(float()), integer(), integer(), integer()) -> {ok,
list(float())} |
{error, binary()}.
zig_matmul(A, B, M, N, K) ->
viva_tensor_zig:simd_matmul(A, B, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 469).
?DOC(false).
-spec nt_zeros(list(integer())) -> {ok, native_tensor_ref()} | {error, binary()}.
nt_zeros(Shape) ->
case zig_is_loaded() of
true ->
viva_tensor_zig:nt_zeros(Shape);
false ->
{error, <<"nif_not_loaded"/utf8>>}
end.
-file("src/viva_tensor/core/ffi.gleam", 477).
?DOC(false).
-spec nt_ones(list(integer())) -> {ok, native_tensor_ref()} | {error, binary()}.
nt_ones(Shape) ->
case zig_is_loaded() of
true ->
viva_tensor_zig:nt_ones(Shape);
false ->
{error, <<"nif_not_loaded"/utf8>>}
end.
-file("src/viva_tensor/core/ffi.gleam", 485).
?DOC(false).
-spec nt_fill(list(integer()), float()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_fill(Shape, Value) ->
case zig_is_loaded() of
true ->
viva_tensor_zig:nt_fill(Shape, Value);
false ->
{error, <<"nif_not_loaded"/utf8>>}
end.
-file("src/viva_tensor/core/ffi.gleam", 496).
?DOC(false).
-spec nt_from_list(list(float()), list(integer())) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_from_list(Data, Shape) ->
case zig_is_loaded() of
true ->
viva_tensor_zig:nt_from_list(Data, Shape);
false ->
{error, <<"nif_not_loaded"/utf8>>}
end.
-file("src/viva_tensor/core/ffi.gleam", 507).
?DOC(false).
-spec nt_to_list(native_tensor_ref()) -> {ok, list(float())} | {error, binary()}.
nt_to_list(Ref) ->
viva_tensor_zig:nt_to_list(Ref).
-file("src/viva_tensor/core/ffi.gleam", 512).
?DOC(false).
-spec nt_shape(native_tensor_ref()) -> {ok, list(integer())} | {error, binary()}.
nt_shape(Ref) ->
viva_tensor_zig:nt_shape(Ref).
-file("src/viva_tensor/core/ffi.gleam", 517).
?DOC(false).
-spec nt_size(native_tensor_ref()) -> {ok, integer()} | {error, binary()}.
nt_size(Ref) ->
viva_tensor_zig:nt_size(Ref).
-file("src/viva_tensor/core/ffi.gleam", 522).
?DOC(false).
-spec nt_broadcast_to(native_tensor_ref(), list(integer())) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_broadcast_to(Ref, Shape) ->
viva_tensor_zig:nt_broadcast_to(Ref, Shape).
-file("src/viva_tensor/core/ffi.gleam", 530).
?DOC(false).
-spec nt_add(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_add(A, B) ->
viva_tensor_zig:nt_add(A, B).
-file("src/viva_tensor/core/ffi.gleam", 538).
?DOC(false).
-spec nt_sub(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_sub(A, B) ->
viva_tensor_zig:nt_sub(A, B).
-file("src/viva_tensor/core/ffi.gleam", 546).
?DOC(false).
-spec nt_mul(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_mul(A, B) ->
viva_tensor_zig:nt_mul(A, B).
-file("src/viva_tensor/core/ffi.gleam", 554).
?DOC(false).
-spec nt_scale(native_tensor_ref(), float()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_scale(A, Scalar) ->
viva_tensor_zig:nt_scale(A, Scalar).
-file("src/viva_tensor/core/ffi.gleam", 562).
?DOC(false).
-spec nt_negate(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_negate(A) ->
viva_tensor_zig:nt_negate(A).
-file("src/viva_tensor/core/ffi.gleam", 567).
?DOC(false).
-spec nt_maximum(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_maximum(A, B) ->
viva_tensor_zig:nt_maximum(A, B).
-file("src/viva_tensor/core/ffi.gleam", 575).
?DOC(false).
-spec nt_minimum(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_minimum(A, B) ->
viva_tensor_zig:nt_minimum(A, B).
-file("src/viva_tensor/core/ffi.gleam", 583).
?DOC(false).
-spec nt_equal(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_equal(A, B) ->
viva_tensor_zig:nt_equal(A, B).
-file("src/viva_tensor/core/ffi.gleam", 591).
?DOC(false).
-spec nt_not_equal(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_not_equal(A, B) ->
viva_tensor_zig:nt_not_equal(A, B).
-file("src/viva_tensor/core/ffi.gleam", 599).
?DOC(false).
-spec nt_greater(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_greater(A, B) ->
viva_tensor_zig:nt_greater(A, B).
-file("src/viva_tensor/core/ffi.gleam", 607).
?DOC(false).
-spec nt_greater_equal(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_greater_equal(A, B) ->
viva_tensor_zig:nt_greater_equal(A, B).
-file("src/viva_tensor/core/ffi.gleam", 615).
?DOC(false).
-spec nt_less(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_less(A, B) ->
viva_tensor_zig:nt_less(A, B).
-file("src/viva_tensor/core/ffi.gleam", 623).
?DOC(false).
-spec nt_less_equal(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_less_equal(A, B) ->
viva_tensor_zig:nt_less_equal(A, B).
-file("src/viva_tensor/core/ffi.gleam", 631).
?DOC(false).
-spec nt_logical_not(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_logical_not(A) ->
viva_tensor_zig:nt_logical_not(A).
-file("src/viva_tensor/core/ffi.gleam", 636).
?DOC(false).
-spec nt_logical_and(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_logical_and(A, B) ->
viva_tensor_zig:nt_logical_and(A, B).
-file("src/viva_tensor/core/ffi.gleam", 644).
?DOC(false).
-spec nt_logical_or(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_logical_or(A, B) ->
viva_tensor_zig:nt_logical_or(A, B).
-file("src/viva_tensor/core/ffi.gleam", 652).
?DOC(false).
-spec nt_logical_xor(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_logical_xor(A, B) ->
viva_tensor_zig:nt_logical_xor(A, B).
-file("src/viva_tensor/core/ffi.gleam", 660).
?DOC(false).
-spec nt_where(native_tensor_ref(), native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_where(Condition, When_true, When_false) ->
viva_tensor_zig:nt_where(Condition, When_true, When_false).
-file("src/viva_tensor/core/ffi.gleam", 669).
?DOC(false).
-spec nt_dot(native_tensor_ref(), native_tensor_ref()) -> {ok, float()} |
{error, binary()}.
nt_dot(A, B) ->
viva_tensor_zig:nt_dot(A, B).
-file("src/viva_tensor/core/ffi.gleam", 674).
?DOC(false).
-spec nt_sum(native_tensor_ref()) -> {ok, float()} | {error, binary()}.
nt_sum(A) ->
viva_tensor_zig:nt_sum(A).
-file("src/viva_tensor/core/ffi.gleam", 679).
?DOC(false).
-spec nt_max(native_tensor_ref()) -> {ok, float()} | {error, binary()}.
nt_max(A) ->
viva_tensor_zig:nt_max(A).
-file("src/viva_tensor/core/ffi.gleam", 684).
?DOC(false).
-spec nt_min(native_tensor_ref()) -> {ok, float()} | {error, binary()}.
nt_min(A) ->
viva_tensor_zig:nt_min(A).
-file("src/viva_tensor/core/ffi.gleam", 689).
?DOC(false).
-spec nt_count_nonzero(native_tensor_ref()) -> {ok, integer()} |
{error, binary()}.
nt_count_nonzero(A) ->
viva_tensor_zig:nt_count_nonzero(A).
-file("src/viva_tensor/core/ffi.gleam", 694).
?DOC(false).
-spec nt_matmul(
native_tensor_ref(),
native_tensor_ref(),
integer(),
integer(),
integer()
) -> {ok, native_tensor_ref()} | {error, binary()}.
nt_matmul(A, B, M, N, K) ->
viva_tensor_zig:nt_matmul(A, B, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 705).
?DOC(false).
-spec nt_matmul_inplace(
native_tensor_ref(),
native_tensor_ref(),
native_tensor_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
nt_matmul_inplace(A, B, Out, M, N, K) ->
viva_tensor_zig:nt_matmul_inplace(A, B, Out, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 717).
?DOC(false).
-spec nt_transpose(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_transpose(A) ->
viva_tensor_zig:nt_transpose(A).
-file("src/viva_tensor/core/ffi.gleam", 722).
?DOC(false).
-spec nt_relu(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_relu(A) ->
viva_tensor_zig:nt_relu(A).
-file("src/viva_tensor/core/ffi.gleam", 727).
?DOC(false).
-spec nt_sigmoid(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_sigmoid(A) ->
viva_tensor_zig:nt_sigmoid(A).
-file("src/viva_tensor/core/ffi.gleam", 732).
?DOC(false).
-spec nt_exp(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_exp(A) ->
viva_tensor_zig:nt_exp(A).
-file("src/viva_tensor/core/ffi.gleam", 737).
?DOC(false).
-spec nt_log(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_log(A) ->
viva_tensor_zig:nt_log(A).
-file("src/viva_tensor/core/ffi.gleam", 748).
?DOC(false).
-spec nt_add_mut(native_tensor_ref(), native_tensor_ref()) -> {ok, nil} |
{error, binary()}.
nt_add_mut(A, B) ->
viva_tensor_zig:nt_add_mut(A, B).
-file("src/viva_tensor/core/ffi.gleam", 756).
?DOC(false).
-spec nt_scale_mut(native_tensor_ref(), float()) -> {ok, nil} |
{error, binary()}.
nt_scale_mut(A, Scalar) ->
viva_tensor_zig:nt_scale_mut(A, Scalar).
-file("src/viva_tensor/core/ffi.gleam", 761).
?DOC(false).
-spec nt_negate_mut(native_tensor_ref()) -> {ok, nil} | {error, binary()}.
nt_negate_mut(A) ->
viva_tensor_zig:nt_negate_mut(A).
-file("src/viva_tensor/core/ffi.gleam", 766).
?DOC(false).
-spec nt_relu_mut(native_tensor_ref()) -> {ok, nil} | {error, binary()}.
nt_relu_mut(A) ->
viva_tensor_zig:nt_relu_mut(A).
-file("src/viva_tensor/core/ffi.gleam", 771).
?DOC(false).
-spec nt_add_into(native_tensor_ref(), native_tensor_ref(), native_tensor_ref()) -> {ok,
nil} |
{error, binary()}.
nt_add_into(Out, A, B) ->
viva_tensor_zig:nt_add_into(Out, A, B).
-file("src/viva_tensor/core/ffi.gleam", 780).
?DOC(false).
-spec nt_sub_into(native_tensor_ref(), native_tensor_ref(), native_tensor_ref()) -> {ok,
nil} |
{error, binary()}.
nt_sub_into(Out, A, B) ->
viva_tensor_zig:nt_sub_into(Out, A, B).
-file("src/viva_tensor/core/ffi.gleam", 789).
?DOC(false).
-spec nt_mul_into(native_tensor_ref(), native_tensor_ref(), native_tensor_ref()) -> {ok,
nil} |
{error, binary()}.
nt_mul_into(Out, A, B) ->
viva_tensor_zig:nt_mul_into(Out, A, B).
-file("src/viva_tensor/core/ffi.gleam", 798).
?DOC(false).
-spec nt_scale_into(native_tensor_ref(), native_tensor_ref(), float()) -> {ok,
nil} |
{error, binary()}.
nt_scale_into(Out, A, Scalar) ->
viva_tensor_zig:nt_scale_into(Out, A, Scalar).
-file("src/viva_tensor/core/ffi.gleam", 810).
?DOC(false).
-spec nt_saturn_blend(native_tensor_ref(), native_tensor_ref(), float()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_saturn_blend(Texture, Shade, Bias) ->
viva_tensor_zig:nt_saturn_blend(Texture, Shade, Bias).
-file("src/viva_tensor/core/ffi.gleam", 820).
?DOC(false).
-spec nt_fused_linear_relu(
native_tensor_ref(),
native_tensor_ref(),
native_tensor_ref(),
integer(),
integer(),
integer()
) -> {ok, native_tensor_ref()} | {error, binary()}.
nt_fused_linear_relu(A, B, Bias, M, N, K) ->
viva_tensor_zig:nt_fused_linear_relu(A, B, Bias, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 833).
?DOC(false).
-spec nt_fused_linear_relu_into(
native_tensor_ref(),
native_tensor_ref(),
native_tensor_ref(),
native_tensor_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
nt_fused_linear_relu_into(Out, A, B, Bias, M, N, K) ->
viva_tensor_zig:nt_fused_linear_relu_into(Out, A, B, Bias, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 848).
?DOC(false).
-spec nt_resonance_mul(native_tensor_ref(), native_tensor_ref()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_resonance_mul(A, B) ->
viva_tensor_zig:nt_resonance_mul(A, B).
-file("src/viva_tensor/core/ffi.gleam", 858).
?DOC(false).
-spec nt_resonance_power(native_tensor_ref(), float()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_resonance_power(Data, Exponent) ->
viva_tensor_zig:nt_resonance_power(Data, Exponent).
-file("src/viva_tensor/core/ffi.gleam", 881).
?DOC(false).
-spec nt_softmax_axis(native_tensor_ref(), integer()) -> {ok,
native_tensor_ref()} |
{error, binary()}.
nt_softmax_axis(Ref, Axis) ->
case zig_is_loaded() of
true ->
viva_tensor_zig:nt_softmax_axis(Ref, Axis);
false ->
{error, <<"nif_not_loaded"/utf8>>}
end.
-file("src/viva_tensor/core/ffi.gleam", 897).
?DOC(false).
-spec nt_layer_norm(
native_tensor_ref(),
native_tensor_ref(),
native_tensor_ref(),
float()
) -> {ok, native_tensor_ref()} | {error, binary()}.
nt_layer_norm(Ref, Scale, Bias, Eps) ->
case zig_is_loaded() of
true ->
viva_tensor_zig:nt_layer_norm(Ref, Scale, Bias, Eps);
false ->
{error, <<"nif_not_loaded"/utf8>>}
end.
-file("src/viva_tensor/core/ffi.gleam", 912).
?DOC(false).
-spec nt_gelu_exact(native_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
nt_gelu_exact(Ref) ->
case zig_is_loaded() of
true ->
viva_tensor_zig:nt_gelu_exact(Ref);
false ->
{error, <<"nif_not_loaded"/utf8>>}
end.
-file("src/viva_tensor/core/ffi.gleam", 1261).
?DOC(false).
-spec lns_from_f64(native_tensor_ref()) -> {ok, lns_tensor_ref()} |
{error, binary()}.
lns_from_f64(Ref) ->
viva_tensor_zig:lns_from_f64(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1266).
?DOC(false).
-spec lns_to_f64(lns_tensor_ref()) -> {ok, native_tensor_ref()} |
{error, binary()}.
lns_to_f64(Ref) ->
viva_tensor_zig:lns_to_f64(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1271).
?DOC(false).
-spec lns_mul(lns_tensor_ref(), lns_tensor_ref()) -> {ok, lns_tensor_ref()} |
{error, binary()}.
lns_mul(A, B) ->
viva_tensor_zig:lns_mul(A, B).
-file("src/viva_tensor/core/ffi.gleam", 1279).
?DOC(false).
-spec lns_mul_corrected(lns_tensor_ref(), lns_tensor_ref()) -> {ok,
lns_tensor_ref()} |
{error, binary()}.
lns_mul_corrected(A, B) ->
viva_tensor_zig:lns_mul_corrected(A, B).
-file("src/viva_tensor/core/ffi.gleam", 1287).
?DOC(false).
-spec lns_div(lns_tensor_ref(), lns_tensor_ref()) -> {ok, lns_tensor_ref()} |
{error, binary()}.
lns_div(A, B) ->
viva_tensor_zig:lns_div(A, B).
-file("src/viva_tensor/core/ffi.gleam", 1295).
?DOC(false).
-spec lns_sqrt(lns_tensor_ref()) -> {ok, lns_tensor_ref()} | {error, binary()}.
lns_sqrt(A) ->
viva_tensor_zig:lns_sqrt(A).
-file("src/viva_tensor/core/ffi.gleam", 1300).
?DOC(false).
-spec lns_rsqrt(lns_tensor_ref()) -> {ok, lns_tensor_ref()} | {error, binary()}.
lns_rsqrt(A) ->
viva_tensor_zig:lns_rsqrt(A).
-file("src/viva_tensor/core/ffi.gleam", 1343).
?DOC(false).
-spec horde_create(integer(), integer()) -> {ok, horde_ref()} |
{error, binary()}.
horde_create(Entity_count, Dims) ->
viva_tensor_zig:horde_create(Entity_count, Dims).
-file("src/viva_tensor/core/ffi.gleam", 1348).
?DOC(false).
-spec horde_set_positions(horde_ref(), list(float())) -> {ok, nil} |
{error, binary()}.
horde_set_positions(Horde, Data) ->
viva_tensor_zig:horde_set_positions(Horde, Data).
-file("src/viva_tensor/core/ffi.gleam", 1356).
?DOC(false).
-spec horde_set_velocities(horde_ref(), list(float())) -> {ok, nil} |
{error, binary()}.
horde_set_velocities(Horde, Data) ->
viva_tensor_zig:horde_set_velocities(Horde, Data).
-file("src/viva_tensor/core/ffi.gleam", 1364).
?DOC(false).
-spec horde_integrate(horde_ref(), float()) -> {ok, nil} | {error, binary()}.
horde_integrate(Horde, Dt) ->
viva_tensor_zig:horde_integrate(Horde, Dt).
-file("src/viva_tensor/core/ffi.gleam", 1369).
?DOC(false).
-spec horde_dampen(horde_ref(), float()) -> {ok, nil} | {error, binary()}.
horde_dampen(Horde, Friction) ->
viva_tensor_zig:horde_dampen(Horde, Friction).
-file("src/viva_tensor/core/ffi.gleam", 1374).
?DOC(false).
-spec horde_wrap(horde_ref(), float()) -> {ok, nil} | {error, binary()}.
horde_wrap(Horde, Max_bound) ->
viva_tensor_zig:horde_wrap(Horde, Max_bound).
-file("src/viva_tensor/core/ffi.gleam", 1379).
?DOC(false).
-spec horde_get_positions(horde_ref()) -> {ok, list(float())} |
{error, binary()}.
horde_get_positions(Horde) ->
viva_tensor_zig:horde_get_positions(Horde).
-file("src/viva_tensor/core/ffi.gleam", 1384).
?DOC(false).
-spec horde_get_velocities(horde_ref()) -> {ok, list(float())} |
{error, binary()}.
horde_get_velocities(Horde) ->
viva_tensor_zig:horde_get_velocities(Horde).
-file("src/viva_tensor/core/ffi.gleam", 1389).
?DOC(false).
-spec horde_count(horde_ref()) -> {ok, integer()} | {error, binary()}.
horde_count(Horde) ->
viva_tensor_zig:horde_count(Horde).
-file("src/viva_tensor/core/ffi.gleam", 1394).
?DOC(false).
-spec horde_kinetic_energy(horde_ref()) -> {ok, float()} | {error, binary()}.
horde_kinetic_energy(Horde) ->
viva_tensor_zig:horde_kinetic_energy(Horde).
-file("src/viva_tensor/core/ffi.gleam", 1456).
?DOC(false).
-spec hdc_create(integer()) -> {ok, hdc_vector_ref()} | {error, binary()}.
hdc_create(Dim) ->
viva_tensor_zig:hdc_create(Dim).
-file("src/viva_tensor/core/ffi.gleam", 1461).
?DOC(false).
-spec hdc_random(integer(), integer()) -> {ok, hdc_vector_ref()} |
{error, binary()}.
hdc_random(Dim, Seed) ->
viva_tensor_zig:hdc_random(Dim, Seed).
-file("src/viva_tensor/core/ffi.gleam", 1466).
?DOC(false).
-spec hdc_bind(hdc_vector_ref(), hdc_vector_ref()) -> {ok, hdc_vector_ref()} |
{error, binary()}.
hdc_bind(A, B) ->
viva_tensor_zig:hdc_bind(A, B).
-file("src/viva_tensor/core/ffi.gleam", 1475).
?DOC(false).
-spec hdc_similarity(hdc_vector_ref(), hdc_vector_ref()) -> {ok, float()} |
{error, binary()}.
hdc_similarity(A, B) ->
viva_tensor_zig:hdc_similarity(A, B).
-file("src/viva_tensor/core/ffi.gleam", 1484).
?DOC(false).
-spec hdc_permute(hdc_vector_ref(), integer()) -> {ok, hdc_vector_ref()} |
{error, binary()}.
hdc_permute(Vec, Shift) ->
viva_tensor_zig:hdc_permute(Vec, Shift).
-file("src/viva_tensor/core/ffi.gleam", 1492).
?DOC(false).
-spec hdc_dim(hdc_vector_ref()) -> {ok, integer()} | {error, binary()}.
hdc_dim(Vec) ->
viva_tensor_zig:hdc_dim(Vec).
-file("src/viva_tensor/core/ffi.gleam", 1526).
?DOC(false).
-spec nt_matmul_nf4(
native_tensor_ref(),
list(integer()),
list(float()),
integer(),
integer(),
integer(),
integer()
) -> {ok, native_tensor_ref()} | {error, binary()}.
nt_matmul_nf4(A, B_indices, B_scales, M, N, K, Block_size) ->
viva_tensor_zig:nt_matmul_nf4(A, B_indices, B_scales, M, N, K, Block_size).
-file("src/viva_tensor/core/ffi.gleam", 1557).
?DOC(false).
-spec ct_from_list(list(float()), list(integer())) -> {ok, cuda_tensor_ref()} |
{error, binary()}.
ct_from_list(Data, Shape) ->
viva_tensor_zig:ct_from_list(Data, Shape).
-file("src/viva_tensor/core/ffi.gleam", 1563).
?DOC(false).
-spec ct_to_list(cuda_tensor_ref()) -> {ok, list(float())} | {error, binary()}.
ct_to_list(Ref) ->
viva_tensor_zig:ct_to_list(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1566).
?DOC(false).
-spec ct_shape(cuda_tensor_ref()) -> {ok, list(integer())} | {error, binary()}.
ct_shape(Ref) ->
viva_tensor_zig:ct_shape(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1569).
?DOC(false).
-spec ct_matmul(
cuda_tensor_ref(),
cuda_tensor_ref(),
integer(),
integer(),
integer()
) -> {ok, cuda_tensor_ref()} | {error, binary()}.
ct_matmul(A, B, M, N, K) ->
viva_tensor_zig:ct_matmul(A, B, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1578).
?DOC(false).
-spec ct_matmul_inplace(
cuda_tensor_ref(),
cuda_tensor_ref(),
cuda_tensor_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
ct_matmul_inplace(A, B, Out, M, N, K) ->
viva_tensor_zig:ct_matmul_inplace(A, B, Out, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1588).
?DOC(false).
-spec cuda_sync() -> {ok, nil} | {error, binary()}.
cuda_sync() ->
viva_tensor_zig:cuda_sync().
-file("src/viva_tensor/core/ffi.gleam", 1597).
?DOC(false).
-spec ct16_available() -> boolean().
ct16_available() ->
viva_tensor_zig:ct16_available().
-file("src/viva_tensor/core/ffi.gleam", 1600).
?DOC(false).
-spec ct16_from_list(list(float()), list(integer())) -> {ok,
cuda_tensor16_ref()} |
{error, binary()}.
ct16_from_list(Data, Shape) ->
viva_tensor_zig:ct16_from_list(Data, Shape).
-file("src/viva_tensor/core/ffi.gleam", 1606).
?DOC(false).
-spec ct16_to_list(cuda_tensor16_ref()) -> {ok, list(float())} |
{error, binary()}.
ct16_to_list(Ref) ->
viva_tensor_zig:ct16_to_list(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1609).
?DOC(false).
-spec ct16_shape(cuda_tensor16_ref()) -> {ok, list(integer())} |
{error, binary()}.
ct16_shape(Ref) ->
viva_tensor_zig:ct16_shape(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1612).
?DOC(false).
-spec ct16_matmul(
cuda_tensor16_ref(),
cuda_tensor16_ref(),
integer(),
integer(),
integer()
) -> {ok, cuda_tensor_ref()} | {error, binary()}.
ct16_matmul(A, B, M, N, K) ->
viva_tensor_zig:ct16_matmul(A, B, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1621).
?DOC(false).
-spec ct16_matmul_inplace(
cuda_tensor16_ref(),
cuda_tensor16_ref(),
cuda_tensor16_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
ct16_matmul_inplace(A, B, Out, M, N, K) ->
viva_tensor_zig:ct16_matmul_inplace(A, B, Out, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1631).
?DOC(false).
-spec ct16_matmul_fused_relu(
cuda_tensor16_ref(),
cuda_tensor16_ref(),
cuda_tensor16_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
ct16_matmul_fused_relu(A, B, Out, M, N, K) ->
viva_tensor_zig:ct16_matmul_fused_relu(A, B, Out, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1641).
?DOC(false).
-spec ct16_matmul_fused_gelu(
cuda_tensor16_ref(),
cuda_tensor16_ref(),
cuda_tensor16_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
ct16_matmul_fused_gelu(A, B, Out, M, N, K) ->
viva_tensor_zig:ct16_matmul_fused_gelu(A, B, Out, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1651).
?DOC(false).
-spec ct16_linear_relu(
cuda_tensor16_ref(),
cuda_tensor16_ref(),
cuda_tensor16_ref(),
cuda_tensor16_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
ct16_linear_relu(A, B, Bias, Out, M, N, K) ->
viva_tensor_zig:ct16_linear_relu(A, B, Bias, Out, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1662).
?DOC(false).
-spec ct16_linear_gelu(
cuda_tensor16_ref(),
cuda_tensor16_ref(),
cuda_tensor16_ref(),
cuda_tensor16_ref(),
integer(),
integer(),
integer()
) -> {ok, nil} | {error, binary()}.
ct16_linear_gelu(A, B, Bias, Out, M, N, K) ->
viva_tensor_zig:ct16_linear_gelu(A, B, Bias, Out, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1679).
?DOC(false).
-spec ct_int8_available() -> boolean().
ct_int8_available() ->
viva_tensor_zig:ct_int8_available().
-file("src/viva_tensor/core/ffi.gleam", 1682).
?DOC(false).
-spec ct_int8_from_list(list(float()), list(integer())) -> {ok,
cuda_int8_tensor_ref()} |
{error, binary()}.
ct_int8_from_list(Data, Shape) ->
viva_tensor_zig:ct_int8_from_list(Data, Shape).
-file("src/viva_tensor/core/ffi.gleam", 1688).
?DOC(false).
-spec ct_int8_to_list(cuda_int8_tensor_ref()) -> {ok, list(float())} |
{error, binary()}.
ct_int8_to_list(Ref) ->
viva_tensor_zig:ct_int8_to_list(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1691).
?DOC(false).
-spec ct_int8_shape(cuda_int8_tensor_ref()) -> {ok, list(integer())} |
{error, binary()}.
ct_int8_shape(Ref) ->
viva_tensor_zig:ct_int8_shape(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1694).
?DOC(false).
-spec ct_int8_matmul(
cuda_int8_tensor_ref(),
cuda_int8_tensor_ref(),
integer(),
integer(),
integer()
) -> {ok, cuda_int8_tensor_ref()} | {error, binary()}.
ct_int8_matmul(A, B, M, N, K) ->
viva_tensor_zig:ct_int8_matmul(A, B, M, N, K).
-file("src/viva_tensor/core/ffi.gleam", 1709).
?DOC(false).
-spec sparse_available() -> boolean().
sparse_available() ->
viva_tensor_zig:sparse_available().
-file("src/viva_tensor/core/ffi.gleam", 1712).
?DOC(false).
-spec sparse_from_ct16(cuda_tensor16_ref()) -> {ok, sparse_tensor_ref()} |
{error, binary()}.
sparse_from_ct16(Ref) ->
viva_tensor_zig:sparse_from_ct16(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1715).
?DOC(false).
-spec sparse_shape(sparse_tensor_ref()) -> {ok, list(integer())} |
{error, binary()}.
sparse_shape(Ref) ->
viva_tensor_zig:sparse_shape(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1718).
?DOC(false).
-spec sparse_compression_ratio(sparse_tensor_ref()) -> {ok, float()} |
{error, binary()}.
sparse_compression_ratio(Ref) ->
viva_tensor_zig:sparse_compression_ratio(Ref).
-file("src/viva_tensor/core/ffi.gleam", 1721).
?DOC(false).
-spec sparse_matmul(
sparse_tensor_ref(),
cuda_tensor16_ref(),
integer(),
integer(),
integer()
) -> {ok, cuda_tensor16_ref()} | {error, binary()}.
sparse_matmul(A_sparse, B_dense, M, N, K) ->
viva_tensor_zig:sparse_matmul(A_sparse, B_dense, M, N, K).