From 4c34e22d23197ca6b03827a24e9339f88f82df5f Mon Sep 17 00:00:00 2001 From: ArenBabikian Date: Wed, 28 Aug 2019 05:56:34 -0400 Subject: VAMPIRE: integrate local Vampire executeable #32 --- .../metrics/calculator/app/.Domain.java._trace | Bin 0 -> 164 bytes .../metrics/calculator/app/.Domain.xtendbin | Bin 0 -> 1885 bytes .../metrics/calculator/app/.Main.java._trace | Bin 0 -> 6539 bytes .../metrics/calculator/app/.Main.xtendbin | Bin 0 -> 8247 bytes .../app/.MetricDistanceGroup.java._trace | Bin 0 -> 2918 bytes .../app/.PartialInterpretationMetric.java._trace | Bin 0 -> 2152 bytes .../app/.PartialInterpretationMetric.xtendbin | Bin 0 -> 6658 bytes ...PartialInterpretationMetricDistance.java._trace | Bin 0 -> 12333 bytes .../.PartialInterpretationMetricDistance.xtendbin | Bin 0 -> 12384 bytes .../realistic/metrics/calculator/app/Domain.java | 10 + .../realistic/metrics/calculator/app/Main.java | 99 ++++++++++ .../calculator/app/MetricDistanceGroup.java | 49 +++++ .../app/PartialInterpretationMetric.java | 54 ++++++ .../app/PartialInterpretationMetricDistance.java | 180 ++++++++++++++++++ .../calculator/distance/.CostDistance.java._trace | Bin 0 -> 1591 bytes .../calculator/distance/.CostDistance.xtendbin | Bin 0 -> 4755 bytes .../distance/.EuclideanDistance.java._trace | Bin 0 -> 6400 bytes .../distance/.EuclideanDistance.xtendbin | Bin 0 -> 6373 bytes .../calculator/distance/.JSDistance.java._trace | Bin 0 -> 10274 bytes .../calculator/distance/.JSDistance.xtendbin | Bin 0 -> 7080 bytes .../calculator/distance/.KSDistance.java._trace | Bin 0 -> 5179 bytes .../calculator/distance/.KSDistance.xtendbin | Bin 0 -> 7053 bytes .../calculator/distance/.StateData.java._trace | Bin 0 -> 1071 bytes .../metrics/calculator/distance/CostDistance.java | 26 +++ .../calculator/distance/EuclideanDistance.java | 91 ++++++++++ .../metrics/calculator/distance/JSDistance.java | 136 ++++++++++++++ .../metrics/calculator/distance/KSDistance.java | 93 ++++++++++ .../metrics/calculator/distance/StateData.java | 38 ++++ .../metrics/calculator/graph/.EMFGraph.java._trace | Bin 0 -> 10303 bytes .../metrics/calculator/graph/.EMFGraph.xtendbin | Bin 0 -> 7659 bytes .../metrics/calculator/graph/.Graph.java._trace | Bin 0 -> 5380 bytes .../metrics/calculator/graph/.Graph.xtendbin | Bin 0 -> 5215 bytes .../calculator/graph/.GraphStatistic.java._trace | Bin 0 -> 14346 bytes .../calculator/graph/.GraphStatistic.xtendbin | Bin 0 -> 8393 bytes .../graph/.PartialInterpretationGraph.java._trace | Bin 0 -> 10923 bytes .../graph/.PartialInterpretationGraph.xtendbin | Bin 0 -> 8678 bytes .../metrics/calculator/graph/EMFGraph.java | 140 ++++++++++++++ .../realistic/metrics/calculator/graph/Graph.java | 96 ++++++++++ .../metrics/calculator/graph/GraphStatistic.java | 201 +++++++++++++++++++++ .../graph/PartialInterpretationGraph.java | 162 +++++++++++++++++ .../calculator/io/.CsvFileWriter.java._trace | Bin 0 -> 4046 bytes .../metrics/calculator/io/.CsvFileWriter.xtendbin | Bin 0 -> 4364 bytes .../metrics/calculator/io/.DataName.java._trace | Bin 0 -> 395 bytes .../metrics/calculator/io/.GraphReader.java._trace | Bin 0 -> 8762 bytes .../metrics/calculator/io/.GraphReader.xtendbin | Bin 0 -> 7536 bytes .../calculator/io/.RepMetricsReader.java._trace | Bin 0 -> 2611 bytes .../calculator/io/.RepMetricsReader.xtendbin | Bin 0 -> 7213 bytes .../metrics/calculator/io/CsvFileWriter.java | 75 ++++++++ .../realistic/metrics/calculator/io/DataName.java | 12 ++ .../metrics/calculator/io/GraphReader.java | 138 ++++++++++++++ .../metrics/calculator/io/RepMetricsReader.java | 49 +++++ .../calculator/metrics/.EdgeTypeMetric.java._trace | Bin 0 -> 3341 bytes .../calculator/metrics/.EdgeTypeMetric.xtendbin | Bin 0 -> 3968 bytes .../metrics/calculator/metrics/.Metric.java._trace | Bin 0 -> 381 bytes .../metrics/calculator/metrics/.Metric.xtendbin | Bin 0 -> 2472 bytes .../metrics/.MetricSampleGroup.java._trace | Bin 0 -> 756 bytes .../calculator/metrics/.MetricSampleGroup.xtendbin | Bin 0 -> 2822 bytes ...iplexParticipationCoefficientMetric.java._trace | Bin 0 -> 3277 bytes ...ultiplexParticipationCoefficientMetric.xtendbin | Bin 0 -> 6315 bytes .../metrics/.NodeActivityMetric.java._trace | Bin 0 -> 1066 bytes .../metrics/.NodeActivityMetric.xtendbin | Bin 0 -> 4941 bytes .../calculator/metrics/.NodeTypeMetric.java._trace | Bin 0 -> 2658 bytes .../calculator/metrics/.NodeTypeMetric.xtendbin | Bin 0 -> 3676 bytes .../metrics/.OutDegreeMetric.java._trace | Bin 0 -> 1063 bytes .../calculator/metrics/.OutDegreeMetric.xtendbin | Bin 0 -> 4940 bytes .../.TypedClusteringCoefficientMetric.java._trace | Bin 0 -> 4325 bytes .../.TypedClusteringCoefficientMetric.xtendbin | Bin 0 -> 6380 bytes .../calculator/metrics/.TypedOutDegree.java._trace | Bin 0 -> 4081 bytes .../calculator/metrics/.TypedOutDegree.xtendbin | Bin 0 -> 4458 bytes .../metrics/calculator/metrics/EdgeTypeMetric.java | 65 +++++++ .../metrics/calculator/metrics/Metric.java | 10 + .../calculator/metrics/MetricSampleGroup.java | 19 ++ .../MultiplexParticipationCoefficientMetric.java | 59 ++++++ .../calculator/metrics/NodeActivityMetric.java | 31 ++++ .../metrics/calculator/metrics/NodeTypeMetric.java | 54 ++++++ .../calculator/metrics/OutDegreeMetric.java | 31 ++++ .../metrics/TypedClusteringCoefficientMetric.java | 74 ++++++++ .../metrics/calculator/metrics/TypedOutDegree.java | 73 ++++++++ .../calculator/predictor/.LinearModel.java._trace | Bin 0 -> 4597 bytes .../calculator/predictor/.LinearModel.xtendbin | Bin 0 -> 6307 bytes .../metrics/calculator/predictor/LinearModel.java | 90 +++++++++ .../validation/.ConstraintCollection.java._trace | Bin 0 -> 1968 bytes .../validation/.ConstraintCollection.xtendbin | Bin 0 -> 6940 bytes .../validation/.ViolationCheck.java._trace | Bin 0 -> 607 bytes .../calculator/validation/.ViolationCheck.xtendbin | Bin 0 -> 5275 bytes .../validation/ConstraintCollection.java | 79 ++++++++ .../calculator/validation/ViolationCheck.java | 34 ++++ 87 files changed, 2268 insertions(+) create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.MetricDistanceGroup.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Domain.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/MetricDistanceGroup.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.StateData.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/StateData.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.DataName.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/CsvFileWriter.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/DataName.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MultiplexParticipationCoefficientMetric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeActivityMetric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/OutDegreeMetric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/LinearModel.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.java._trace create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.xtendbin create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ConstraintCollection.java create mode 100644 Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.java (limited to 'Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen') diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.java._trace new file mode 100644 index 00000000..8ab43fde Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.xtendbin new file mode 100644 index 00000000..f502d04e Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Domain.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.java._trace new file mode 100644 index 00000000..7096f9db Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.xtendbin new file mode 100644 index 00000000..2362ebad Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.Main.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.MetricDistanceGroup.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.MetricDistanceGroup.java._trace new file mode 100644 index 00000000..f6505088 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.MetricDistanceGroup.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.java._trace new file mode 100644 index 00000000..8708c793 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.xtendbin new file mode 100644 index 00000000..d9e88699 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.java._trace new file mode 100644 index 00000000..3e381b10 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.xtendbin new file mode 100644 index 00000000..5071eb03 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/.PartialInterpretationMetricDistance.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Domain.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Domain.java new file mode 100644 index 00000000..9b626001 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Domain.java @@ -0,0 +1,10 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app; + +@SuppressWarnings("all") +public enum Domain { + Yakindumm, + + Ecore, + + Github; +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.java new file mode 100644 index 00000000..dbb3bdd1 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/Main.java @@ -0,0 +1,99 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation.ViolationCheck; +import com.google.common.base.Objects; +import com.google.common.collect.Iterators; +import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.impl.YakindummPackageImpl; +import java.io.File; +import java.util.ArrayList; +import java.util.Iterator; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.impl.EcorePackageImpl; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.InputOutput; +import org.eclipse.xtext.xbase.lib.IteratorExtensions; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; + +@SuppressWarnings("all") +public class Main { + public static class RWInformation { + public String inputFolder; + + public String outputFolder; + + public int numRuns; + + public RWInformation(final String inputFolder, final String outputFolder, final int numRuns) { + this.inputFolder = inputFolder; + this.outputFolder = outputFolder; + this.numRuns = numRuns; + } + } + + private static Domain d = Domain.Yakindumm; + + private final static String suffix = ".xmi"; + + private final static String OUTPUT_FOLDER = "Inputs/measurement2/yakindu/Alloy/"; + + private final static String INPUT_FOLDER = "outputs/measurement2/yakindu/Alloy/"; + + private final static int NUM_RUNS = 1; + + public static void main(final String[] args) { + throw new Error("Unresolved compilation problems:" + + "\nThe method or field ReteEngine is undefined" + + "\ngetClass cannot be resolved"); + } + + public static String calculateAllModels(final String inputFolder, final String outputFolder, final int numRuns, final GraphReader reader) { + String _xblockexpression = null; + { + new File(outputFolder).mkdir(); + for (int i = 1; (i <= numRuns); i++) { + { + final ArrayList models = new ArrayList(); + models.addAll(reader.readModels(((inputFolder + "run") + Integer.valueOf(i)))); + for (final EMFGraph model : models) { + String _name = model.getName(); + String _plus = (outputFolder + _name); + String _plus_1 = (_plus + "_run_"); + String _plus_2 = (_plus_1 + Integer.valueOf(i)); + String _plus_3 = (_plus_2 + ".csv"); + Main.calculateAndOutputMetrics(model, YakindummPackageImpl.eNAME, _plus_3); + } + } + } + _xblockexpression = InputOutput.println(("output results Ended for: " + outputFolder)); + } + return _xblockexpression; + } + + public static void calculateAndOutputMetrics(final EMFGraph model, final String metaModel, final String fileName) { + model.setMetaModel(metaModel); + boolean _equals = Objects.equal(Main.d, Domain.Ecore); + if (_equals) { + final Function1 _function = (EReference it) -> { + return Boolean.valueOf((((((it.getName().equals("eGenericType") || it.getName().equals("eGenericSuperTypes")) || it.getName().equals("eFactoryInstance")) || + it.getName().equals("eGenericExceptions")) || it.getName().equals("references")) || it.getName().equals("contents"))); + }; + Iterator refsToRemove = IteratorExtensions.filter(Iterators.filter(EcorePackageImpl.eINSTANCE.eAllContents(), EReference.class), _function); + final Procedure1 _function_1 = (EReference it) -> { + model.removeReference(it); + }; + IteratorExtensions.forEach(refsToRemove, _function_1); + } + ArrayList> outputs = model.evaluateAllMetrics(); + int violations = ViolationCheck.calculateViolationCounts(model.getRoot(), Main.d); + InputOutput.println(Integer.valueOf(violations)); + String _plus = (Integer.valueOf(violations) + ""); + ArrayList violationsOutput = CollectionLiterals.newArrayList("violations", _plus); + outputs.add(violationsOutput); + CsvFileWriter.write(outputs, fileName); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/MetricDistanceGroup.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/MetricDistanceGroup.java new file mode 100644 index 00000000..bb0e3ffb --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/MetricDistanceGroup.java @@ -0,0 +1,49 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app; + +import java.util.HashMap; + +@SuppressWarnings("all") +public class MetricDistanceGroup { + private double mpcDistance; + + private double naDistance; + + private double outDegreeDistance; + + private double nodeTypeDistance; + + protected HashMap nodeTypeInfo; + + public MetricDistanceGroup(final double mpcDistance, final double naDistance, final double outDegreeDistance, final double nodeTypeDistance) { + this.mpcDistance = mpcDistance; + this.naDistance = naDistance; + this.outDegreeDistance = outDegreeDistance; + this.nodeTypeDistance = nodeTypeDistance; + } + + public MetricDistanceGroup(final double mpcDistance, final double naDistance, final double outDegreeDistance) { + this.mpcDistance = mpcDistance; + this.naDistance = naDistance; + this.outDegreeDistance = outDegreeDistance; + } + + public double getNodeTypeDistance() { + return this.nodeTypeDistance; + } + + public double getMPCDistance() { + return this.mpcDistance; + } + + public double getNADistance() { + return this.naDistance; + } + + public double getOutDegreeDistance() { + return this.outDegreeDistance; + } + + public double getNodeTypePercentage(final String typeName) { + return (this.nodeTypeInfo.getOrDefault(typeName, Double.valueOf(0.0))).doubleValue(); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.java new file mode 100644 index 00000000..d1d75d0d --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetric.java @@ -0,0 +1,54 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric; +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("all") +public class PartialInterpretationMetric { + private static KSDistance ks; + + private static JSDistance js; + + public static void initPaths() { + new File("debug/metric/").mkdir(); + new File("debug/metric/trajectories/").mkdir(); + } + + public static void calculateMetric(final PartialInterpretation partial, final String path, final String currentStateId, final Integer counter) { + final ArrayList metrics = new ArrayList(); + OutDegreeMetric _outDegreeMetric = new OutDegreeMetric(); + metrics.add(_outDegreeMetric); + NodeActivityMetric _nodeActivityMetric = new NodeActivityMetric(); + metrics.add(_nodeActivityMetric); + MultiplexParticipationCoefficientMetric _multiplexParticipationCoefficientMetric = new MultiplexParticipationCoefficientMetric(); + metrics.add(_multiplexParticipationCoefficientMetric); + new File(path).mkdir(); + final String filename = (((((path + "/state_") + currentStateId) + "-") + counter) + ".csv"); + final PartialInterpretationGraph metricCalculator = new PartialInterpretationGraph(partial, metrics, currentStateId); + CsvFileWriter.write(metricCalculator.evaluateAllMetrics(), filename); + } + + public static void outputTrajectories(final PartialInterpretation empty, final /* List */Object solutions) { + throw new Error("Unresolved compilation problems:" + + "\nshortestTrajectory cannot be resolved" + + "\nmodel cannot be resolved" + + "\ndoNextTransformation cannot be resolved" + + "\nstateCoder cannot be resolved" + + "\ncreateStateCode cannot be resolved" + + "\ntoString cannot be resolved" + + "\ngetModel cannot be resolved" + + "\nstateCoder cannot be resolved" + + "\ncreateStateCode cannot be resolved" + + "\ntoString cannot be resolved"); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.java new file mode 100644 index 00000000..c98cbeea --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/app/PartialInterpretationMetricDistance.java @@ -0,0 +1,180 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.MetricDistanceGroup; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.EuclideanDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.JSDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.PartialInterpretationGraph; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor.LinearModel; +import com.google.common.base.Objects; +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.eclipse.xtend.lib.annotations.AccessorType; +import org.eclipse.xtend.lib.annotations.Accessors; +import org.eclipse.xtext.xbase.lib.InputOutput; +import org.eclipse.xtext.xbase.lib.Pure; + +@SuppressWarnings("all") +public class PartialInterpretationMetricDistance { + private KSDistance ks; + + private JSDistance js; + + private EuclideanDistance ed; + + private Map stateAndHistory; + + private /* OLSMultipleLinearRegression */Object regression; + + private List samples; + + private MetricSampleGroup g; + + @Accessors(AccessorType.PUBLIC_GETTER) + private LinearModel linearModel; + + public PartialInterpretationMetricDistance(final Domain d) { + throw new Error("Unresolved compilation problems:" + + "\nOLSMultipleLinearRegression cannot be resolved." + + "\nThe field PartialInterpretationMetricDistance.regression refers to the missing type OLSMultipleLinearRegression" + + "\nThe field PartialInterpretationMetricDistance.regression refers to the missing type OLSMultipleLinearRegression" + + "\nnoIntercept cannot be resolved"); + } + + public MetricDistanceGroup calculateMetricDistanceKS(final PartialInterpretation partial) { + final ArrayList metrics = new ArrayList(); + OutDegreeMetric _outDegreeMetric = new OutDegreeMetric(); + metrics.add(_outDegreeMetric); + NodeActivityMetric _nodeActivityMetric = new NodeActivityMetric(); + metrics.add(_nodeActivityMetric); + MultiplexParticipationCoefficientMetric _multiplexParticipationCoefficientMetric = new MultiplexParticipationCoefficientMetric(); + metrics.add(_multiplexParticipationCoefficientMetric); + NodeTypeMetric _nodeTypeMetric = new NodeTypeMetric(); + metrics.add(_nodeTypeMetric); + final PartialInterpretationGraph metricCalculator = new PartialInterpretationGraph(partial, metrics, null); + MetricSampleGroup metricSamples = metricCalculator.evaluateAllMetricsToSamples(); + double mpc = this.ks.mpcDistance(metricSamples.mpcSamples); + double na = this.ks.naDistance(metricSamples.naSamples); + double outDegree = this.ks.outDegreeDistance(metricSamples.outDegreeSamples); + double nodeType = this.ks.nodeTypeDistance(metricSamples.nodeTypeSamples); + MetricDistanceGroup distance = new MetricDistanceGroup(mpc, na, outDegree, nodeType); + distance.nodeTypeInfo = metricSamples.nodeTypeSamples; + return distance; + } + + public MetricDistanceGroup calculateMetricEuclidean(final PartialInterpretation partial) { + final ArrayList metrics = new ArrayList(); + OutDegreeMetric _outDegreeMetric = new OutDegreeMetric(); + metrics.add(_outDegreeMetric); + NodeActivityMetric _nodeActivityMetric = new NodeActivityMetric(); + metrics.add(_nodeActivityMetric); + MultiplexParticipationCoefficientMetric _multiplexParticipationCoefficientMetric = new MultiplexParticipationCoefficientMetric(); + metrics.add(_multiplexParticipationCoefficientMetric); + final PartialInterpretationGraph metricCalculator = new PartialInterpretationGraph(partial, metrics, null); + MetricSampleGroup metricSamples = metricCalculator.evaluateAllMetricsToSamples(); + double mpc = this.ed.mpcDistance(metricSamples.mpcSamples); + double na = this.ed.naDistance(metricSamples.naSamples); + double outDegree = this.ed.outDegreeDistance(metricSamples.outDegreeSamples); + return new MetricDistanceGroup(mpc, na, outDegree); + } + + public MetricDistanceGroup calculateMetricDistance(final PartialInterpretation partial) { + final ArrayList metrics = new ArrayList(); + OutDegreeMetric _outDegreeMetric = new OutDegreeMetric(); + metrics.add(_outDegreeMetric); + NodeActivityMetric _nodeActivityMetric = new NodeActivityMetric(); + metrics.add(_nodeActivityMetric); + MultiplexParticipationCoefficientMetric _multiplexParticipationCoefficientMetric = new MultiplexParticipationCoefficientMetric(); + metrics.add(_multiplexParticipationCoefficientMetric); + final PartialInterpretationGraph metricCalculator = new PartialInterpretationGraph(partial, metrics, null); + MetricSampleGroup metricSamples = metricCalculator.evaluateAllMetricsToSamples(); + double mpc = this.js.mpcDistance(metricSamples.mpcSamples); + double na = this.js.naDistance(metricSamples.naSamples); + double outDegree = this.js.outDegreeDistance(metricSamples.outDegreeSamples); + return new MetricDistanceGroup(mpc, na, outDegree); + } + + public String resetRegression(final Object state) { + String _xblockexpression = null; + { + this.samples.clear(); + boolean _containsKey = this.stateAndHistory.containsKey(state); + if (_containsKey) { + StateData data = this.stateAndHistory.get(state); + Object curState = state; + this.samples.add(data); + while ((this.stateAndHistory.containsKey(data.getLastState()) && (!Objects.equal(data.getLastState(), curState)))) { + { + curState = data.getLastState(); + data = this.stateAndHistory.get(data.getLastState()); + this.samples.add(data); + } + } + int _size = this.samples.size(); + boolean _equals = (_size == 0); + if (_equals) { + InputOutput.println(("state: " + state)); + Object _lastState = data.getLastState(); + String _plus = ("last state: " + _lastState); + InputOutput.println(_plus); + } + } + int _size_1 = this.samples.size(); + String _plus_1 = ("trajectory sample size:" + Integer.valueOf(_size_1)); + _xblockexpression = InputOutput.println(_plus_1); + } + return _xblockexpression; + } + + public boolean feedData(final Object state, final double[] features, final double value, final Object lastState) { + boolean _xblockexpression = false; + { + StateData data = new StateData(features, value, lastState); + this.stateAndHistory.put(state, data); + _xblockexpression = this.samples.add(data); + } + return _xblockexpression; + } + + public Object getPredictionForNextDataSample(final double[] features, final double value, final double[] featuresToPredict) { + throw new Error("Unresolved compilation problems:" + + "\nThe field PartialInterpretationMetricDistance.regression refers to the missing type OLSMultipleLinearRegression" + + "\nThe method predict(double[]) from the type PartialInterpretationMetricDistance refers to the missing type Object" + + "\nnewSampleData cannot be resolved"); + } + + private Object predict(final double[] featuresToPredict) { + throw new Error("Unresolved compilation problems:" + + "\nThe field PartialInterpretationMetricDistance.regression refers to the missing type OLSMultipleLinearRegression" + + "\nestimateRegressionParameters cannot be resolved" + + "\nget cannot be resolved" + + "\n+= cannot be resolved" + + "\nget cannot be resolved" + + "\n* cannot be resolved"); + } + + public double[] calculateFeature(final int step, final int violations) { + double[] features = new double[2]; + features[0] = 1; + double _sqrt = Math.sqrt(step); + double _plus = (_sqrt + 30); + features[0] = _plus; + features[1] = (1.0 / (step + 30)); + return features; + } + + @Pure + public LinearModel getLinearModel() { + return this.linearModel; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.java._trace new file mode 100644 index 00000000..b7325732 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.xtendbin new file mode 100644 index 00000000..1b30d47a Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.CostDistance.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.java._trace new file mode 100644 index 00000000..fa849d42 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.xtendbin new file mode 100644 index 00000000..e7be4117 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.EuclideanDistance.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.java._trace new file mode 100644 index 00000000..66b1b229 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.xtendbin new file mode 100644 index 00000000..7a08f8e5 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.JSDistance.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.java._trace new file mode 100644 index 00000000..c7256d9a Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.xtendbin new file mode 100644 index 00000000..309066cc Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.KSDistance.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.StateData.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.StateData.java._trace new file mode 100644 index 00000000..d4cde029 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/.StateData.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.java new file mode 100644 index 00000000..cb366f64 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/CostDistance.java @@ -0,0 +1,26 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance; + +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.List; + +@SuppressWarnings("all") +public abstract class CostDistance { + public abstract double naDistance(final List samples); + + public abstract double mpcDistance(final List samples); + + public abstract double outDegreeDistance(final List samples); + + protected HashMap pmfFromSamples(final double[] samples, final DecimalFormat formatter) { + int length = samples.length; + HashMap pmfMap = new HashMap(); + for (final double sample : samples) { + String _format = formatter.format(sample); + Double _orDefault = pmfMap.getOrDefault(formatter.format(sample), Double.valueOf(0.0)); + double _plus = ((_orDefault).doubleValue() + (1.0 / length)); + pmfMap.put(_format, Double.valueOf(_plus)); + } + return pmfMap; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.java new file mode 100644 index 00000000..6a80d750 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/EuclideanDistance.java @@ -0,0 +1,91 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.CostDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; +import com.google.common.collect.Sets; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.ToDoubleFunction; +import org.eclipse.xtext.xbase.lib.Conversions; +import org.eclipse.xtext.xbase.lib.DoubleExtensions; + +@SuppressWarnings("all") +public class EuclideanDistance extends CostDistance { + private MetricSampleGroup g; + + private HashMap mpcPMF; + + private HashMap naPMF; + + private HashMap outDegreePMF; + + private DecimalFormat formatter; + + public EuclideanDistance(final MetricSampleGroup g) { + this.g = g; + List mpcSamples = g.mpcSamples; + final ToDoubleFunction _function = (Double it) -> { + return (it).doubleValue(); + }; + double[] naSamples = g.naSamples.stream().mapToDouble(_function).toArray(); + final ToDoubleFunction _function_1 = (Double it) -> { + return (it).doubleValue(); + }; + double[] outDegreeSamples = g.outDegreeSamples.stream().mapToDouble(_function_1).toArray(); + DecimalFormat _decimalFormat = new DecimalFormat("#0.00000"); + this.formatter = _decimalFormat; + final List _converted_mpcSamples = (List)mpcSamples; + this.mpcPMF = this.pmfFromSamples(((double[])Conversions.unwrapArray(_converted_mpcSamples, double.class)), this.formatter); + this.naPMF = this.pmfFromSamples(naSamples, this.formatter); + this.outDegreePMF = this.pmfFromSamples(outDegreeSamples, this.formatter); + } + + @Override + public double naDistance(final List samples) { + HashMap pmfMap = this.pmfFromSamples(((double[])Conversions.unwrapArray(samples, double.class)), this.formatter); + return this.euclideanDistance(pmfMap, this.naPMF); + } + + @Override + public double mpcDistance(final List samples) { + HashMap pmfMap = this.pmfFromSamples(((double[])Conversions.unwrapArray(samples, double.class)), this.formatter); + return this.euclideanDistance(pmfMap, this.mpcPMF); + } + + @Override + public double outDegreeDistance(final List samples) { + HashMap pmfMap = this.pmfFromSamples(((double[])Conversions.unwrapArray(samples, double.class)), this.formatter); + return this.euclideanDistance(pmfMap, this.outDegreePMF); + } + + private double euclideanDistance(final HashMap pmf1, final HashMap pmf2) { + Sets.SetView keys = Sets.union(pmf1.keySet(), pmf2.keySet()); + ArrayList pmfList1 = this.pmfMapToList(pmf1, keys); + ArrayList pmfList2 = this.pmfMapToList(pmf2, keys); + double distance = 0.0; + for (int i = 0; (i < pmfList1.size()); i++) { + double _distance = distance; + Double _get = pmfList1.get(i); + Double _get_1 = pmfList2.get(i); + double _plus = DoubleExtensions.operator_plus(_get, _get_1); + double _pow = Math.pow(_plus, 2); + distance = (_distance + _pow); + } + return Math.sqrt(distance); + } + + private ArrayList pmfMapToList(final Map map, final Set keys) { + ArrayList list = new ArrayList(); + for (final String key : keys) { + { + Double value = map.getOrDefault(key, Double.valueOf(0.0)); + list.add(value); + } + } + return list; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.java new file mode 100644 index 00000000..d3e7e3ad --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/JSDistance.java @@ -0,0 +1,136 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.CostDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; +import com.google.common.collect.Sets; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Set; +import java.util.function.ToDoubleFunction; +import org.eclipse.xtext.xbase.lib.Conversions; +import org.eclipse.xtext.xbase.lib.DoubleExtensions; + +@SuppressWarnings("all") +public class JSDistance extends CostDistance { + private HashMap mpcPMF; + + private HashMap naPMF; + + private HashMap outDegreePMF; + + private HashMap nodeTypesPMF; + + private DecimalFormat formatter; + + public JSDistance(final MetricSampleGroup g) { + List mpcSamples = g.mpcSamples; + final ToDoubleFunction _function = (Double it) -> { + return (it).doubleValue(); + }; + double[] naSamples = g.naSamples.stream().mapToDouble(_function).toArray(); + final ToDoubleFunction _function_1 = (Double it) -> { + return (it).doubleValue(); + }; + double[] outDegreeSamples = g.outDegreeSamples.stream().mapToDouble(_function_1).toArray(); + DecimalFormat _decimalFormat = new DecimalFormat("#0.00000"); + this.formatter = _decimalFormat; + final List _converted_mpcSamples = (List)mpcSamples; + this.mpcPMF = this.pmfFromSamples(((double[])Conversions.unwrapArray(_converted_mpcSamples, double.class)), this.formatter); + this.naPMF = this.pmfFromSamples(naSamples, this.formatter); + this.outDegreePMF = this.pmfFromSamples(outDegreeSamples, this.formatter); + this.nodeTypesPMF = g.nodeTypeSamples; + } + + private HashMap combinePMF(final HashMap pmf1, final HashMap pmf2) { + HashMap pmfMap = new HashMap(); + Sets.SetView union = Sets.union(pmf1.keySet(), pmf2.keySet()); + for (final String key : union) { + { + Double _orDefault = pmf1.getOrDefault(key, Double.valueOf(0.0)); + Double _orDefault_1 = pmf2.getOrDefault(key, Double.valueOf(0.0)); + double _plus = DoubleExtensions.operator_plus(_orDefault, _orDefault_1); + double value = ((1.0 / 2) * _plus); + pmfMap.put(key, Double.valueOf(value)); + } + } + return pmfMap; + } + + private double jsDivergence(final HashMap p, final HashMap q) { + final HashMap m = this.combinePMF(q, p); + double _klDivergence = this.klDivergence(p, m); + double _multiply = ((1.0 / 2) * _klDivergence); + double _klDivergence_1 = this.klDivergence(q, m); + double _multiply_1 = ((1.0 / 2) * _klDivergence_1); + double distance = (_multiply + _multiply_1); + return distance; + } + + public double klDivergence(final HashMap p, final HashMap q) { + double distance = 0.0; + Set _keySet = q.keySet(); + for (final String key : _keySet) { + boolean _containsKey = p.containsKey(key); + if (_containsKey) { + double _distance = distance; + Double _get = p.get(key); + Double _get_1 = q.get(key); + Double _get_2 = p.get(key); + double _divide = DoubleExtensions.operator_divide(_get_1, _get_2); + double _log = Math.log(_divide); + double _multiply = ((_get).doubleValue() * _log); + double _log_1 = Math.log(2); + double _divide_1 = (_multiply / _log_1); + distance = (_distance - _divide_1); + } + } + return distance; + } + + @Override + public double mpcDistance(final List samples) { + final ToDoubleFunction _function = (Double it) -> { + return (it).doubleValue(); + }; + HashMap map = this.pmfFromSamples(samples.stream().mapToDouble(_function).toArray(), this.formatter); + int _size = map.size(); + boolean _lessThan = (_size < 2); + if (_lessThan) { + return 1; + } + return this.jsDivergence(map, this.mpcPMF); + } + + @Override + public double naDistance(final List samples) { + final ToDoubleFunction _function = (Double it) -> { + return (it).doubleValue(); + }; + HashMap map = this.pmfFromSamples(samples.stream().mapToDouble(_function).toArray(), this.formatter); + int _size = map.size(); + boolean _lessThan = (_size < 2); + if (_lessThan) { + return 1; + } + return this.jsDivergence(map, this.naPMF); + } + + @Override + public double outDegreeDistance(final List samples) { + final ToDoubleFunction _function = (Double it) -> { + return (it).doubleValue(); + }; + HashMap map = this.pmfFromSamples(samples.stream().mapToDouble(_function).toArray(), this.formatter); + int _size = map.size(); + boolean _lessThan = (_size < 2); + if (_lessThan) { + return 1; + } + return this.jsDivergence(map, this.outDegreePMF); + } + + public double nodeTypeDistance(final HashMap samples) { + return this.klDivergence(samples, this.nodeTypesPMF); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.java new file mode 100644 index 00000000..638ff332 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/KSDistance.java @@ -0,0 +1,93 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.CostDistance; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; + +@SuppressWarnings("all") +public class KSDistance extends CostDistance { + private static Object ksTester /* Skipped initializer because of errors */; + + private MetricSampleGroup g; + + public KSDistance(final MetricSampleGroup g) { + this.g = g; + } + + @Override + public double mpcDistance(final List samples) { + throw new Error("Unresolved compilation problems:" + + "\nThe field KSDistance.ksTester refers to the missing type Object" + + "\nkolmogorovSmirnovStatistic cannot be resolved"); + } + + @Override + public double naDistance(final List samples) { + throw new Error("Unresolved compilation problems:" + + "\nThe field KSDistance.ksTester refers to the missing type Object" + + "\nkolmogorovSmirnovStatistic cannot be resolved"); + } + + @Override + public double outDegreeDistance(final List samples) { + throw new Error("Unresolved compilation problems:" + + "\nThe field KSDistance.ksTester refers to the missing type Object" + + "\nkolmogorovSmirnovStatistic cannot be resolved"); + } + + public double typedOutDegreeDistance(final HashMap> map) { + throw new Error("Unresolved compilation problems:" + + "\nThe field KSDistance.ksTester refers to the missing type Object" + + "\nkolmogorovSmirnovStatistic cannot be resolved"); + } + + public double nodeTypeDistance(final HashMap samples) { + HashMap typesDistMap = this.g.nodeTypeSamples; + ArrayList sourceDist = CollectionLiterals.newArrayList(); + ArrayList instanceDist = CollectionLiterals.newArrayList(); + Set _keySet = typesDistMap.keySet(); + for (final String key : _keySet) { + { + sourceDist.add(typesDistMap.get(key)); + instanceDist.add(samples.getOrDefault(key, Double.valueOf(0.0))); + } + } + return this.ks_distance_two_dist(sourceDist, instanceDist); + } + + public double edgeTypeDistance(final HashMap samples) { + HashMap typesDistMap = this.g.edgeTypeSamples; + ArrayList sourceDist = CollectionLiterals.newArrayList(); + ArrayList instanceDist = CollectionLiterals.newArrayList(); + Set _keySet = typesDistMap.keySet(); + for (final String key : _keySet) { + { + sourceDist.add(typesDistMap.get(key)); + instanceDist.add(samples.getOrDefault(key, Double.valueOf(0.0))); + } + } + return this.ks_distance_two_dist(sourceDist, instanceDist); + } + + public double ks_distance_two_dist(final List dist1, final List dist2) { + double ksStatistics = 0.0; + double sum1 = 0.0; + double sum2 = 0.0; + for (int i = 0; (i < dist1.size()); i++) { + { + double _sum1 = sum1; + Double _get = dist1.get(i); + sum1 = (_sum1 + (_get).doubleValue()); + double _sum2 = sum2; + Double _get_1 = dist2.get(i); + sum2 = (_sum2 + (_get_1).doubleValue()); + ksStatistics = Math.max(ksStatistics, Math.abs((sum1 - sum2))); + } + } + return ksStatistics; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/StateData.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/StateData.java new file mode 100644 index 00000000..29a310f4 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/distance/StateData.java @@ -0,0 +1,38 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance; + +import org.eclipse.xtend.lib.annotations.AccessorType; +import org.eclipse.xtend.lib.annotations.Accessors; +import org.eclipse.xtext.xbase.lib.Pure; + +@SuppressWarnings("all") +public class StateData { + @Accessors(AccessorType.PUBLIC_GETTER) + private double[] features; + + @Accessors(AccessorType.PUBLIC_GETTER) + private double value; + + @Accessors(AccessorType.PUBLIC_GETTER) + private Object lastState; + + public StateData(final double[] features, final double value, final Object lastState) { + this.features = features; + this.value = value; + this.lastState = lastState; + } + + @Pure + public double[] getFeatures() { + return this.features; + } + + @Pure + public double getValue() { + return this.value; + } + + @Pure + public Object getLastState() { + return this.lastState; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.java._trace new file mode 100644 index 00000000..6e2ea420 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.xtendbin new file mode 100644 index 00000000..e949bb11 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.EMFGraph.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.java._trace new file mode 100644 index 00000000..e1d021fd Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.xtendbin new file mode 100644 index 00000000..547fdc38 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.Graph.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.java._trace new file mode 100644 index 00000000..5928ed9d Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.xtendbin new file mode 100644 index 00000000..e9269f16 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.GraphStatistic.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.java._trace new file mode 100644 index 00000000..f19eb46c Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.xtendbin new file mode 100644 index 00000000..c634ef10 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/.PartialInterpretationGraph.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.java new file mode 100644 index 00000000..8a9aa8d3 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/EMFGraph.java @@ -0,0 +1,140 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.Graph; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.function.Consumer; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.xtend.lib.annotations.AccessorType; +import org.eclipse.xtend.lib.annotations.Accessors; +import org.eclipse.xtext.xbase.lib.IteratorExtensions; +import org.eclipse.xtext.xbase.lib.Pure; + +@SuppressWarnings("all") +public class EMFGraph extends Graph { + @Accessors(AccessorType.PUBLIC_GETTER) + private EObject root; + + public void init(final EObject root, final List metrics, final String name, final List referenceTypes) { + final List otherContents = IteratorExtensions.toList(root.eAllContents()); + this.root = root; + otherContents.add(root); + this.init(otherContents, metrics, name, referenceTypes); + } + + /** + * init the graph with all nodes and reference types in the meta model + * @param objects: objects in the instance model (exclude root) + * @param metrics: metrics to be evaluated + * @param name: name of the instance model + * @param ReferenceTypes: reference types defined in the meta model + */ + public void init(final List objects, final List metrics, final String name, final List referenceTypes) { + final Consumer _function = (EObject it) -> { + HashSet types = new HashSet(); + types.add(it.eClass().getName()); + this.statistic.addNodeWithAllTypes(it, types); + }; + objects.forEach(_function); + final Consumer _function_1 = (EReference it) -> { + boolean _isDerived = it.isDerived(); + boolean _not = (!_isDerived); + if (_not) { + this.statistic.addEdgeType(it.getName()); + } + }; + referenceTypes.forEach(_function_1); + final Consumer _function_2 = (EObject source) -> { + final Consumer _function_3 = (EReference r) -> { + boolean _isMany = r.isMany(); + if (_isMany) { + final Consumer _function_4 = (EObject target) -> { + this.addEdge(source, target, r); + }; + this.getNeighbours(source, r).forEach(_function_4); + } else { + Object _eGet = source.eGet(r); + final EObject target = ((EObject) _eGet); + this.addEdge(source, target, r); + } + }; + source.eClass().getEAllReferences().forEach(_function_3); + }; + objects.forEach(_function_2); + this.metrics = metrics; + this.name = name; + } + + public void removeReference(final EReference r) { + boolean _containsEdgeType = this.statistic.containsEdgeType(r.getName()); + if (_containsEdgeType) { + this.statistic.removeReference(r.getName(), r.isContainment()); + } + } + + /** + * Set basic information for the output + */ + @Override + public void setBasicInformation(final ArrayList> output) { + final ArrayList metaInfo = new ArrayList(); + metaInfo.add(Graph.META_MODEL_HEADER); + metaInfo.add(this.metaModel); + final ArrayList edgeInfo = new ArrayList(); + edgeInfo.add(Graph.NUM_EDGE_TYPE_HEADER); + int _size = this.statistic.getAllTypes().size(); + String _plus = (Integer.valueOf(_size) + ""); + edgeInfo.add(_plus); + final ArrayList nodeInfo = new ArrayList(); + nodeInfo.add(Graph.NUM_NODE_HEADER); + int _size_1 = this.statistic.getAllNodes().size(); + String _plus_1 = (Integer.valueOf(_size_1) + ""); + nodeInfo.add(_plus_1); + final ArrayList stateInfo = new ArrayList(); + stateInfo.add(Graph.STATE_ID_HEADER); + stateInfo.add(this.name); + output.add(metaInfo); + output.add(edgeInfo); + output.add(nodeInfo); + output.add(stateInfo); + } + + public EList getNeighbours(final EObject o, final EReference r) { + Object _eGet = o.eGet(r, true); + return ((EList) _eGet); + } + + public void addEdge(final EObject source, final EObject target, final EReference r) { + if ((((target != null) && (r != null)) && (!r.isDerived()))) { + this.statistic.addEdge(source, target, r.getName()); + } + } + + @Override + public GraphStatistic getStatistic() { + return this.statistic; + } + + @Override + public String getName() { + return this.name; + } + + public void setMetaModel(final String model) { + this.metaModel = model; + } + + public String getMetaModel() { + return this.metaModel; + } + + @Pure + public EObject getRoot() { + return this.root; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.java new file mode 100644 index 00000000..f9923a63 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/Graph.java @@ -0,0 +1,96 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import org.eclipse.xtext.xbase.lib.Conversions; + +@SuppressWarnings("all") +public abstract class Graph { + protected final static String META_MODEL_HEADER = "Meta Mode"; + + protected final static String NUM_NODE_HEADER = "Number Of Nodes"; + + protected final static String NUM_EDGE_TYPE_HEADER = "Number of Edge types"; + + protected final static String STATE_ID_HEADER = "State Id"; + + protected final GraphStatistic statistic = new GraphStatistic(); + + protected List metrics; + + protected String name = ""; + + protected String metaModel = ""; + + /** + * evaluate all metrics for this model + * return the result as a two dimentional list + */ + public ArrayList> evaluateAllMetrics() { + final ArrayList> result = new ArrayList>(); + this.setBasicInformation(result); + for (final Metric metric : this.metrics) { + { + final String[][] datas = metric.evaluate(this.statistic); + for (final String[] row : datas) { + ArrayList _arrayList = new ArrayList((Collection)Conversions.doWrapArray(row)); + result.add(_arrayList); + } + } + } + return result; + } + + public MetricSampleGroup evaluateAllMetricsToSamples() { + MetricSampleGroup sample = new MetricSampleGroup(); + for (final Metric metric : this.metrics) { + if ((metric instanceof MultiplexParticipationCoefficientMetric)) { + Object _evaluateSamples = ((MultiplexParticipationCoefficientMetric)metric).evaluateSamples(this.statistic); + sample.mpcSamples = ((ArrayList) _evaluateSamples); + } else { + if ((metric instanceof NodeActivityMetric)) { + Object _evaluateSamples_1 = ((NodeActivityMetric)metric).evaluateSamples(this.statistic); + sample.naSamples = ((ArrayList) _evaluateSamples_1); + } else { + if ((metric instanceof OutDegreeMetric)) { + Object _evaluateSamples_2 = ((OutDegreeMetric)metric).evaluateSamples(this.statistic); + sample.outDegreeSamples = ((ArrayList) _evaluateSamples_2); + } else { + if ((metric instanceof TypedOutDegree)) { + Object _evaluateSamples_3 = ((TypedOutDegree)metric).evaluateSamples(this.statistic); + sample.typedOutDegreeSamples = ((HashMap>) _evaluateSamples_3); + } else { + if ((metric instanceof NodeTypeMetric)) { + Object _evaluateSamples_4 = ((NodeTypeMetric)metric).evaluateSamples(this.statistic); + sample.nodeTypeSamples = ((HashMap) _evaluateSamples_4); + } else { + if ((metric instanceof EdgeTypeMetric)) { + Object _evaluateSamples_5 = ((EdgeTypeMetric)metric).evaluateSamples(this.statistic); + sample.edgeTypeSamples = ((HashMap) _evaluateSamples_5); + } + } + } + } + } + } + } + return sample; + } + + public abstract void setBasicInformation(final ArrayList> result); + + public abstract GraphStatistic getStatistic(); + + public abstract String getName(); +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.java new file mode 100644 index 00000000..7bd1d899 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/GraphStatistic.java @@ -0,0 +1,201 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; + +@SuppressWarnings("all") +public class GraphStatistic { + private final HashMap> incomingEdges = new HashMap>(); + + private final HashMap> outgoingEdges = new HashMap>(); + + private final HashSet edgeTypes = new HashSet(); + + private final HashMap> nodeToType = new HashMap>(); + + /** + * Add an edge type to to the graph + * @param type: type to add + */ + public void addEdgeType(final String type) { + boolean _contains = this.edgeTypes.contains(type); + if (_contains) { + return; + } + this.edgeTypes.add(type); + this.incomingEdges.put(type, ArrayListMultimap.create()); + this.outgoingEdges.put(type, ArrayListMultimap.create()); + } + + /** + * Add a node to the graph with one type in its type hierarchy + * @param node: node to add + */ + public void addNodeWithType(final EObject n, final String Type) { + HashSet _hashSet = new HashSet(); + Set types = this.nodeToType.getOrDefault(n, _hashSet); + types.add(Type); + this.nodeToType.put(n, types); + } + + public boolean containsNode(final EObject o) { + return this.nodeToType.containsKey(o); + } + + public Set getTypesForNode(final EObject o) { + HashSet _hashSet = new HashSet(); + return this.nodeToType.getOrDefault(o, _hashSet); + } + + public void overwriteCurrentType(final EObject o, final String type) { + HashSet _hashSet = new HashSet(); + Set typeSet = this.nodeToType.getOrDefault(o, _hashSet); + typeSet.clear(); + typeSet.add(type); + this.nodeToType.put(o, typeSet); + } + + /** + * Add a node to the graph with all types in its type hierarchy + */ + public void addNodeWithAllTypes(final EObject n, final Set types) { + this.nodeToType.put(n, types); + } + + /** + * Add an edge to the graph + * @param source: source node + * @param target: target node + * @param type: type of the reference + */ + public void addEdge(final EObject source, final EObject target, final String type) { + this.outgoingEdges.get(type).put(source, target); + this.incomingEdges.get(type).put(target, source); + } + + /** + * check if this graph contains a specific edge type + */ + public boolean containsEdgeType(final String typeName) { + if ((this.outgoingEdges.containsKey(typeName) && this.incomingEdges.containsKey(typeName))) { + return true; + } + return false; + } + + /** + * remove references from the statistics, potentially remove the nodes associated with it + * @Param name: name of the reference + * @Param isContainment: if true then the corresponding nodes on the incoming side will also be removed + */ + public void removeReference(final String name, final boolean isContainment) { + boolean _contains = this.edgeTypes.contains(name); + boolean _not = (!_contains); + if (_not) { + return; + } + this.edgeTypes.remove(name); + Multimap incomingSet = this.incomingEdges.remove(name); + this.outgoingEdges.remove(name); + if ((!isContainment)) { + return; + } + final Set nodesToRemove = incomingSet.keySet(); + final Consumer _function = (EObject it) -> { + this.nodeToType.remove(it); + }; + nodesToRemove.forEach(_function); + final Procedure1> _function_1 = (Multimap refMap) -> { + final Consumer _function_2 = (EObject it) -> { + refMap.removeAll(it); + }; + nodesToRemove.forEach(_function_2); + Collection values = refMap.values(); + values.removeAll(nodesToRemove); + return; + }; + final Procedure1> removeForMultimap = _function_1; + IterableExtensions.>forEach(this.incomingEdges.values(), removeForMultimap); + IterableExtensions.>forEach(this.outgoingEdges.values(), removeForMultimap); + } + + /** + * calculate the out degree for an object + */ + public int outDegree(final EObject o) { + int count = 0; + for (final String type : this.edgeTypes) { + int _count = count; + int _size = this.outgoingEdges.get(type).get(o).size(); + count = (_count + _size); + } + return count; + } + + /** + * calculate the in degree of an object + */ + public int inDegree(final EObject o) { + int count = 0; + for (final String type : this.edgeTypes) { + int _count = count; + int _size = this.incomingEdges.get(type).get(o).size(); + count = (_count + _size); + } + return count; + } + + /** + * calculate the dimentional degree of a node + */ + public int dimentionalDegree(final EObject o, final String type) { + int _size = this.incomingEdges.get(type).get(o).size(); + int _size_1 = this.outgoingEdges.get(type).get(o).size(); + return (_size + _size_1); + } + + /** + * calculate the number of edge types for a given node. + */ + public int numOfEdgeTypes(final EObject o) { + int count = 0; + for (final String type : this.edgeTypes) { + int _dimentionalDegree = this.dimentionalDegree(o, type); + boolean _greaterThan = (_dimentionalDegree > 0); + if (_greaterThan) { + count++; + } + } + return count; + } + + public List getAllTypes() { + return IterableExtensions.toList(this.edgeTypes); + } + + public Map> getNodeToTypesMap() { + return this.nodeToType; + } + + public List getAllNodes() { + return IterableExtensions.toList(this.nodeToType.keySet()); + } + + public HashMap> getOutgoingEdges() { + return this.outgoingEdges; + } + + public HashMap> incomingEdges() { + return this.incomingEdges; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.java new file mode 100644 index 00000000..83bb92ca --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/graph/PartialInterpretationGraph.java @@ -0,0 +1,162 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.Graph; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import com.google.common.collect.Iterables; +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement; +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration; +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type; +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition; +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink; +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation; +import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.impl.PartialComplexTypeInterpretationImpl; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import org.eclipse.emf.common.util.EList; +import org.eclipse.xtext.xbase.lib.Conversions; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.eclipse.xtext.xbase.lib.ListExtensions; + +@SuppressWarnings("all") +public class PartialInterpretationGraph extends Graph { + private final String typeToExclude = "undefinedpart"; + + private final String classSuffix = " class"; + + /** + * Define a new PartialInterpretationGraph by parse every element from a PartialInterpretation + */ + public PartialInterpretationGraph(final PartialInterpretation partial, final List metrics, final String name) { + final Consumer _function = (RelationDeclaration it) -> { + String n = it.getName().split(" ")[0]; + this.statistic.addEdgeType(n); + }; + Iterables.filter(partial.getProblem().getRelations(), RelationDeclaration.class).forEach(_function); + final Iterable typeInterpretations = this.getTypes(partial); + for (final PartialComplexTypeInterpretationImpl type : typeInterpretations) { + boolean _isConcreteType = this.isConcreteType(type.getInterpretationOf()); + if (_isConcreteType) { + String typeName = type.getInterpretationOf().getName().replace(this.classSuffix, ""); + EList _elements = type.getElements(); + for (final DefinedElement node : _elements) { + boolean _containsNode = this.statistic.containsNode(node); + boolean _not = (!_containsNode); + if (_not) { + this.statistic.addNodeWithType(node, typeName); + } else { + String currentType = ((String[])Conversions.unwrapArray(this.statistic.getTypesForNode(node), String.class))[0]; + boolean _isSuperType = this.isSuperType(currentType, type.getInterpretationOf()); + if (_isSuperType) { + this.statistic.overwriteCurrentType(node, typeName); + } + } + } + } + } + EList _partialrelationinterpretation = partial.getPartialrelationinterpretation(); + for (final PartialRelationInterpretation relationInterpretation : _partialrelationinterpretation) { + { + final String type_1 = relationInterpretation.getInterpretationOf().getName().split(" ")[0]; + Iterable _filter = Iterables.filter(relationInterpretation.getRelationlinks(), BinaryElementRelationLink.class); + for (final BinaryElementRelationLink edge : _filter) { + this.statistic.addEdge(edge.getParam1(), edge.getParam2(), type_1); + } + } + } + this.name = name; + this.metrics = metrics; + } + + /** + * recursively check if a type is the super type of another + */ + public boolean isSuperType(final String typeName, final Type subtypeToCheck) { + EList superTypes = subtypeToCheck.getSupertypes(); + int _size = superTypes.size(); + boolean _equals = (_size == 0); + if (_equals) { + return false; + } else { + final Function1 _function = (Type it) -> { + return it.getName().replace(this.classSuffix, ""); + }; + boolean _contains = ListExtensions.map(subtypeToCheck.getSupertypes(), _function).contains(typeName); + if (_contains) { + return true; + } else { + for (final Type superType : superTypes) { + boolean _isSuperType = this.isSuperType(typeName, superType); + if (_isSuperType) { + return true; + } + } + return false; + } + } + } + + /** + * Check if a Type object is the class that we want to consider + * A type object is to be considered if it satisfy one of the following: + * 1. if it is not abstract + * 2. if it is abstract but has a subclass of type TypeDefinition (This means the generation is + * started with nodes in this type) + */ + public boolean isConcreteType(final Type t) { + if (((!t.isIsAbstract()) || (IterableExtensions.findFirst(t.getSubtypes(), ((Function1) (Type it) -> { + return Boolean.valueOf((it instanceof TypeDefinition)); + })) != null))) { + return true; + } + return false; + } + + /** + * Set basic information for the output + */ + @Override + public void setBasicInformation(final ArrayList> output) { + final ArrayList metaInfo = new ArrayList(); + metaInfo.add(Graph.META_MODEL_HEADER); + metaInfo.add(this.metaModel); + final ArrayList edgeInfo = new ArrayList(); + edgeInfo.add(Graph.NUM_EDGE_TYPE_HEADER); + int _size = this.statistic.getAllTypes().size(); + String _plus = (Integer.valueOf(_size) + ""); + edgeInfo.add(_plus); + final ArrayList nodeInfo = new ArrayList(); + nodeInfo.add(Graph.NUM_NODE_HEADER); + int _size_1 = this.statistic.getAllNodes().size(); + String _plus_1 = (Integer.valueOf(_size_1) + ""); + nodeInfo.add(_plus_1); + final ArrayList stateInfo = new ArrayList(); + stateInfo.add(Graph.STATE_ID_HEADER); + stateInfo.add(this.name); + output.add(metaInfo); + output.add(edgeInfo); + output.add(nodeInfo); + output.add(stateInfo); + } + + private Iterable getTypes(final PartialInterpretation partial) { + final Function1 _function = (PartialComplexTypeInterpretationImpl it) -> { + boolean _contains = it.getInterpretationOf().getName().toLowerCase().contains(this.typeToExclude); + return Boolean.valueOf((!_contains)); + }; + return IterableExtensions.filter(Iterables.filter(partial.getPartialtypeinterpratation(), PartialComplexTypeInterpretationImpl.class), _function); + } + + @Override + public GraphStatistic getStatistic() { + throw new UnsupportedOperationException("TODO: auto-generated method stub"); + } + + @Override + public String getName() { + return this.name; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.java._trace new file mode 100644 index 00000000..983bd97e Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.xtendbin new file mode 100644 index 00000000..daf9b285 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.CsvFileWriter.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.DataName.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.DataName.java._trace new file mode 100644 index 00000000..7a93f65a Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.DataName.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.java._trace new file mode 100644 index 00000000..2ee37cec Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.xtendbin new file mode 100644 index 00000000..8dda7d21 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.GraphReader.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.java._trace new file mode 100644 index 00000000..e7945d8c Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.xtendbin new file mode 100644 index 00000000..74675aec Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/.RepMetricsReader.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/CsvFileWriter.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/CsvFileWriter.java new file mode 100644 index 00000000..d166e31b --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/CsvFileWriter.java @@ -0,0 +1,75 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import org.eclipse.xtext.xbase.lib.Exceptions; + +@SuppressWarnings("all") +public class CsvFileWriter { + public static void write(final ArrayList> datas, final String uri) { + try { + int _size = datas.size(); + boolean _lessEqualsThan = (_size <= 0); + if (_lessEqualsThan) { + return; + } + File _file = new File(uri); + final PrintWriter writer = new PrintWriter(_file); + CsvFileWriter.output(writer, datas, uri); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + public static void append(final ArrayList> datas, final String uri) { + try { + int _size = datas.size(); + boolean _lessEqualsThan = (_size <= 0); + if (_lessEqualsThan) { + return; + } + File _file = new File(uri); + FileOutputStream _fileOutputStream = new FileOutputStream(_file, true); + final PrintWriter writer = new PrintWriter(_fileOutputStream); + CsvFileWriter.output(writer, datas, uri); + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + private static void output(final PrintWriter writer, final ArrayList> datas, final String uri) { + try { + final StringBuilder output = new StringBuilder(); + for (final List datarow : datas) { + { + for (int i = 0; (i < (datarow.size() - 1)); i++) { + String _get = datarow.get(i); + String _plus = (_get + ","); + output.append(_plus); + } + int _size = datarow.size(); + boolean _greaterEqualsThan = (_size >= 1); + if (_greaterEqualsThan) { + int _size_1 = datarow.size(); + int _minus = (_size_1 - 1); + output.append(datarow.get(_minus)); + output.append("\n"); + } + } + } + writer.write(output.toString()); + writer.close(); + } catch (final Throwable _t) { + if (_t instanceof FileNotFoundException) { + final FileNotFoundException e = (FileNotFoundException)_t; + e.printStackTrace(); + } else { + throw Exceptions.sneakyThrow(_t); + } + } + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/DataName.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/DataName.java new file mode 100644 index 00000000..9e2c9c86 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/DataName.java @@ -0,0 +1,12 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; + +@SuppressWarnings("all") +public class DataName { + public final static String REP_PATH = "data/"; + + public final static String MPC_REP = "mpc_rep"; + + public final static String NA_REP = "na_rep"; + + public final static String OUT_D_REP = "out_d_rep"; +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.java new file mode 100644 index 00000000..0299fc0c --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/GraphReader.java @@ -0,0 +1,138 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.EdgeTypeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MultiplexParticipationCoefficientMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeActivityMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.NodeTypeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.OutDegreeMetric; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.TypedOutDegree; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.List; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.xtext.xbase.lib.Conversions; +import org.eclipse.xtext.xbase.lib.Exceptions; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; + +@SuppressWarnings("all") +public class GraphReader { + private final ResourceSet resSet = new ResourceSetImpl(); + + private final ArrayList referenceTypes = new ArrayList(); + + private String suffix; + + public GraphReader(final EPackage metaModel, final String suffix) { + throw new Error("Unresolved compilation problems:" + + "\nXMIResourceFactoryImpl cannot be resolved."); + } + + public List readModels(final String path) { + try { + final File dir = new File(path); + boolean _isDirectory = dir.isDirectory(); + boolean _not = (!_isDirectory); + if (_not) { + throw new Exception("expecting a directory"); + } + final ArrayList graphs = new ArrayList(); + final ArrayList metrics = new ArrayList(); + OutDegreeMetric _outDegreeMetric = new OutDegreeMetric(); + metrics.add(_outDegreeMetric); + NodeActivityMetric _nodeActivityMetric = new NodeActivityMetric(); + metrics.add(_nodeActivityMetric); + MultiplexParticipationCoefficientMetric _multiplexParticipationCoefficientMetric = new MultiplexParticipationCoefficientMetric(); + metrics.add(_multiplexParticipationCoefficientMetric); + TypedOutDegree _typedOutDegree = new TypedOutDegree(); + metrics.add(_typedOutDegree); + NodeTypeMetric _nodeTypeMetric = new NodeTypeMetric(); + metrics.add(_nodeTypeMetric); + EdgeTypeMetric _edgeTypeMetric = new EdgeTypeMetric(); + metrics.add(_edgeTypeMetric); + int count = 1; + final Function1 _function = (String it) -> { + return Boolean.valueOf(it.endsWith(this.suffix)); + }; + Iterable _filter = IterableExtensions.filter(((Iterable)Conversions.doWrapArray(dir.list())), _function); + for (final String name : _filter) { + { + final File file = new File(name); + final List roots = this.readModel(EObject.class, path, file.getName()); + final EMFGraph g = new EMFGraph(); + for (final EObject root : roots) { + g.init(root, metrics, name.replaceFirst(this.suffix, ""), this.referenceTypes); + } + count++; + graphs.add(g); + } + } + return graphs; + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + public EMFGraph readModel(final String path, final String filename) { + final ArrayList metrics = new ArrayList(); + OutDegreeMetric _outDegreeMetric = new OutDegreeMetric(); + metrics.add(_outDegreeMetric); + NodeActivityMetric _nodeActivityMetric = new NodeActivityMetric(); + metrics.add(_nodeActivityMetric); + MultiplexParticipationCoefficientMetric _multiplexParticipationCoefficientMetric = new MultiplexParticipationCoefficientMetric(); + metrics.add(_multiplexParticipationCoefficientMetric); + TypedOutDegree _typedOutDegree = new TypedOutDegree(); + metrics.add(_typedOutDegree); + NodeTypeMetric _nodeTypeMetric = new NodeTypeMetric(); + metrics.add(_nodeTypeMetric); + EdgeTypeMetric _edgeTypeMetric = new EdgeTypeMetric(); + metrics.add(_edgeTypeMetric); + final File file = new File(filename); + final List roots = this.readModel(EObject.class, path, file.getName()); + final EMFGraph g = new EMFGraph(); + for (final EObject root : roots) { + g.init(root, metrics, filename.replaceFirst(this.suffix, ""), this.referenceTypes); + } + return g; + } + + public List readModel(final Class type, final String path, final String name) { + try { + try { + final Resource resource = this.resSet.getResource(GraphReader.getURI(path, name), true); + if ((resource == null)) { + String _string = GraphReader.getURI(path, name).toString(); + throw new FileNotFoundException(_string); + } else { + EList _contents = resource.getContents(); + return ((List) _contents); + } + } catch (final Throwable _t) { + if (_t instanceof Exception) { + final Exception e = (Exception)_t; + e.printStackTrace(); + String _string_1 = GraphReader.getURI(path, name).toString(); + throw new Exception(_string_1); + } else { + throw Exceptions.sneakyThrow(_t); + } + } + } catch (Throwable _e) { + throw Exceptions.sneakyThrow(_e); + } + } + + public static URI getURI(final String path, final String name) { + return URI.createFileURI(((path + "/") + name)); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.java new file mode 100644 index 00000000..2486cf83 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/io/RepMetricsReader.java @@ -0,0 +1,49 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; +import com.google.common.base.Objects; +import com.google.common.collect.Iterators; +import java.util.Iterator; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.impl.EcorePackageImpl; +import org.eclipse.xtext.xbase.lib.Functions.Function1; +import org.eclipse.xtext.xbase.lib.IterableExtensions; +import org.eclipse.xtext.xbase.lib.IteratorExtensions; +import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; + +/** + * Read the sample of the distribution of a metric provided the csv file of the metric + */ +@SuppressWarnings("all") +public class RepMetricsReader { + private static Domain domain; + + public static MetricSampleGroup read(final Domain d) { + throw new Error("Unresolved compilation problems:" + + "\nThe method or field GithubPackageImpl is undefined" + + "\neINSTANCE cannot be resolved"); + } + + /** + * Read representative model + */ + private static MetricSampleGroup readMetrics(final GraphReader r, final String path) { + final EMFGraph model = IterableExtensions.head(r.readModels(path)); + boolean _equals = Objects.equal(RepMetricsReader.domain, Domain.Ecore); + if (_equals) { + final Function1 _function = (EReference it) -> { + return Boolean.valueOf((((((it.getName().equals("eGenericType") || it.getName().equals("eGenericSuperTypes")) || it.getName().equals("eFactoryInstance")) || + it.getName().equals("eGenericExceptions")) || it.getName().equals("references")) || it.getName().equals("contents"))); + }; + Iterator refsToRemove = IteratorExtensions.filter(Iterators.filter(EcorePackageImpl.eINSTANCE.eAllContents(), EReference.class), _function); + final Procedure1 _function_1 = (EReference it) -> { + model.removeReference(it); + }; + IteratorExtensions.forEach(refsToRemove, _function_1); + } + return model.evaluateAllMetricsToSamples(); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.java._trace new file mode 100644 index 00000000..6f941f84 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.xtendbin new file mode 100644 index 00000000..97674c9e Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.EdgeTypeMetric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.java._trace new file mode 100644 index 00000000..4feb0150 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.xtendbin new file mode 100644 index 00000000..ffe985d4 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.Metric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.java._trace new file mode 100644 index 00000000..e206794e Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.xtendbin new file mode 100644 index 00000000..478004db Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MetricSampleGroup.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.java._trace new file mode 100644 index 00000000..7e322646 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.xtendbin new file mode 100644 index 00000000..14cb7ae5 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.MultiplexParticipationCoefficientMetric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.java._trace new file mode 100644 index 00000000..b6cf817f Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.xtendbin new file mode 100644 index 00000000..074a8167 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeActivityMetric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.java._trace new file mode 100644 index 00000000..fbf9468d Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.xtendbin new file mode 100644 index 00000000..38aa72c1 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.NodeTypeMetric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.java._trace new file mode 100644 index 00000000..bfec1ccd Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.xtendbin new file mode 100644 index 00000000..eeed0bd4 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.OutDegreeMetric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.java._trace new file mode 100644 index 00000000..5cc35d7c Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.xtendbin new file mode 100644 index 00000000..3d9fe56e Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedClusteringCoefficientMetric.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.java._trace new file mode 100644 index 00000000..0b3e6e4f Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.xtendbin new file mode 100644 index 00000000..5f61f506 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/.TypedOutDegree.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.java new file mode 100644 index 00000000..58dea567 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/EdgeTypeMetric.java @@ -0,0 +1,65 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import com.google.common.collect.Multimap; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Set; +import java.util.function.BiConsumer; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.Conversions; +import org.eclipse.xtext.xbase.lib.Functions.Function2; +import org.eclipse.xtext.xbase.lib.IterableExtensions; + +@SuppressWarnings("all") +public class EdgeTypeMetric extends Metric { + @Override + public String[][] evaluate(final GraphStatistic g) { + Object _evaluateSamples = this.evaluateSamples(g); + HashMap map = ((HashMap) _evaluateSamples); + ArrayList output = new ArrayList(); + output.add(((String[])Conversions.unwrapArray(CollectionLiterals.newArrayList("Edge Type"), String.class))); + Set keys = map.keySet(); + ArrayList values = CollectionLiterals.newArrayList(); + for (final String key : keys) { + Double _get = map.get(key); + String _plus = (_get + ""); + values.add(_plus); + } + final Set _converted_keys = (Set)keys; + output.add(((String[])Conversions.unwrapArray(_converted_keys, String.class))); + final ArrayList _converted_values = (ArrayList)values; + output.add(((String[])Conversions.unwrapArray(_converted_values, String.class))); + return ((String[][])Conversions.unwrapArray(output, String[].class)); + } + + @Override + public Object evaluateSamples(final GraphStatistic g) { + final HashMap map = new HashMap(); + HashMap> outgoingEdges = g.getOutgoingEdges(); + final Function2, Integer> _function = (Integer r, Multimap t) -> { + final Function2, Integer> _function_1 = (Integer r1, Collection t1) -> { + int _size = t1.size(); + return Integer.valueOf(((r1).intValue() + _size)); + }; + Integer _fold = IterableExtensions., Integer>fold(t.asMap().values(), Integer.valueOf(0), _function_1); + return Integer.valueOf(((r).intValue() + (_fold).intValue())); + }; + Integer _fold = IterableExtensions., Integer>fold(outgoingEdges.values(), Integer.valueOf(0), _function); + final double edgeCount = ((double) (int) _fold); + final BiConsumer> _function_1 = (String k, Multimap v) -> { + final Function2, Integer> _function_2 = (Integer r, Collection t) -> { + int _size = t.size(); + return Integer.valueOf(((r).intValue() + _size)); + }; + Integer _fold_1 = IterableExtensions., Integer>fold(v.asMap().values(), Integer.valueOf(0), _function_2); + double value = ((_fold_1).intValue() / edgeCount); + map.put(k, Double.valueOf(value)); + }; + outgoingEdges.forEach(_function_1); + return map; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.java new file mode 100644 index 00000000..be6353a2 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/Metric.java @@ -0,0 +1,10 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; + +@SuppressWarnings("all") +public abstract class Metric { + public abstract String[][] evaluate(final GraphStatistic g); + + public abstract Object evaluateSamples(final GraphStatistic g); +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.java new file mode 100644 index 00000000..6db61944 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MetricSampleGroup.java @@ -0,0 +1,19 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import java.util.HashMap; +import java.util.List; + +@SuppressWarnings("all") +public class MetricSampleGroup { + public List mpcSamples; + + public List naSamples; + + public List outDegreeSamples; + + public HashMap> typedOutDegreeSamples; + + public HashMap nodeTypeSamples; + + public HashMap edgeTypeSamples; +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MultiplexParticipationCoefficientMetric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MultiplexParticipationCoefficientMetric.java new file mode 100644 index 00000000..660a5978 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/MultiplexParticipationCoefficientMetric.java @@ -0,0 +1,59 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Consumer; +import org.eclipse.emf.ecore.EObject; + +@SuppressWarnings("all") +public class MultiplexParticipationCoefficientMetric extends Metric { + public final static String countName = "MPCCount"; + + public final static String valueName = "MPCValue"; + + private final DecimalFormat formatter = new DecimalFormat("#0.00000"); + + @Override + public String[][] evaluate(final GraphStatistic g) { + throw new Error("Unresolved compilation problems:" + + "\nInvalid number of arguments. The method newArrayOfSize(int) is not applicable for the arguments (int,int)"); + } + + @Override + public Object evaluateSamples(final GraphStatistic g) { + final ArrayList samples = new ArrayList(); + final int typeCounts = g.getAllTypes().size(); + final Consumer _function = (EObject it) -> { + samples.add(Double.valueOf(this.calculateMPC(it, g, typeCounts))); + }; + g.getAllNodes().forEach(_function); + return samples; + } + + public double calculateMPC(final EObject n, final GraphStatistic g, final int typeCounts) { + int _outDegree = g.outDegree(n); + int _inDegree = g.inDegree(n); + final int edgeCounts = (_outDegree + _inDegree); + double coef = 0.0; + List _allTypes = g.getAllTypes(); + for (final String type : _allTypes) { + { + int _dimentionalDegree = g.dimentionalDegree(n, type); + final double degree = ((double) _dimentionalDegree); + double _coef = coef; + double _pow = Math.pow((degree / edgeCounts), 2); + coef = (_coef + _pow); + } + } + coef = (1 - coef); + coef = ((coef * typeCounts) / (typeCounts - 1)); + boolean _isNaN = Double.isNaN(coef); + if (_isNaN) { + coef = 0; + } + return Double.parseDouble(this.formatter.format(coef)); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeActivityMetric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeActivityMetric.java new file mode 100644 index 00000000..12bec460 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeActivityMetric.java @@ -0,0 +1,31 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import java.util.ArrayList; +import java.util.function.Consumer; +import org.eclipse.emf.ecore.EObject; + +@SuppressWarnings("all") +public class NodeActivityMetric extends Metric { + public final static String countName = "NACount"; + + public final static String valueName = "NAValue"; + + @Override + public String[][] evaluate(final GraphStatistic g) { + throw new Error("Unresolved compilation problems:" + + "\nInvalid number of arguments. The method newArrayOfSize(int) is not applicable for the arguments (int,int)"); + } + + @Override + public Object evaluateSamples(final GraphStatistic g) { + final ArrayList samples = new ArrayList(); + final Consumer _function = (EObject it) -> { + int _numOfEdgeTypes = g.numOfEdgeTypes(it); + samples.add(Double.valueOf(((double) _numOfEdgeTypes))); + }; + g.getAllNodes().forEach(_function); + return samples; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.java new file mode 100644 index 00000000..75c2cfef --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/NodeTypeMetric.java @@ -0,0 +1,54 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.Conversions; + +@SuppressWarnings("all") +public class NodeTypeMetric extends Metric { + @Override + public String[][] evaluate(final GraphStatistic g) { + Object _evaluateSamples = this.evaluateSamples(g); + HashMap map = ((HashMap) _evaluateSamples); + ArrayList output = new ArrayList(); + output.add(((String[])Conversions.unwrapArray(CollectionLiterals.newArrayList("Node Type"), String.class))); + Set keys = map.keySet(); + ArrayList values = CollectionLiterals.newArrayList(); + for (final String key : keys) { + Double _get = map.get(key); + String _plus = (_get + ""); + values.add(_plus); + } + final Set _converted_keys = (Set)keys; + output.add(((String[])Conversions.unwrapArray(_converted_keys, String.class))); + final ArrayList _converted_values = (ArrayList)values; + output.add(((String[])Conversions.unwrapArray(_converted_values, String.class))); + return ((String[][])Conversions.unwrapArray(output, String[].class)); + } + + @Override + public Object evaluateSamples(final GraphStatistic g) { + HashMap map = new HashMap(); + List nodes = g.getAllNodes(); + int _size = nodes.size(); + double single = (1.0 / _size); + Map> nodeToType = g.getNodeToTypesMap(); + for (final EObject node : nodes) { + Set _get = nodeToType.get(node); + for (final String cl : _get) { + { + Double value = map.getOrDefault(cl, Double.valueOf(0.0)); + map.put(cl, Double.valueOf(((value).doubleValue() + single))); + } + } + } + return map; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/OutDegreeMetric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/OutDegreeMetric.java new file mode 100644 index 00000000..67e4be0d --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/OutDegreeMetric.java @@ -0,0 +1,31 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import java.util.ArrayList; +import java.util.function.Consumer; +import org.eclipse.emf.ecore.EObject; + +@SuppressWarnings("all") +public class OutDegreeMetric extends Metric { + public final static String countName = "OutDegreeCount"; + + public final static String valueName = "OutDegreeValue"; + + @Override + public String[][] evaluate(final GraphStatistic g) { + throw new Error("Unresolved compilation problems:" + + "\nInvalid number of arguments. The method newArrayOfSize(int) is not applicable for the arguments (int,int)"); + } + + @Override + public Object evaluateSamples(final GraphStatistic g) { + final ArrayList samples = new ArrayList(); + final Consumer _function = (EObject it) -> { + int _outDegree = g.outDegree(it); + samples.add(Double.valueOf(((double) _outDegree))); + }; + g.getAllNodes().forEach(_function); + return samples; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.java new file mode 100644 index 00000000..042af5c3 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedClusteringCoefficientMetric.java @@ -0,0 +1,74 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import com.google.common.base.Objects; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.function.Consumer; +import org.eclipse.emf.ecore.EObject; + +@SuppressWarnings("all") +public class TypedClusteringCoefficientMetric extends Metric { + public final static String countName = "TCCCount"; + + public final static String valueName = "TCCValue"; + + private final DecimalFormat formatter = new DecimalFormat("#0.00000"); + + @Override + public String[][] evaluate(final GraphStatistic g) { + throw new Error("Unresolved compilation problems:" + + "\nInvalid number of arguments. The method newArrayOfSize(int) is not applicable for the arguments (int,int)"); + } + + @Override + public Object evaluateSamples(final GraphStatistic g) { + final ArrayList samples = new ArrayList(); + final Consumer _function = (EObject it) -> { + samples.add(Double.valueOf(this.calculateTCC1(it, g))); + }; + g.getAllNodes().forEach(_function); + return samples; + } + + /** + * Compute TCC1 metric for node n + */ + public double calculateTCC1(final EObject n, final GraphStatistic g) { + int wedges = 0; + int triangles = 0; + List _allTypes = g.getAllTypes(); + for (final String type1 : _allTypes) { + { + Collection _get = g.getOutgoingEdges().get(type1).get(n); + final HashSet typed1RelatedOfN = new HashSet(_get); + Collection _get_1 = g.incomingEdges().get(type1).get(n); + final HashSet type1EdgeSourceNodesOfN = new HashSet(_get_1); + typed1RelatedOfN.addAll(type1EdgeSourceNodesOfN); + final int d = typed1RelatedOfN.size(); + int _wedges = wedges; + wedges = (_wedges + (d * (d - 1))); + for (final EObject n1 : typed1RelatedOfN) { + for (final EObject n2 : typed1RelatedOfN) { + List _allTypes_1 = g.getAllTypes(); + for (final String type2 : _allTypes_1) { + if (((!Objects.equal(type1, type2)) && (g.getOutgoingEdges().get(type2).containsEntry(n1, n2) || + g.getOutgoingEdges().get(type2).containsEntry(n2, n1)))) { + triangles++; + } + } + } + } + } + } + if ((wedges == 0.0)) { + return 0.0; + } else { + return (((double) triangles) / wedges); + } + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.java new file mode 100644 index 00000000..dce80389 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/metrics/TypedOutDegree.java @@ -0,0 +1,73 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.GraphStatistic; +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.Metric; +import com.google.common.collect.Multimap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.Conversions; + +@SuppressWarnings("all") +public class TypedOutDegree extends Metric { + private HashMap> calculateMetric(final GraphStatistic g) { + HashMap> outgoingEdges = g.getOutgoingEdges(); + HashMap> metric = new HashMap>(); + Map> nodeToTypes = g.getNodeToTypesMap(); + Set _keySet = outgoingEdges.keySet(); + for (final String edgeType : _keySet) { + Set _keySet_1 = outgoingEdges.get(edgeType).keySet(); + for (final EObject node : _keySet_1) { + { + Set classes = nodeToTypes.get(node); + for (final String cl : classes) { + { + String key = ((cl + " ") + edgeType); + List typeCount = metric.get(key); + if ((typeCount == null)) { + ArrayList _arrayList = new ArrayList(); + typeCount = _arrayList; + metric.put(key, typeCount); + } + typeCount.add(Integer.valueOf(outgoingEdges.get(edgeType).get(node).size())); + } + } + } + } + } + return metric; + } + + @Override + public String[][] evaluate(final GraphStatistic g) { + HashMap> metric = this.calculateMetric(g); + ArrayList output = new ArrayList(); + output.add(((String[])Conversions.unwrapArray(CollectionLiterals.newArrayList("Typed Out Degree"), String.class))); + Set _keySet = metric.keySet(); + for (final String key : _keySet) { + { + List samples = metric.get(key); + int _size = samples.size(); + int _plus = (_size + 1); + String[] outputForOnePair = new String[_plus]; + outputForOnePair[0] = key; + for (int i = 0; (i < samples.size()); i++) { + Integer _get = samples.get(i); + String _plus_1 = (_get + ""); + outputForOnePair[(i + 1)] = _plus_1; + } + output.add(outputForOnePair); + } + } + return ((String[][])Conversions.unwrapArray(output, String[].class)); + } + + @Override + public Object evaluateSamples(final GraphStatistic g) { + return this.calculateMetric(g); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.java._trace new file mode 100644 index 00000000..906a396a Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.xtendbin new file mode 100644 index 00000000..06925afd Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/.LinearModel.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/LinearModel.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/LinearModel.java new file mode 100644 index 00000000..6a7f8497 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/predictor/LinearModel.java @@ -0,0 +1,90 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.predictor; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.StateData; +import com.google.common.base.Objects; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@SuppressWarnings("all") +public class LinearModel { + private double ridge; + + private Map stateAndHistory; + + private List samples; + + public LinearModel(final double ridge) { + this.ridge = ridge; + HashMap _hashMap = new HashMap(); + this.stateAndHistory = _hashMap; + ArrayList _arrayList = new ArrayList(); + this.samples = _arrayList; + } + + /** + * reset the current train data for regression to a new trajectory + * @param state: the last state of the trajectory + */ + public void resetRegression(final Object state) { + this.samples.clear(); + boolean _containsKey = this.stateAndHistory.containsKey(state); + if (_containsKey) { + StateData data = this.stateAndHistory.get(state); + Object curState = state; + this.samples.add(data); + while ((this.stateAndHistory.containsKey(data.getLastState()) && (!Objects.equal(data.getLastState(), curState)))) { + { + curState = data.getLastState(); + data = this.stateAndHistory.get(data.getLastState()); + this.samples.add(data); + } + } + } + } + + /** + * Add a new data point to the current training set + * @param state: the state on which the new data point is calculated + * @param features: the set of feature value(x) + * @param value: the value of the state (y) + * @param lastState: the state which transformed to current state, used to record the trajectory + */ + public boolean feedData(final Object state, final double[] features, final double value, final Object lastState) { + boolean _xblockexpression = false; + { + StateData data = new StateData(features, value, lastState); + this.stateAndHistory.put(state, data); + _xblockexpression = this.samples.add(data); + } + return _xblockexpression; + } + + /** + * get prediction for next state, without storing the data point into the training set + * @param features: the feature values of current state + * @param value: the value of the current state + * @param: featuresToPredict: the features of the state wanted to be predected + * @return the value of the state to be predicted + */ + public double getPredictionForNextDataSample(final double[] features, final double value, final double[] featuresToPredict) { + throw new Error("Unresolved compilation problems:" + + "\nMatrix cannot be resolved." + + "\nMatrix cannot be resolved." + + "\nLinearRegression cannot be resolved." + + "\ncoefficients cannot be resolved"); + } + + private double predict(final double[] parameters, final double[] featuresToPredict) { + double result = parameters[0]; + for (int i = 0; (i < featuresToPredict.length); i++) { + double _result = result; + double _get = parameters[i]; + double _get_1 = featuresToPredict[i]; + double _multiply = (_get * _get_1); + result = (_result + _multiply); + } + return result; + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.java._trace new file mode 100644 index 00000000..1756f86a Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.xtendbin new file mode 100644 index 00000000..708955a4 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ConstraintCollection.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.java._trace b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.java._trace new file mode 100644 index 00000000..0cb68ca8 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.java._trace differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.xtendbin b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.xtendbin new file mode 100644 index 00000000..63721784 Binary files /dev/null and b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/.ViolationCheck.xtendbin differ diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ConstraintCollection.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ConstraintCollection.java new file mode 100644 index 00000000..92c69bea --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ConstraintCollection.java @@ -0,0 +1,79 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.eclipse.emf.common.notify.Notifier; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.xtext.xbase.lib.InputOutput; + +@SuppressWarnings("all") +public class ConstraintCollection { + private final /* ArrayList */Object constraints /* Skipped initializer because of errors */; + + private /* BaseGeneratedPatternGroup */Object patterns; + + private List resources = new ArrayList(); + + public ConstraintCollection(final /* List */Object constraints, final List uris, final /* BaseGeneratedPatternGroup */Object patterns) { + throw new Error("Unresolved compilation problems:" + + "\nThe field ConstraintCollection.constraints refers to the missing type IConstraintSpecification" + + "\nThe field ConstraintCollection.patterns refers to the missing type BaseGeneratedPatternGroup"); + } + + public ConstraintCollection(final /* List */Object constraints, final /* BaseGeneratedPatternGroup */Object patterns) { + throw new Error("Unresolved compilation problems:" + + "\nThe field ConstraintCollection.constraints refers to the missing type IConstraintSpecification" + + "\nThe field ConstraintCollection.patterns refers to the missing type BaseGeneratedPatternGroup"); + } + + public boolean addModel(final Notifier n) { + return this.resources.add(n); + } + + public String setURIs(final List uris) { + String _xblockexpression = null; + { + final ResourceSetImpl resSet = new ResourceSetImpl(); + for (final String uri : uris) { + { + Resource resource = resSet.getResource(URI.createURI(uri), true); + this.resources.add(resource); + } + } + _xblockexpression = InputOutput.println("reading model finished"); + } + return _xblockexpression; + } + + public List calculateViolations() { + throw new Error("Unresolved compilation problems:" + + "\nThe method or field querySpecification is undefined for the type Object" + + "\nThe method initEngine(Notifier) from the type ConstraintCollection refers to the missing type Object" + + "\nThe field ConstraintCollection.constraints refers to the missing type IConstraintSpecification" + + "\ngetMatcher cannot be resolved" + + "\ncountMatches cannot be resolved"); + } + + public ArrayList> calculateViolationMaps() { + throw new Error("Unresolved compilation problems:" + + "\nThe method or field querySpecification is undefined for the type Object" + + "\nThe method or field querySpecification is undefined for the type Object" + + "\nThe method initEngine(Notifier) from the type ConstraintCollection refers to the missing type Object" + + "\nThe field ConstraintCollection.constraints refers to the missing type IConstraintSpecification" + + "\ngetMatcher cannot be resolved" + + "\ncountMatches cannot be resolved" + + "\nsimpleName cannot be resolved"); + } + + private Object initEngine(final Notifier r) { + throw new Error("Unresolved compilation problems:" + + "\nThe method or field ViatraQueryEngine is undefined" + + "\nEMFScope cannot be resolved." + + "\nThe field ConstraintCollection.patterns refers to the missing type BaseGeneratedPatternGroup" + + "\non cannot be resolved" + + "\nprepare cannot be resolved"); + } +} diff --git a/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.java b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.java new file mode 100644 index 00000000..7eb3ec77 --- /dev/null +++ b/Metrics/Metrics-Calculation/ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator/xtend-gen/ca/mcgill/ecse/dslreasoner/realistic/metrics/calculator/validation/ViolationCheck.java @@ -0,0 +1,34 @@ +package ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.validation; + +import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; +import java.util.ArrayList; +import java.util.Map; +import org.eclipse.emf.ecore.EObject; + +@SuppressWarnings("all") +public class ViolationCheck { + /** + * Return the total number of violations + */ + public static int calculateViolationCounts(final EObject root, final Domain d) { + throw new Error("Unresolved compilation problems:" + + "\nThe method loadConstraints(String) from the type ViolationCheck refers to the missing type IConstraintSpecification" + + "\nThe constructor ConstraintCollection(List, BaseGeneratedPatternGroup) refers to the missing type IConstraintSpecification"); + } + + /** + * return a map contain the count for each type of violation + */ + public static Map violationMaps(final EObject root) { + throw new Error("Unresolved compilation problems:" + + "\nThe method loadConstraints(String) from the type ViolationCheck refers to the missing type IConstraintSpecification" + + "\nThe constructor ConstraintCollection(List, BaseGeneratedPatternGroup) refers to the missing type IConstraintSpecification"); + } + + public static /* ArrayList */Object loadConstraints(final String packageName) { + throw new Error("Unresolved compilation problems:" + + "\nIConstraintSpecification cannot be resolved to a type." + + "\nIConstraintSpecification cannot be resolved to a type." + + "\nThe method or field IConstraintSpecification is undefined"); + } +} -- cgit v1.2.3-54-g00ecf