From 0b24d9e974b0651b1ce0e5a7071666f65a7fdcca Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Tue, 23 Jul 2013 11:41:55 -0400 Subject: [PATCH] metrics: add POSet#print_metrics Signed-off-by: Jean Privat --- src/counter.nit | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/counter.nit b/src/counter.nit index a9621fe..67b79fc 100644 --- a/src/counter.nit +++ b/src/counter.nit @@ -15,6 +15,8 @@ # Simple numerical statistical analysis and presentation module counter +import poset + # A counter counts occurrences of things # Use this instead of a HashMap[E, Int] class Counter[E: Object] @@ -98,6 +100,48 @@ private class CounterSorter[E: Object] redef fun compare(a,b) do return self.counter.map[a] <=> self.counter.map[b] end +redef class POSet[E] + private fun show_counter(c: Counter[Int]) + do + var list = c.sort + (new ComparableSorter[Int]).sort(list) + for e in list do + print " {e} -> {c[e]} times ({div(c[e]*100, c.total)}%)" + end + end + + # Display exhaustive metrics about the poset + fun print_metrics + do + var nb_greaters = new Counter[E] + var nb_direct_greaters = new Counter[E] + var nb_smallers = new Counter[E] + var nb_direct_smallers = new Counter[E] + var nb_direct_edges = 0 + var nb_edges = 0 + for n in self do + var ne = self[n] + nb_edges += ne.greaters.length + nb_direct_edges += ne.direct_greaters.length + nb_greaters[n] = ne.greaters.length + nb_direct_greaters[n] = ne.direct_greaters.length + nb_smallers[n] = ne.smallers.length + nb_direct_smallers[n] = ne.direct_smallers.length + end + print "Number of nodes: {self.length}" + print "Number of edges: {nb_edges} ({div(nb_edges,self.length)} per node)" + print "Number of direct edges: {nb_direct_edges} ({div(nb_direct_edges,self.length)} per node)" + print "Distribution of greaters" + nb_greaters.print_summary + print "Distribution of direct greaters" + nb_direct_greaters.print_summary + print "Distribution of smallers" + nb_smallers.print_summary + print "Distribution of direct smallers" + nb_direct_smallers.print_summary + end +end + # Helper function to display n/d and handle division by 0 fun div(n: Int, d: Int): String do -- 1.7.9.5