nitc :: FloatMetric :: defaultinit
# A Metric that collects float datas
#
# Used sor summarization
class FloatMetric
super Metric
redef type VAL: Float
# `FloatMetric` uses a Map to store values in intern.
protected var values_cache = new HashMap[ELM, VAL]
redef fun values do return values_cache
redef fun clear do values_cache.clear
redef fun sum do
var sum = 0.0
for v in values.values do
if v.is_nan then continue
sum += v
end
return sum
end
redef fun max do
assert not values.is_empty
var max: nullable Float = null
var elem: nullable ELM = null
for e, v in values do
if max == null or v > max then
max = v
elem = e
end
end
return elem.as(not null)
end
redef fun min do
assert not values.is_empty
var min: nullable Float = null
var elem: nullable ELM = null
for e, v in values do
if min == null or v < min then
min = v
elem = e
end
end
return elem.as(not null)
end
redef fun avg do
if values.is_empty then return 0.0
return sum / values.length.to_f
end
redef fun std_dev do
var sum = 0.0
for value in values.values do
if value.is_nan then continue
sum += (value - avg).pow(2.to_f)
end
return (sum / values.length.to_f).sqrt
end
redef fun above_threshold do
var above = new HashSet[ELM]
var threshold = threshold
for element, value in values do
if value > threshold then above.add(element)
end
return above
end
redef fun to_console(indent, colors) do
super
if colors then
print "{"\t" * indent} sum: {sum}".light_gray
else
print "{"\t" * indent} sum: {sum}"
end
end
end
src/metrics/metrics_base.nit:287,1--369,3