diff options
Diffstat (limited to 'Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/statistics/StatisticSections2CSV.xtend')
-rw-r--r-- | Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/statistics/StatisticSections2CSV.xtend | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/statistics/StatisticSections2CSV.xtend b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/statistics/StatisticSections2CSV.xtend new file mode 100644 index 00000000..442de6d9 --- /dev/null +++ b/Framework/hu.bme.mit.inf.dslreasoner.logic.model/src/hu/bme/mit/inf/dslreasoner/logic/model/statistics/StatisticSections2CSV.xtend | |||
@@ -0,0 +1,89 @@ | |||
1 | package hu.bme.mit.inf.dslreasoner.logic.model.statistics | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.IntStatisticEntry | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.RealStatisticEntry | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logicresult.Statistics | ||
6 | import java.util.ArrayList | ||
7 | import java.util.HashMap | ||
8 | import java.util.LinkedList | ||
9 | import java.util.List | ||
10 | import java.util.Map | ||
11 | |||
12 | class StatisticsData { | ||
13 | public var List<Pair<String,String>> inputConfiguration | ||
14 | public var List<Pair<String,String>> outputMetrics | ||
15 | public var Statistics solverStatistics | ||
16 | } | ||
17 | |||
18 | class StatisticSections2CSV { | ||
19 | static val separator = ';' | ||
20 | static val empty = "" | ||
21 | |||
22 | private def getValue(Map<String, String> map,String key) { | ||
23 | if(map.containsKey(key)) return map.get(key) | ||
24 | else return empty | ||
25 | } | ||
26 | private def addKey(List<String> list, String newValue) { | ||
27 | if(! list.contains(newValue)) list+=newValue | ||
28 | } | ||
29 | |||
30 | public def CharSequence transformStatisticDatas2CSV( | ||
31 | List<StatisticsData> statistics) | ||
32 | { | ||
33 | val inputConfigurationColumns = new LinkedList | ||
34 | val inputConfigurationValues = new ArrayList(statistics.length) | ||
35 | val solverStatisticColumns = new LinkedList | ||
36 | val solverStatisticValues = new ArrayList(statistics.length) | ||
37 | val outputMetricColumns = new LinkedList | ||
38 | val outputMetricValues = new ArrayList(statistics.length) | ||
39 | |||
40 | statistics.map[inputConfiguration].indexColumnsForPairs(inputConfigurationColumns, inputConfigurationValues) | ||
41 | statistics.map[it.solverStatistics].indexColumnsForEntries(solverStatisticColumns, solverStatisticValues) | ||
42 | statistics.map[outputMetrics].indexColumnsForPairs(outputMetricColumns,outputMetricValues) | ||
43 | |||
44 | return ''' | ||
45 | ID« // Header | ||
46 | IF inputConfigurationColumns.length>0»«separator»«FOR name : inputConfigurationColumns SEPARATOR separator»«name»«ENDFOR»«ENDIF»« | ||
47 | separator»Transformation_Time«separator»Solver_Time«separator»Solver_Memory« | ||
48 | IF solverStatisticColumns.length>0»«separator»«ENDIF»« | ||
49 | FOR name:solverStatisticColumns SEPARATOR separator»«name»«ENDFOR»« | ||
50 | IF outputMetricColumns.length>0»«separator»«ENDIF»« | ||
51 | FOR name:outputMetricColumns SEPARATOR separator»«name»«ENDFOR» | ||
52 | « // Table | ||
53 | FOR index : 0..<statistics.size» | ||
54 | «index+1 /*ID*/»« | ||
55 | IF inputConfigurationColumns.size>0»«separator»«ENDIF»« | ||
56 | FOR name : inputConfigurationColumns SEPARATOR separator»«inputConfigurationValues.get(index).getValue(name)»«ENDFOR»« | ||
57 | separator»«statistics.get(index).solverStatistics.transformationTime»« | ||
58 | separator»«statistics.get(index).solverStatistics.solverTime»« | ||
59 | separator»«statistics.get(index).solverStatistics.solverMemory»« | ||
60 | IF solverStatisticColumns.size>0»«separator»«ENDIF»« | ||
61 | FOR name:solverStatisticColumns SEPARATOR separator»«solverStatisticValues.get(index).getValue(name)»«ENDFOR»« | ||
62 | IF outputMetricColumns.size>0»«separator»«ENDIF»« | ||
63 | FOR name:outputMetricColumns SEPARATOR separator»«outputMetricValues.get(index).getValue(name)»«ENDFOR» | ||
64 | «ENDFOR»''' | ||
65 | } | ||
66 | |||
67 | def private indexColumnsForPairs(List<List<Pair<String, String>>> datas, List<String> columns, List<Map<String, String>> values) { | ||
68 | for(inputConfiguration : datas) { | ||
69 | val map = new HashMap | ||
70 | for(entry : inputConfiguration) { | ||
71 | columns.addKey(entry.key) | ||
72 | map.put(entry.key,entry.value) | ||
73 | } | ||
74 | values+=map | ||
75 | } | ||
76 | } | ||
77 | def private indexColumnsForEntries(List<Statistics> datas, List<String> columns, List<Map<String, String>> values) { | ||
78 | for(inputConfiguration : datas) { | ||
79 | val map = new HashMap | ||
80 | for(entry : inputConfiguration.entries) { | ||
81 | columns.addKey(entry.name) | ||
82 | map.put(entry.name,entry.readValue) | ||
83 | } | ||
84 | values+=map | ||
85 | } | ||
86 | } | ||
87 | private def dispatch String readValue(IntStatisticEntry e) { return e.value.toString } | ||
88 | private def dispatch String readValue(RealStatisticEntry e){ return e.value.toString } | ||
89 | } \ No newline at end of file | ||