-module(sparklinekit@internal@scale). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/sparklinekit/internal/scale.gleam"). -export([round_to_int/1, clamp_int/3, clamp_finite/1, min_max/1, unit/3]). -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). -file("src/sparklinekit/internal/scale.gleam", 88). ?DOC(false). -spec round_to_int(float()) -> integer(). round_to_int(Value) -> erlang:round(Value). -file("src/sparklinekit/internal/scale.gleam", 93). ?DOC(false). -spec clamp_int(integer(), integer(), integer()) -> integer(). clamp_int(Value, Lo, Hi) -> case Value < Lo of true -> Lo; false -> case Value > Hi of true -> Hi; false -> Value end end. -file("src/sparklinekit/internal/scale.gleam", 25). ?DOC(false). -spec clamp_finite(float()) -> float(). clamp_finite(Value) -> case Value > 1.0e300 of true -> 1.0e300; false -> case Value < (+0.0 - 1.0e300) of true -> +0.0 - 1.0e300; false -> Value end end. -file("src/sparklinekit/internal/scale.gleam", 42). ?DOC(false). -spec min_max(list(float())) -> {float(), float()}. min_max(Values) -> case Values of [] -> {+0.0, +0.0}; [Head | Rest] -> Safe_head = clamp_finite(Head), gleam@list:fold( Rest, {Safe_head, Safe_head}, fun(Acc, Value) -> Safe_value = clamp_finite(Value), {Lo, Hi} = Acc, New_lo = case Safe_value < Lo of true -> Safe_value; false -> Lo end, New_hi = case Safe_value > Hi of true -> Safe_value; false -> Hi end, {New_lo, New_hi} end ) end. -file("src/sparklinekit/internal/scale.gleam", 72). ?DOC(false). -spec unit(float(), float(), float()) -> float(). unit(Value, Min, Max) -> Safe_value = clamp_finite(Value), Safe_min = clamp_finite(Min), Safe_max = clamp_finite(Max), Span = Safe_max - Safe_min, case Span =< +0.0 of true -> 0.5; false -> case Span of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> (Safe_value - Safe_min) / Gleam@denominator end end.