Current section
Files
Jump to
Current section
Files
gen/src/gleam_synapses@model@encoding@continuous_attribute.erl
-module(gleam_synapses@model@encoding@continuous_attribute).
-compile(no_auto_import).
-export([parse/1, updated/2, encode/2, decode/2, serialized/1, deserialized/1, json_encoded/1, json_decoder/0]).
-spec parse(binary()) -> float().
parse(S) ->
Trimmed = gleam@string:trim(S),
case {gleam@float:parse(Trimmed), gleam@int:parse(Trimmed)} of
{{ok, X}, _} ->
X;
{_, {ok, X@1}} ->
gleam@int:to_float(X@1)
end.
-spec updated(
gleam_synapses@model@encoding@serialization:attribute(),
gleam@map:map_(binary(), binary())
) -> gleam_synapses@model@encoding@serialization:attribute().
updated(Continuous_attribute, Datapoint) ->
{continuous_attribute, Key, Min, Max} = Continuous_attribute,
{ok, V} = gleam@result:map(gleam@map:get(Datapoint, Key), fun parse/1),
{continuous_attribute,
Key,
gleam@float:min(V, Min),
gleam@float:max(V, Max)}.
-spec encode(gleam_synapses@model@encoding@serialization:attribute(), binary()) -> gleam_zlists@interop:z_list(float()).
encode(Continuous_attribute, Value) ->
{continuous_attribute, _, Min, Max} = Continuous_attribute,
gleam_zlists:singleton(case Min =:= Max of
true ->
0.5;
false ->
Nomin = parse(Value) - Min,
Denomin = Max - Min,
case Denomin of
0.0 -> 0.0;
Gleam@denominator -> Nomin / Gleam@denominator
end
end).
-spec decode(
gleam_synapses@model@encoding@serialization:attribute(),
gleam_zlists@interop:z_list(float())
) -> binary().
decode(Continuous_attribute, Encoded_values) ->
{continuous_attribute, _, Min, Max} = Continuous_attribute,
gleam@float:to_string(case Min =:= Max of
true ->
Min;
false ->
{ok, V} = gleam_zlists:head(Encoded_values),
Factor = Max - Min,
(V * Factor) + Min
end).
-spec serialized(gleam_synapses@model@encoding@serialization:attribute()) -> gleam_synapses@model@encoding@serialization:attribute_serialized().
serialized(Continuous_attribute) ->
{continuous_attribute, Key, Min, Max} = Continuous_attribute,
{continuous_attribute_serialized, Key, Min, Max}.
-spec deserialized(
gleam_synapses@model@encoding@serialization:attribute_serialized()
) -> gleam_synapses@model@encoding@serialization:attribute().
deserialized(Continuous_attribute_serialized) ->
{continuous_attribute_serialized, Key, Min, Max} = Continuous_attribute_serialized,
{continuous_attribute, Key, Min, Max}.
-spec json_encoded(
gleam_synapses@model@encoding@serialization:attribute_serialized()
) -> gleam_synapses@model@edited_jsone:json_value().
json_encoded(Continuous_attribute_serialized) ->
{continuous_attribute_serialized, Key, Min, Max} = Continuous_attribute_serialized,
gleam_synapses@model@edited_jsone:object(
[{<<"key"/utf8>>, gleam_synapses@model@edited_jsone:string(Key)},
{<<"min"/utf8>>, gleam_synapses@model@edited_jsone:float(Min)},
{<<"max"/utf8>>, gleam_synapses@model@edited_jsone:float(Max)}]
).
-spec json_decoder() -> decode:decoder(gleam_synapses@model@encoding@serialization:attribute_serialized()).
json_decoder() ->
decode:map3(
fun(A, B, C) -> {continuous_attribute_serialized, A, B, C} end,
decode:field(<<"key"/utf8>>, decode:string()),
decode:field(<<"min"/utf8>>, decode:float()),
decode:field(<<"max"/utf8>>, decode:float())
).