-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).