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