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@config.erl
-module(viva_tensor@core@config).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/viva_tensor/core/config.gleam").
-export([conv2d/0, conv2d_new/4, conv2d_same/2, with_stride/2, with_stride_hw/3, with_padding/2, with_padding_hw/3, with_dilation/2, with_groups/2, with_kernel/3, pool/0, pool_new/2, pool_with_size/3, pool_with_stride/2, pool_with_padding/2, nf4/0, nf4_with_block_size/2, nf4_with_double_quant/2, int8/0, int8_with_block_size/2, awq/0, awq_with_block_size/2, awq_with_calibration/2, attention/2, attention_causal/1, attention_with_dropout/2, attention_with_scale/2]).
-export_type([conv2d_config/0, pool_config/0, n_f4_config/0, int8_config/0, a_w_q_config/0, attention_config/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 conv2d_config() :: {conv2d_config,
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer()}.
-type pool_config() :: {pool_config,
integer(),
integer(),
integer(),
integer(),
integer(),
integer()}.
-type n_f4_config() :: {n_f4_config, integer(), boolean()}.
-type int8_config() :: {int8_config, integer(), boolean()}.
-type a_w_q_config() :: {a_w_q_config, integer(), integer(), float()}.
-type attention_config() :: {attention_config,
integer(),
integer(),
float(),
boolean(),
float()}.
-file("src/viva_tensor/core/config.gleam", 91).
?DOC(false).
-spec conv2d() -> conv2d_config().
conv2d() ->
{conv2d_config, 3, 3, 1, 1, 0, 0, 1, 1, 1}.
-file("src/viva_tensor/core/config.gleam", 109).
?DOC(false).
-spec conv2d_new(integer(), integer(), integer(), integer()) -> conv2d_config().
conv2d_new(Kernel_h, Kernel_w, Stride, Padding) ->
{conv2d_config,
Kernel_h,
Kernel_w,
Stride,
Stride,
Padding,
Padding,
1,
1,
1}.
-file("src/viva_tensor/core/config.gleam", 135).
?DOC(false).
-spec conv2d_same(integer(), integer()) -> conv2d_config().
conv2d_same(Kernel_h, Kernel_w) ->
{conv2d_config,
Kernel_h,
Kernel_w,
1,
1,
Kernel_h div 2,
Kernel_w div 2,
1,
1,
1}.
-file("src/viva_tensor/core/config.gleam", 156).
?DOC(false).
-spec with_stride(conv2d_config(), integer()) -> conv2d_config().
with_stride(Config, Stride) ->
{conv2d_config,
erlang:element(2, Config),
erlang:element(3, Config),
Stride,
Stride,
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config)}.
-file("src/viva_tensor/core/config.gleam", 162).
?DOC(false).
-spec with_stride_hw(conv2d_config(), integer(), integer()) -> conv2d_config().
with_stride_hw(Config, Stride_h, Stride_w) ->
{conv2d_config,
erlang:element(2, Config),
erlang:element(3, Config),
Stride_h,
Stride_w,
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config)}.
-file("src/viva_tensor/core/config.gleam", 175).
?DOC(false).
-spec with_padding(conv2d_config(), integer()) -> conv2d_config().
with_padding(Config, Padding) ->
{conv2d_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
Padding,
Padding,
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config)}.
-file("src/viva_tensor/core/config.gleam", 180).
?DOC(false).
-spec with_padding_hw(conv2d_config(), integer(), integer()) -> conv2d_config().
with_padding_hw(Config, Padding_h, Padding_w) ->
{conv2d_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
Padding_h,
Padding_w,
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config)}.
-file("src/viva_tensor/core/config.gleam", 196).
?DOC(false).
-spec with_dilation(conv2d_config(), integer()) -> conv2d_config().
with_dilation(Config, Dilation) ->
{conv2d_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
Dilation,
Dilation,
erlang:element(10, Config)}.
-file("src/viva_tensor/core/config.gleam", 208).
?DOC(false).
-spec with_groups(conv2d_config(), integer()) -> conv2d_config().
with_groups(Config, Groups) ->
{conv2d_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
Groups}.
-file("src/viva_tensor/core/config.gleam", 213).
?DOC(false).
-spec with_kernel(conv2d_config(), integer(), integer()) -> conv2d_config().
with_kernel(Config, Kernel_h, Kernel_w) ->
{conv2d_config,
Kernel_h,
Kernel_w,
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config)}.
-file("src/viva_tensor/core/config.gleam", 259).
?DOC(false).
-spec pool() -> pool_config().
pool() ->
{pool_config, 2, 2, 2, 2, 0, 0}.
-file("src/viva_tensor/core/config.gleam", 271).
?DOC(false).
-spec pool_new(integer(), integer()) -> pool_config().
pool_new(Pool_size, Stride) ->
{pool_config, Pool_size, Pool_size, Stride, Stride, 0, 0}.
-file("src/viva_tensor/core/config.gleam", 283).
?DOC(false).
-spec pool_with_size(pool_config(), integer(), integer()) -> pool_config().
pool_with_size(Config, Pool_h, Pool_w) ->
{pool_config,
Pool_h,
Pool_w,
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config)}.
-file("src/viva_tensor/core/config.gleam", 292).
?DOC(false).
-spec pool_with_stride(pool_config(), integer()) -> pool_config().
pool_with_stride(Config, Stride) ->
{pool_config,
erlang:element(2, Config),
erlang:element(3, Config),
Stride,
Stride,
erlang:element(6, Config),
erlang:element(7, Config)}.
-file("src/viva_tensor/core/config.gleam", 297).
?DOC(false).
-spec pool_with_padding(pool_config(), integer()) -> pool_config().
pool_with_padding(Config, Padding) ->
{pool_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
Padding,
Padding}.
-file("src/viva_tensor/core/config.gleam", 337).
?DOC(false).
-spec nf4() -> n_f4_config().
nf4() ->
{n_f4_config, 64, true}.
-file("src/viva_tensor/core/config.gleam", 347).
?DOC(false).
-spec nf4_with_block_size(n_f4_config(), integer()) -> n_f4_config().
nf4_with_block_size(Config, Block_size) ->
{n_f4_config, Block_size, erlang:element(3, Config)}.
-file("src/viva_tensor/core/config.gleam", 353).
?DOC(false).
-spec nf4_with_double_quant(n_f4_config(), boolean()) -> n_f4_config().
nf4_with_double_quant(Config, Enabled) ->
{n_f4_config, erlang:element(2, Config), Enabled}.
-file("src/viva_tensor/core/config.gleam", 381).
?DOC(false).
-spec int8() -> int8_config().
int8() ->
{int8_config, 0, true}.
-file("src/viva_tensor/core/config.gleam", 387).
?DOC(false).
-spec int8_with_block_size(int8_config(), integer()) -> int8_config().
int8_with_block_size(Config, Block_size) ->
{int8_config, Block_size, erlang:element(3, Config)}.
-file("src/viva_tensor/core/config.gleam", 419).
?DOC(false).
-spec awq() -> a_w_q_config().
awq() ->
{a_w_q_config, 64, 128, 1.0}.
-file("src/viva_tensor/core/config.gleam", 424).
?DOC(false).
-spec awq_with_block_size(a_w_q_config(), integer()) -> a_w_q_config().
awq_with_block_size(Config, Block_size) ->
{a_w_q_config,
Block_size,
erlang:element(3, Config),
erlang:element(4, Config)}.
-file("src/viva_tensor/core/config.gleam", 429).
?DOC(false).
-spec awq_with_calibration(a_w_q_config(), integer()) -> a_w_q_config().
awq_with_calibration(Config, N) ->
{a_w_q_config, erlang:element(2, Config), N, erlang:element(4, Config)}.
-file("src/viva_tensor/core/config.gleam", 542).
?DOC(false).
-spec positive_int_to_float(integer(), float()) -> float().
positive_int_to_float(I, Acc) ->
case I of
0 ->
Acc;
_ ->
positive_int_to_float(I - 1, Acc + 1.0)
end.
-file("src/viva_tensor/core/config.gleam", 535).
?DOC(false).
-spec int_to_float(integer()) -> float().
int_to_float(I) ->
case I >= 0 of
true ->
positive_int_to_float(I, +0.0);
false ->
+0.0 - positive_int_to_float(0 - I, +0.0)
end.
-file("src/viva_tensor/core/config.gleam", 479).
?DOC(false).
-spec attention(integer(), integer()) -> attention_config().
attention(Num_heads, Head_dim) ->
Scale = case math:sqrt(int_to_float(Head_dim)) of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> 1.0 / Gleam@denominator
end,
{attention_config, Num_heads, Head_dim, +0.0, false, Scale}.
-file("src/viva_tensor/core/config.gleam", 497).
?DOC(false).
-spec attention_causal(attention_config()) -> attention_config().
attention_causal(Config) ->
{attention_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
true,
erlang:element(6, Config)}.
-file("src/viva_tensor/core/config.gleam", 506).
?DOC(false).
-spec attention_with_dropout(attention_config(), float()) -> attention_config().
attention_with_dropout(Config, Dropout) ->
{attention_config,
erlang:element(2, Config),
erlang:element(3, Config),
Dropout,
erlang:element(5, Config),
erlang:element(6, Config)}.
-file("src/viva_tensor/core/config.gleam", 520).
?DOC(false).
-spec attention_with_scale(attention_config(), float()) -> attention_config().
attention_with_scale(Config, Scale) ->
{attention_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
Scale}.