-module(gleam_synapses@model@encoding@discrete_attribute). -compile(no_auto_import). -export([updated/2, encode/2, decode/2, serialized/1, deserialized/1, json_encoded/1, json_decoder/0]). -spec updated( gleam_synapses@model@encoding@serialization:attribute(), gleam@map:map_(binary(), binary()) ) -> gleam_synapses@model@encoding@serialization:attribute(). updated(Discrete_attribute, Datapoint) -> {discrete_attribute, Key, Values} = Discrete_attribute, {ok, V} = gleam@map:get(Datapoint, Key), Updated_values = case gleam_zlists:has_member(Values, V) of true -> Values; false -> gleam_zlists:cons(Values, V) end, {discrete_attribute, Key, Updated_values}. -spec encode(gleam_synapses@model@encoding@serialization:attribute(), binary()) -> gleam_zlists@interop:z_list(float()). encode(Discrete_attribute, Value) -> {discrete_attribute, _, Values} = Discrete_attribute, gleam_zlists:map(Values, fun(X) -> case X =:= Value of true -> 1.0; false -> 0.0 end end). -spec decode( gleam_synapses@model@encoding@serialization:attribute(), gleam_zlists@interop:z_list(float()) ) -> binary(). decode(Discrete_attribute, Encoded_values) -> {discrete_attribute, _, Values} = Discrete_attribute, {ok, {Hd, Tl}} = gleam_zlists:uncons( gleam_zlists:zip(Values, Encoded_values) ), gleam@pair:first( gleam_zlists:reduce(Tl, Hd, fun(X, Acc) -> {_, X_float_val} = X, {_, Acc_float_val} = Acc, case X_float_val > Acc_float_val of true -> X; false -> Acc end end) ). -spec serialized(gleam_synapses@model@encoding@serialization:attribute()) -> gleam_synapses@model@encoding@serialization:attribute_serialized(). serialized(Discrete_attribute) -> {discrete_attribute, Key, Values} = Discrete_attribute, {discrete_attribute_serialized, Key, gleam_zlists:to_list(Values)}. -spec deserialized( gleam_synapses@model@encoding@serialization:attribute_serialized() ) -> gleam_synapses@model@encoding@serialization:attribute(). deserialized(Discrete_attribute_serialized) -> {discrete_attribute_serialized, Key, Values} = Discrete_attribute_serialized, {discrete_attribute, Key, gleam_zlists:of_list(Values)}. -spec json_encoded( gleam_synapses@model@encoding@serialization:attribute_serialized() ) -> gleam@jsone:json_value(). json_encoded(Discrete_attribute_serialized) -> {discrete_attribute_serialized, Key, Values} = Discrete_attribute_serialized, gleam@jsone:object( [{<<"key"/utf8>>, gleam@jsone:string(Key)}, {<<"values"/utf8>>, gleam@jsone:array(Values, fun gleam@jsone:string/1)}] ). -spec json_decoder() -> decode:decoder(gleam_synapses@model@encoding@serialization:attribute_serialized()). json_decoder() -> decode:map2( fun(A, B) -> {discrete_attribute_serialized, A, B} end, decode:field(<<"key"/utf8>>, decode:string()), decode:field(<<"values"/utf8>>, decode:list(decode:string())) ).