aboutsummaryrefslogtreecommitdiffstats
path: root/Metrics/Metrics-Calculation/metrics_plot/Measurements/Measurement1/src/BoxPlot.ipynb
blob: 6cce3f9d641fe9f1aeb7124f95155e94ea5bf9a3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import statistics\n",
    "import os\n",
    "import sys\n",
    "lib_path = os.path.abspath(os.path.join('..','..', '..', 'utils'))\n",
    "sys.path.append(lib_path)\n",
    "from GraphType import GraphStat\n",
    "import readCSV as reader\n",
    "import constants\n",
    "import DistributionMetrics as metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def getModels(folderName, numberOfModels):\n",
    "    filenames = reader.readmultiplefiles(folderName, numberOfModels, False)\n",
    "    graphStats = [GraphStat(filename) for filename in filenames]\n",
    "    return graphStats"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "domain = 'ecore'\n",
    "mpc_guide = getModels('../input/{}/MPC/'.format(domain), 100)\n",
    "na_guide = getModels('../input/{}/NodeActivity/'.format(domain), 100)\n",
    "od_guide = getModels('../input/{}/OutDegree/'.format(domain), 100)\n",
    "nt_guide = getModels('../input/{}/NodeType/'.format(domain), 100)\n",
    "composite_guide = getModels('../input/{}/Composite/'.format(domain), 100)\n",
    "composite_no_violations_guide = getModels('../input/{}/Composite_Without_Violations/'.format(domain), 100)\n",
    "violations_guide = getModels('../input/{}/Violations/'.format(domain), 100)\n",
    "human = getModels('../input/{}/Human/'.format(domain), 304)\n",
    "model_types = [human, composite_guide, composite_no_violations_guide, mpc_guide, na_guide, od_guide, nt_guide, violations_guide]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "if domain == 'yakindumm':\n",
    "    type_map = {'Entry': 0.04257802080554814, 'Choice': 0.1267671379034409, 'State': 0.1596092291277674, 'Transition': 0.6138636969858629, 'Statechart': 0.010136036276340358, 'Region': 0.04467858095492131, 'Exit': 0.0018338223526273673, 'FinalState': 0.0005334755934915977}\n",
    "elif domain == 'ecore':\n",
    "    type_map = {'EAttribute': 0.23539778449144008, 'EClass': 0.30996978851963747, 'EReference': 0.33081570996978854, 'EPackage': 0.012789526686807653, 'EAnnotation': 0.002517623363544813, 'EEnumLiteral': 0.07275931520644502, 'EEnum': 0.013645518630412891, 'EDataType': 0.004028197381671702, 'EParameter': 0.005941591137965764, 'EGenericType': 0.002014098690835851, 'EOperation': 0.009415911379657605, 'ETypeParameter': 0.0007049345417925478}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import rep\n",
    "mpc_rep = getModels('../input/{}/MPC_REP/'.format(domain), 1)\n",
    "na_rep = getModels('../input/{}/NA_REP/'.format(domain), 1)\n",
    "od_rep = getModels('../input/{}/OUT_DEGREE_REP/'.format(domain), 1)\n",
    "rep = mpc_rep[0]\n",
    "rep.na = na_rep[0].na\n",
    "rep.out_d = od_rep[0].out_d\n",
    "rep.nodeTypeStat = type_map"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Helper Functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_ks(dist1, dist2):\n",
    "    value, p= metrics.ks_distance(dist1, dist2)\n",
    "    return value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mkdir(path):\n",
    "    if not os.path.exists(path):\n",
    "        os.makedirs(path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot Config"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['Hum', 'Comb+V', 'Comb-V', 'MPC', 'NA', 'OD',  'NTD', 'VIO']\n",
    "output_path = '../output/{}/'.format(domain)\n",
    "mkdir(output_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Draw diagrams"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "def drawBoxDiagram(title, target, types, distance_func, bold_index):\n",
    "    distances = []\n",
    "    for distributions in types:\n",
    "        distances.append([distance_func(target, distribution) for distribution in distributions])\n",
    "    fig, ax1 = plt.subplots()\n",
    "    fig.set_size_inches(5, 2)\n",
    "    result = plt.boxplot(distances)\n",
    "    texts = ax1.set_xticklabels(labels, rotation=90, fontsize=12)\n",
    "    texts[bold_index].set_fontweight('bold')\n",
    "    \n",
    "    plt.savefig('{}/{}.png'.format(output_path, title), dpi=500, bbox_inches=\"tight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw mpc\n",
    "mpc_types = []\n",
    "for models in model_types:\n",
    "        mpc_types.append([model.mpc for model in models])\n",
    "drawBoxDiagram('MPC', rep.mpc, mpc_types, calculate_ks, 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw node activity\n",
    "na_types = []\n",
    "for models in model_types:\n",
    "        na_types.append([model.na for model in models])\n",
    "drawBoxDiagram('Node_Activity', rep.na, na_types, calculate_ks, 4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw out degree\n",
    "out_d_types = []\n",
    "for models in model_types:\n",
    "        out_d_types.append([model.out_d for model in models])\n",
    "drawBoxDiagram('Out_Degree', rep.out_d, out_d_types, calculate_ks, 5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "def manual_ks(pdf1, pdf2):\n",
    "    result = 0\n",
    "    sum1 = 0\n",
    "    sum2 = 0\n",
    "    for(a, b) in zip(pdf1, pdf2):\n",
    "        sum1 += a\n",
    "        sum2 += b\n",
    "        result = max(result, abs(sum1-sum2))\n",
    "    return result\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['EAnnotation', 'EAttribute', 'EClass', 'EDataType', 'EEnum', 'EEnumLiteral', 'EGenericType', 'EOperation', 'EPackage', 'EParameter', 'EReference', 'ETypeParameter']\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATwAAAC3CAYAAACPBeKpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAX5ElEQVR4nO3de3hcdZ3H8feXNG1FbU0sUKGtjWtxS7Mq0sdrV7flUpSCrvogxQvsdtFFhCrIrlgfaHG7ruJtrXSXS1WsmyD6CFsQuSZeimBbBBWoeAMhuFJKQ8FA2mnz3T9+J2EynckMmZlzmfm8nmeeNueczO/b9OQ753e+v9/5mbsjItIM9ks6ABGRuCjhiUjTUMITkaahhCciTUMJT0SahhKeiDSNCUk1PG3aNJ89e3ZSzYtIg7rzzju3u/sBxfYllvBmz57Nli1bkmpeRBqUmf2x1D51aUWkaSjhiUjTUMITkaaR2D08kWZiZmWP0bz2+lPCE4lBYTIzMyW4BKhLKyJNo6KEZ2bHmtn9ZvY7M/tEkf2zzKzXzO4ys1+a2dtqH6pINrS3t2NmY76Asse0t7cn/C9pPGW7tGbWAlwMHA30AZvNbIO735d32KeAq9z9v8zsMOB6YHYd4hVJvf7+/pp0Vyu57yfPTSVXeK8Ffufuf3D33cCVwNsLjnFgSvT3qcCfaheiiEhtVFK0OAR4OO/rPuB1BcesBG4yszOB5wNH1SQ6kQzyC6bAyqm1eR+pqUoSXrHr6sLr9aXAN9z9C2b2BmC9mXW6+9CoNzL7IPBBgFmzZo0nXpHUs1VP1qxL6yurj0eeVUmXtg+Ymff1DPbtsi4DrgJw99uBycC0wjdy90vdfb67zz/ggKJze0UaQrmCRCWvtra2pP8ZDaeShLcZmGNmHWY2ETgJ2FBwzEPAkQBmNpeQ8B6rZaAiWeHuZV+VHLdjx46E/yWNp2zCc/c9wEeAG4GthGrsvWZ2oZmdEB12DnCamf0C6AZOdY2qFJGUqWimhbtfTxhqkr/t/Ly/3we8qbahiYjUlmZaiEjTUMITkaahhCciTUMJTyRG3d3ddHZ2AtDZ2Ul3d3fCETUXS6qYOn/+fNeaFtIs9Dy8+JjZne4+v9g+XeGJxMDdmTdvHj09PaPG2vX09DBv3jwlu5joCk8kJi0tLQwODtLa2jqyLZfLMXnyZPbu3ZtgZI1FV3giKTB37lw2btw4atvGjRuZO3duQhE1HyU8kZisWLGCZcuW0dvbSy6Xo7e3l2XLlrFixYqkQ2saWtNCJCZLly4F4Mwzz2Tr1q3MnTuX1atXj2yX+tM9PBFpKLqHJyKCEp6INBElPBFpGplNeMNTdFpaWjRFR0QqUpN1aaNjTjSz+8zsXjPrqm2Yo3V3d7NixQrWrFnD4OAga9asYcWKFUp6IjKmslXaaF3a35C3Li2wNH9dWjObQ1jTYpG795vZge6+baz3raZK29nZyZo1a1i4cOHItt7eXs4880zuueeecb2niDSGaqu0laxLexpwsbv3A5RLdtXaunUrCxYsGLVtwYIFbN26tZ7NikjGVZLwiq1Le0jBMYcCh5rZbWZ2h5kdW6sAi9EUHREZj0oSXiXr0k4A5gB/R1ij9nIze9E+b2T2QTPbYmZbHnts/IuaaYqOiIxHJVPLKlmXtg+4w91zwANmdj8hAW7OP8jdLwUuhXAPb7xBa4qOiIxHJUWLCYSixZHAI4QkdrK735t3zLGEQsYpZjYNuAt4tbs/Xup9NbVMROqhqqJFhevS3gg8bmb3Ab3AuWMlu1rQODwRea5qtS6tA2dHr7obHoe3bt06FixYwMaNG1m2bBmAurUiUlImn5aicXgiUspYXdpMJjw9KltESmm4x0NpHJ6IjEcmE57G4YnIeGTyEe8ahyci45HJe3gikn2VLE4Oz32B8oa7hwcahyeSdfkLkg+/im2vpUwmvO7ubpYvX87AwADuzsDAAMuXL1fSE5ExZbJLO3PmTB599FFyudzIttbWVg466CAefvjhMb5TRNLMzKq+qmu4Lm1fXx+5XI7TTz+dJ554gtNPP51cLkdfX1/SoUmKmFnZlzSXTCY8gCVLlrB27VqmTp3K2rVrWbJkSdIhScrEfX9I0i+zCW/z5s2jxuFt3ry5/DeJSFPL5Dg8gO3bt7No0aKRr1taWhKMRkSyIJNXeDNnzmTv3r1MnjwZYGQO7cyZM8t8p4g0s0wmvG3btjF9+nQGBwcBGBwcZPr06WzbVte1g0Qk4zKZ8Hbt2kUul2P27NmYGbNnzyaXy7Fr166kQ2t6qoxKmtVsIe7ouHebmZtZ0TEwtTQwMDDc5qivJVlJVUbb29srSrTljmlvb69LfJIOZYsW0ULcF5O3ELeZbchfiDs67oXAWcDP6hFoocHBQXbu3MnQ0BA7d+4c6d5Kc+rv769JMtUVaGOr1ULcAJ8GPgfEknnMjP7+fiCc7DpRRaScmizEbWaHAzPd/bqx3qhW69JC6Cblz7TQIFIRKaeScXhjLsRtZvsBXwJOLfdGtVqXFmDSpEn84Ac/4JJLLmHWrFlMmjRJRYsm5hdMgZVTa/M+Uhft7e0jvbKxjNVba2trY8eOHeOOoRYLcb8Q6AR+GAU6HdhgZie4e90eeDc8Bm/4ym7y5MlKeDGrxQkM1Z/EALbqyZrdw/OVVb+NFFGL+6zV3rqqJOFtBuaYWQdhIe6TgJOHd7r7TmBaXkA/BD5ez2Q3YcIE9uzZM9weAHv27GHChMxOHMkkFQoka8pmCHffY2bDC3G3AF8bXogb2OLuG+od5LD8X4w9e/aMDEV58MEHRx2j+3nxSFs3shaJs62trQaRSFpl8nl4ENazuOyyy9i1axeTJk3itNNOY82aNTWMUMqp1YdLXB9S+jBMWA0+HMP77Bxzd8OtS5tPJ3FylPDkuajRwz3LvsdYCU83vaQq6kZKlijhybhV8mmtqypJk0w+PEBEZDx0hScisan2Fki1tz+U8EQkFmm4BaIurYg0DV3hNYBKuwlxDf0oty2uIkaaYpF0UMJrAIW/tElWRtOUQNIUi6SDurQi0jSU8ESkaSjhiUjTUMITkaahhCciTUNVWhFJRKnhVPUcOlSTdWnN7Gwzu8/Mfmlmt5rZS2sWoYg0pML1iku9aqlswstbl/atwGHAUjM7rOCwu4D57v5K4LuE5RqbQnd3N52dnbS0tNDZ2Ul3d3fSIYlICTVZl9bde9396ejLOwgL/VStFqvJ13Ml+e7ubpYvX87AwADuzsDAAMuXL1fSk0xoyg/rCi4n3w1cnvf1+4GvjnH8V4FPlXvfI444wssJ4VWnFu9RyowZM7y1tdUJy1Y64K2trT5jxoy6tenu3tbWNqrN8bza2trqGqOkW1dXl3d0dHhPT4/v3r3be3p6vKOjw7u6upIOrWqEtXaK5p1KrvDGXJd21IFm7wPmAxeV2F+zhbjToK+vj1wuN2pB8FwuR19fX13bHV4trJpXJcsrSuNavXo169atY+HChbS2trJw4ULWrVvH6tWrkw6trsquaWFmbwBWuvvi6OvzANz9MwXHHQWsAd7i7tvKNVzJmhZxPQO/mvdesmQJ11577ci2448/nuuuu66u8zjT/nOR9GtpaWFwcJDW1taRbblcjsmTJ7N3794EI6veWGtaVHKFN7IurZlNJKxLO2ppRjM7HLgEOKGSZNdINm3aRG9vL7lcjt7eXjZt2pR0SCIlDd/bHhoaYuLEiaPud0+cOJGhoaGGXie4bMJz9z3A8Lq0W4GrPFqX1sxOiA67CHgB8B0zu9vMYlurNinDJ8W2bdtYtGgREydOZNGiRWzbtm1kfyOfOJJNw7c0urq66OjooKenB4Cenh46Ojro6upq6Cv/VC/TmPau2+LFi7nppptoa2ujv79/5M9jjjmGG2+8sS5tArGt7ymNrbu7m9WrV3Pvvfcyb948VqxYwdKlS5MOq2rZXZc2A7/Yixcv5uabb8bdMTOOPvro+iY70v9BINnSaOdCZhNemn6x29vbq65strW1sWPHjqpjSdPPRdItTedtXLQQdw3sOGsvMKXKd8l29UuyR+ftaEp4FbJVT1b9Hm1tbexYWX0skPxyd5INaTtvk6aEV6EKxivG1kVMUyySbpWcB810vijhjVMlK2KBFpIRSZPUJ7y0dt2UyESyJ9UJT5fjIrWVxEM30yTVCU9EaqtRE1mllPAagO4nilRGCa8BKJGJVEarlolI01DCE5GmoYQnIk0jU/fwmr2kLiLVyVTCUyITkWqoSysiTUMJT0SahhKeiDSNxJ54bGaPAX+swVtNA7bX4H2qlZY4QLGUoliKa7RYXuruBxTbkVjCqxUz21Lqcc7NGAcollIUS3HNFIu6tCLSNJTwRKRpNELCuzTpACJpiQMUSymKpbimiSXz9/BERCrVCFd4IiIVUcITkaahhDcOZqafm0gGZerhASnyiJmtB77p7vckFYSZvQ24wd2HkopBZLzM7GXAkTw72LjH3X9f1zazWLQws9nAK4EX5G93966Y2n878D5gCbAVuALocvfH4mg/L45HgSHgf4Ar3P1XcbZfJB4DXuju+yx3b2ZTgKc84RPOzNqBpcAp7v7amNo8CDgH+FugHdgB/Bj4krv/OY4Y8mKZBCwHjgcOBLYBG4CvuPuuGOP4T+AMoA/4P+AlwAxgrbufVbeG3T1TL+A84BlgC/CTvNePE4jlRcCHgI3AIOHEeRfQGlP7LYSk+23gaeAu4KPAgQn933wM+FaJfeuBsxKKawLwduB70f/T74BzY2p7OvAIcDewKjpfLoz+r/4EvCTGn8Mk4DZgL+GDcvi1NzqHJ8YUx8eB3wCvLdj+2mh73f5vYj/5avDD2g4clnQcReLqAM4HHgK2J9D+FOA04EfRL/W1wLtjjuFuYE6JfS8H7oo5niOArwCPEa6q1gFPxPmBAKwBvgPsV7Ddog+qr8YYy3lRghsEuoH/iP4cjJJeXB8C9xcmu7x9rwd+U7e24/ph1/iHtX/ScRTENAk4Efg+sAvoTTie1wMPAHtjbre/mv01juWe6Kr3u8A7h69eCN2nOBPer4G5JfbNBe6PMZafRcnt1QXbXxOdt7fHFMdA4QdA3r79gIF6tZ3FauNHgUvNbL6Zzcp/xR2ImS0ws0uBR4F/A+4ADnX3hQnEMsnMTjKz6wlXeQ8A/xhzGHui+1X7iLbvjTGW/aP2niEkvlyMbed7CaGbVsxvgYNjjOXlwI3ufnf+Rnf/OXAjMCemOLYDryix76+Bx+vVcBYT3kTgGGAT8GDe64G4AjCzlWb2e0K3EeA4dz/U3T/t7rV45NVzieXNZnY5IemuAn5K6FYucvcr4owF6CXcnynmbKAnrkDc/WXAccBuQtfxz2a2BpgMxFo4cfeiid7d98Qcywso/XvyAPDCmOLoAr5uZqOSvZkdAnyNUISri8xVac3sEeAC4ErCp/eIUidWHWK4AfgGcI27D8bRZok4HgCmEu4RXeHuP00qliieQwlXubcRupLD1bd3AW8E3uDuv00grudFMXwAWES4LXKxu6+Noe3dhHO16G7gRHefVO84oliGCPczHymy+xBgmru3xBDHRML5cRShmz18nrwOuBV4l7vvrkvbGUx4jwIHx5Xc0szMTgKu9hiHE5RjZn9FuNI8EngxoXtyC3CBu/8hydhg5Cri/cAH3P2wGNq7oNwx7r6q3nFEsZQbr+lxJLxhZnYkIekNj8O7xd1vrWubGUx45xK6tf/uKQrezDa4+wkpiOP77n5c0nEkzcx6KdNddPdFMcUygTBu82ie/eW+FVjv7rHdWzSzU8odk8BtkFhlMeE9TBjbtJuCm5vuHnvhYpiZ7XD39qTaz4vjSXefklDbrwC+DnQCPwdOdfcHE4plWYldhwBnESr9+8cQx1TgJuClwA082317K2EI01HuvrPecUSxfAC4z923xNHeGHFcWO4Ydz+/Lm1nMOG9pdQ+d/9RnLHkS1HCe8rd47r5XNj2TYSR+12EK5r93f0dScRSyMxeTBiHdhqhiHGhu/fF0O5aQrI70d0H8rY/H7gK+KO7f7jecURtDgFfdvez42hvjDjWE6rmVuIQd/e6jDDI3FzaJJNaPjMr/ASanL/N3ct+itXJhxJqF8J4rhnuPmhmP6b0cIzYRFPazgU+AlwHvMbrPF+zwDuA1+cnOwB3HzCzM4DbgVgSXoocBXyLMBc91umQmUt4Y10O1+syuFQoRb4u9YlVd2bWQhhwnDOzNwF3JFDYmThctXb3v5jZ5JjbHxFVZj9KmMP6Q2CBu9+bQChTKV4VhTCPNO7bD4dFXdui3P2bMcTwIULhaJOZbSWMeOhy97qvnJbFLu3XCzZNB95CqFa+N4GQgGS7tGb2SuAawhizPsIk7EHg7939FzHGsQv4bN6mc4GL8o+J60PJzP5MmGt8EWHe9T7cve7jAs3sl8A57n5zkX2Lgc+7+9/UO46ovSHKF3LirNK+CHgPIfnNJ9zrvALYUK9iTuYSXjFmdiyw1N3LVqHqGEO/u7cl1PYWwpzIL7q7R08t+RjwXnc/IsY4vkH5X6h/iCmWB8vE4tHg5HrHcSrwGUKX+mp3H4qep/hOwjzbT7p74Yd4vWIZIlSIS11x4u6HxxFLITPrICS+fyLc+51Wl3YaJOHtR5inOTXBGK519+MTavtJoC2/Cxt1cfvjrNhWMr3P3R+KI5Y0MbNzgJWEOdfbCUNTdhEKJxeN8a21jiMVRYtC0SOr3g6cQri/99N6Tc/M4j28wk/l/YGTgYcTCGdEUskucj1wAnB13rbjCQ8ziFPhtCXj2aus4b/H1mVKC3f/QjTn+o08Ow7vdi/y3MBmYmYLCLNfTiRU99cDH67n9MzMJTzCs8zyPU14LFEi3dm8YsHBhOebxVIsiEr7w8mkBbjSzO4kJP6ZhEcj/W+94yjwK8J9xCsIVbg/xdx+arn7U4QJ+kn6Efv+/sTOzFYSuq/thGmRx7n7bbG03Qhd2qQkWSyoZMoSxDdtaZiZdRI+fE4kPBrpm8D33P2ZMb9R6q6CooW7e90vgpKci56ZhGdmP6H8DfE3xxQOkJ5iQRpF91WPBk4lzCpYFD2GSBKStrm0SchSl/byvL8bcDHJD9g8lHAT2CGcLdGz+lfGHUjS63wUMYcwXOgNhMeZ9ycUhzyrsAL7AkL1+ETC79Td+3xHg8nMFV6hNEzlMrMrgW+7+9V5294BvMfdl8YYx3mEx8vfy+hHZnmcV735C+QQnq22nrDGRdNVZtMsGhB+BmGc5IGEe6+r3P17iQYWAyW8595ufrHgeYTq6D7FAnc/McaYtgNvdvf74mqzRByDhErtesJz8fYRx2BfKS4a/nE68K+ERLeVkOi+k2hgMVLCe+7tpq5YYGb3A4e7+9NxtVkijgdJwWBfKc7M+ghPanFCdfTbhEV9Rrj7hgRCi01mEp6ZFT677BrCYMWR+avNevVgZm8F3gt8mTCeaYS6kzIsLVXaJGUp4ZVbsyKRq4c0FAssLAx+GWFQa0EYjV11k8pVcAWOu3fEE00yMpPw0ihFxYLE1/kQyQIlvCqkqFigdT5EKpDFZRrT5HHCEpFJ+zzwiWjgs4iUoCu8KqSlWJDWdT5E0qahKzIxGF4U/OSC7XE/FeR9MbYlklm6wquCigUi2aJ7eNWZAHzd3f/i7nvzX3EGYWatZrbKzP5gZoPRn6ssrPAuIhElvOqkpVjwOcKTYv8ZeFX05yJGry8h0vTUpa1CWooF0ZShV7n743nbpgG/cPdD4opDJO1UtKhOWooFpa4wk77yFEkVJbwqpGVRcMJE8GvNbBXwEGGl+09F20Ukont4VUhRseBfgFsID0W9k7D8Xw/heWciElHCq06ixQIze5OZfdbdd7v7+e7+cnff393nEJYEfE0ccYhkhYoWVUi6WGBm3wfWuvs+yzFGi5OfkfDykSKpoiu86iRdLHg1cEOJfbcQnr4sIhElvOoMFwsWm9nc6KrqGuIrFkwhTG8rppWwroSIRJTwqpN0seDXhLm8xRwT7ReRiBLeOKSoWPAl4BIze2e0Dixmtp+ZvRP4b+CLMcUhkgkahzc+nwTWltjXC6wA6l4scPcuM5sOXAFMih5IOg0YBC5w9+56xyCSJarSjkP0lJRZxR4SYGYTgIfc/eAY45lCWPD6xYQpbre7+5NxtS+SFUp442BmTwEHuvszRfY9D9jm7ioYiKSM7uGNj4oFIhmke3jjM1wsaAGucfehqGjwDkLF9uxEoxORopTwxkHFApFs0j28KqhYIJItSngi0jRUtBCRpqGEJyJNQwlPRJqGEp6INA0lPBFpGv8P9+THtUQNIO0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw node type\n",
    "types = sorted(rep.nodeTypeStat.keys())\n",
    "rep_type_dist = [float(rep.nodeTypeStat[key]) for key in types]\n",
    "print(types)\n",
    "node_type_types = []\n",
    "for models in model_types:\n",
    "    type_dists = []\n",
    "    for model in models:\n",
    "        type_dists.append([float(model.nodeTypeStat.get(key, 0)) for key in types])\n",
    "    node_type_types.append(type_dists)\n",
    "\n",
    "#since we already know the pdf, we can compute the ks distance manually\n",
    "drawBoxDiagram('Node_Type', rep_type_dist, node_type_types, manual_ks, 6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x144 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# draw violations\n",
    "violation_types = []\n",
    "for models in model_types:\n",
    "        violation_types.append([model.violations for model in models])\n",
    "drawBoxDiagram('Violations', None, violation_types, lambda a, b:b, 7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}