new_analyser.ipynb 89.3 KB
Newer Older
1
2
3
4
{
 "cells": [
  {
   "cell_type": "code",
5
   "execution_count": 16,
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import pandas as pd\n",
    "from pandas import DataFrame, Series\n",
    "import numpy as np\n",
    "import math\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.patches as mpatches\n",
    "import matplotlib.colors as colors\n",
    "from matplotlib.legend_handler import HandlerLine2D, HandlerTuple\n",
    "from matplotlib.colors import LinearSegmentedColormap\n",
    "from scipy import stats\n",
21
22
23
24
    "import scikit_posthocs as sp\n",
    "import sys\n",
    "\n",
    "from mpl_toolkits.mplot3d import axes3d"
25
26
27
28
29
30
31
32
33
34
35
36
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "AllName=\"dataG.pkl\"\n",
    "ResizesName=\"dataM.pkl\"\n",
    "matrixIt=\"dataL.pkl\"\n",
    "matrixIt_Total=\"data_L_Total.csv\"\n",
37
    "n_cores=20\n",
38
39
40
    "repet = 5 #CAMBIAR EL NUMERO SEGUN NUMERO DE EJECUCIONES POR CONFIG\n",
    "\n",
    "p_value = 0.05\n",
41
    "processes = [2,10,20,40,80,120,160]\n",
42
43
44
45
    "\n",
    "positions = [321, 322, 323, 324, 325]\n",
    "positions_small = [221, 222, 223, 224]\n",
    "\n",
46
47
48
49
50
51
52
    "labels = ['(1,10)',   '(1,20)',   '(1,40)',  '(1,80)',  '(1,120)','(1,160)',\n",
    "            '(10,1)', '(10,20)',  '(10,40)', '(10,80)', '(10,120)','(10,160)',\n",
    "            '(20,1)', '(20,10)',  '(20,40)', '(20,80)', '(20,120)','(20,160)',\n",
    "            '(40,1)', '(40,10)',  '(40,20)', '(40,80)', '(40,120)','(40,160)',\n",
    "            '(80,1)', '(80,10)',  '(80,20)', '(80,40)', '(80,120)','(80,160)',\n",
    "            '(120,1)','(120,10)', '(120,20)','(120,40)','(120,80)','(120,160)',\n",
    "            '(160,1)','(160,10)', '(160,20)','(160,40)','(160,80)','(160,120)']\n",
53
    "\n",
54
55
56
57
58
59
    "labelsExpand = ['(1,10)',   '(1,20)',   '(1,40)',  '(1,80)',  '(1,120)','(1,160)',\n",
    "            '(10,20)',  '(10,40)', '(10,80)', '(10,120)','(10,160)',\n",
    "            '(20,40)', '(20,80)', '(20,120)','(20,160)',\n",
    "            '(40,80)', '(40,120)','(40,160)',\n",
    "            '(80,120)','(80,160)',\n",
    "            '(120,160)']\n",
60
    "labelsShrink = ['(10,1)', \n",
61
62
63
64
65
    "            '(20,1)', '(20,10)',\n",
    "            '(40,1)', '(40,10)',  '(40,20)',\n",
    "            '(80,1)', '(80,10)',  '(80,20)', '(80,40)',\n",
    "            '(120,1)','(120,10)', '(120,20)','(120,40)','(120,80)',\n",
    "            '(160,1)','(160,10)', '(160,20)','(160,40)','(160,80)','(160,120)']\n",
66
    "\n",
67
68
69
    "#                       WORST        BEST\n",
    "labels_dist = ['null', 'SpreadFit', 'CompactFit']\n",
    "                  #0          #1                #2                        #3\n",
70
71
    "labelsMethods = ['Baseline', 'Baseline single','Baseline - Asynchronous','Baseline single - Asynchronous',\n",
    "                 'Merge','Merge single','Merge - Asynchronous','Merge single - Asynchronous']\n",
72
73
    "                  #4      #5             #6                     #7\n",
    "    \n",
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
    "colors_spawn = ['green','springgreen','blue','darkblue','red','darkred','darkgoldenrod','olive','violet']\n",
    "linestyle_spawn = ['-', '--', '-.', ':']\n",
    "markers_spawn = ['.','v','s','p', 'h','d','X','P','^']\n",
    "\n",
    "OrMult_patch = mpatches.Patch(hatch='', facecolor='green', label='Baseline')\n",
    "OrSing_patch = mpatches.Patch(hatch='', facecolor='springgreen', label='Baseline single')\n",
    "OrPthMult_patch = mpatches.Patch(hatch='//', facecolor='blue', label='Baseline - Asyncrhonous')\n",
    "OrPthSing_patch = mpatches.Patch(hatch='\\\\', facecolor='darkblue', label='Baseline single - Asyncrhonous')\n",
    "MergeMult_patch = mpatches.Patch(hatch='||', facecolor='red', label='Merge')\n",
    "MergeSing_patch = mpatches.Patch(hatch='...', facecolor='darkred', label='Merge single')\n",
    "MergePthMult_patch = mpatches.Patch(hatch='xx', facecolor='yellow', label='Merge - Asyncrhonous')\n",
    "MergePthSing_patch = mpatches.Patch(hatch='++', facecolor='olive', label='Merge single - Asyncrhonous')\n",
    "\n",
    "handles_spawn = [OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
94
   "outputs": [],
95
96
97
98
   "source": [
    "dfG = pd.read_pickle( AllName )\n",
    "\n",
    "dfG['ADR'] = (dfG['ADR'] / dfG['DR']) * 100\n",
99
    "dfG['SDR'] = (dfG['SDR'] / dfG['DR']) * 100\n",
100
    "       \n",
101
    "group = dfG.groupby(['Groups','ADR','Spawn_Method','Redistribution_Method', 'Redistribution_Strategy'])['T_total']\n",
102
103
    "\n",
    "grouped_aggG = group.agg(['median'])\n",
104
105
    "grouped_aggG.rename(columns={'median':'T_total'}, inplace=True)\n",
    "grouped_aggG.to_excel(\"resultG.xlsx\") "
106
107
108
109
   ]
  },
  {
   "cell_type": "code",
110
   "execution_count": 23,
111
112
113
114
   "metadata": {},
   "outputs": [
    {
     "data": {
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
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>T_total</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Groups</th>\n",
       "      <th>ADR</th>\n",
       "      <th>Spawn_Method</th>\n",
       "      <th>Redistribution_Method</th>\n",
       "      <th>Redistribution_Strategy</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">(2, 10)</th>\n",
       "      <th rowspan=\"2\" valign=\"top\">0.0</th>\n",
       "      <th rowspan=\"2\" valign=\"top\">(0, 0)</th>\n",
       "      <th>(0, 0)</th>\n",
       "      <th>(1, 1)</th>\n",
       "      <td>389.577585</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(0, 1)</th>\n",
       "      <th>(1, 1)</th>\n",
       "      <td>389.559350</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">96.6</th>\n",
       "      <th rowspan=\"3\" valign=\"top\">(0, 0)</th>\n",
       "      <th rowspan=\"2\" valign=\"top\">(0, 0)</th>\n",
       "      <th>(1, 1)</th>\n",
       "      <td>390.670604</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(1, 2)</th>\n",
       "      <td>390.207550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(0, 1)</th>\n",
       "      <th>(1, 1)</th>\n",
       "      <td>390.094789</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <th>...</th>\n",
       "      <th>...</th>\n",
       "      <th>...</th>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"5\" valign=\"top\">(160, 120)</th>\n",
       "      <th>0.0</th>\n",
       "      <th>(0, 0)</th>\n",
       "      <th>(0, 1)</th>\n",
       "      <th>(1, 1)</th>\n",
       "      <td>143.140648</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"4\" valign=\"top\">96.6</th>\n",
       "      <th rowspan=\"4\" valign=\"top\">(0, 0)</th>\n",
       "      <th rowspan=\"2\" valign=\"top\">(0, 0)</th>\n",
       "      <th>(1, 1)</th>\n",
       "      <td>147.587313</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(1, 2)</th>\n",
       "      <td>146.947540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">(0, 1)</th>\n",
       "      <th>(1, 1)</th>\n",
       "      <td>142.850494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>(1, 2)</th>\n",
       "      <td>143.274009</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>252 rows × 1 columns</p>\n",
       "</div>"
      ],
220
      "text/plain": [
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
       "                                                                               T_total\n",
       "Groups     ADR  Spawn_Method Redistribution_Method Redistribution_Strategy            \n",
       "(2, 10)    0.0  (0, 0)       (0, 0)                (1, 1)                   389.577585\n",
       "                             (0, 1)                (1, 1)                   389.559350\n",
       "           96.6 (0, 0)       (0, 0)                (1, 1)                   390.670604\n",
       "                                                   (1, 2)                   390.207550\n",
       "                             (0, 1)                (1, 1)                   390.094789\n",
       "...                                                                                ...\n",
       "(160, 120) 0.0  (0, 0)       (0, 1)                (1, 1)                   143.140648\n",
       "           96.6 (0, 0)       (0, 0)                (1, 1)                   147.587313\n",
       "                                                   (1, 2)                   146.947540\n",
       "                             (0, 1)                (1, 1)                   142.850494\n",
       "                                                   (1, 2)                   143.274009\n",
       "\n",
       "[252 rows x 1 columns]"
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
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grouped_aggG"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Total_Groups</th>\n",
       "      <th>Total_Stages</th>\n",
       "      <th>Granularity</th>\n",
       "      <th>SDR</th>\n",
       "      <th>ADR</th>\n",
       "      <th>DR</th>\n",
       "      <th>Redistribution_Method</th>\n",
       "      <th>Redistribution_Strategy</th>\n",
       "      <th>Spawn_Method</th>\n",
       "      <th>Spawn_Strategy</th>\n",
       "      <th>...</th>\n",
       "      <th>Stage_Bytes</th>\n",
       "      <th>Iters</th>\n",
       "      <th>Asynch_Iters</th>\n",
       "      <th>T_iter</th>\n",
       "      <th>T_stages</th>\n",
       "      <th>T_spawn</th>\n",
       "      <th>T_spawn_real</th>\n",
       "      <th>T_SR</th>\n",
       "      <th>T_AR</th>\n",
       "      <th>T_total</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>(0, 1)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>((0.317149, 0.217414, 0.134276, 0.148773, 0.15...</td>\n",
       "      <td>(((0.010701, 0.015691, 0.005213, 0.280889), (0...</td>\n",
       "      <td>(2.954793,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>(0.604612,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>132.377707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>(0, 1)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>((0.234715, 0.150659, 0.147628, 0.130321, 0.13...</td>\n",
       "      <td>(((0.010705, 0.020385, 0.016089, 0.171352), (0...</td>\n",
       "      <td>(2.997034,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>(0.521934,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>138.576342</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>(0, 1)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>((0.224323, 0.165911, 0.147396, 0.139989, 0.12...</td>\n",
       "      <td>(((0.011214, 0.003196, 0.004736, 0.187174), (0...</td>\n",
       "      <td>(2.962994,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>(0.558318,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>154.978141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>(0, 1)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>((0.211829, 0.151569, 0.152718, 0.128219, 0.11...</td>\n",
       "      <td>(((0.0107, 0.020957, 0.00406, 0.174168), (0.01...</td>\n",
       "      <td>(3.049718,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>(0.509169,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>137.381302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3947883504</td>\n",
       "      <td>(0, 1)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 1)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>((0.211283, 0.148917, 0.133463, 0.135542, 0.13...</td>\n",
       "      <td>(((0.010703, 0.010967, 0.000106, 0.171724), (0...</td>\n",
       "      <td>(3.106215,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>(0.637513,)</td>\n",
       "      <td>(0,)</td>\n",
       "      <td>142.663098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>835</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>134228039</td>\n",
       "      <td>96.6</td>\n",
       "      <td>3947883503</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(2, 0)</td>\n",
       "      <td>((0.161252, 0.143764, 0.143709, 0.143632, 0.14...</td>\n",
       "      <td>(((0.124864, 0.000256, 4.5e-05, 0.036086), (0....</td>\n",
       "      <td>(2.302374,)</td>\n",
       "      <td>(2.236232,)</td>\n",
       "      <td>(0.111917,)</td>\n",
       "      <td>(1.997651,)</td>\n",
       "      <td>146.363428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>836</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>134228039</td>\n",
       "      <td>96.6</td>\n",
       "      <td>3947883503</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(2, 0)</td>\n",
       "      <td>((0.159672, 0.142413, 0.142332, 0.142328, 0.14...</td>\n",
       "      <td>(((0.124902, 0.000214, 2.8e-05, 0.034524), (0....</td>\n",
       "      <td>(5.546667,)</td>\n",
       "      <td>(2.110774,)</td>\n",
       "      <td>(0.551958,)</td>\n",
       "      <td>(1.983407,)</td>\n",
       "      <td>150.696184</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>837</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>134228039</td>\n",
       "      <td>96.6</td>\n",
       "      <td>3947883503</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(2, 0)</td>\n",
       "      <td>((0.161999, 0.144079, 0.144051, 0.144055, 0.14...</td>\n",
       "      <td>(((0.124852, 0.00023, 7.5e-05, 0.036838), (0.1...</td>\n",
       "      <td>(3.725691,)</td>\n",
       "      <td>(2.051036,)</td>\n",
       "      <td>(0.12372,)</td>\n",
       "      <td>(2.11543,)</td>\n",
       "      <td>144.347781</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>838</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>134228039</td>\n",
       "      <td>96.6</td>\n",
       "      <td>3947883503</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(2, 0)</td>\n",
       "      <td>((0.159451, 0.142453, 0.142414, 0.142388, 0.14...</td>\n",
       "      <td>(((0.124922, 0.000181, 4.6e-05, 0.0343), (0.12...</td>\n",
       "      <td>(3.066206,)</td>\n",
       "      <td>(1.990711,)</td>\n",
       "      <td>(0.119849,)</td>\n",
       "      <td>(2.015445,)</td>\n",
       "      <td>144.380533</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>839</th>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>134228039</td>\n",
       "      <td>96.6</td>\n",
       "      <td>3947883503</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>(0, 0)</td>\n",
       "      <td>(1, 2)</td>\n",
       "      <td>...</td>\n",
       "      <td>(0, 8, 8, 33176880)</td>\n",
       "      <td>(500, 500)</td>\n",
       "      <td>(2, 0)</td>\n",
       "      <td>((0.161346, 0.143941, 0.14389, 0.143897, 0.143...</td>\n",
       "      <td>(((0.124865, 0.000212, 8.1e-05, 0.036188), (0....</td>\n",
       "      <td>(3.480278,)</td>\n",
       "      <td>(2.165749,)</td>\n",
       "      <td>(0.119847,)</td>\n",
       "      <td>(1.868907,)</td>\n",
       "      <td>142.924103</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1260 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Total_Groups  Total_Stages  Granularity         SDR   ADR          DR  \\\n",
       "0               2             4       100000  3947883504   0.0  3947883504   \n",
       "1               2             4       100000  3947883504   0.0  3947883504   \n",
       "2               2             4       100000  3947883504   0.0  3947883504   \n",
       "3               2             4       100000  3947883504   0.0  3947883504   \n",
       "4               2             4       100000  3947883504   0.0  3947883504   \n",
       "..            ...           ...          ...         ...   ...         ...   \n",
       "835             2             4       100000   134228039  96.6  3947883503   \n",
       "836             2             4       100000   134228039  96.6  3947883503   \n",
       "837             2             4       100000   134228039  96.6  3947883503   \n",
       "838             2             4       100000   134228039  96.6  3947883503   \n",
       "839             2             4       100000   134228039  96.6  3947883503   \n",
       "\n",
       "    Redistribution_Method Redistribution_Strategy Spawn_Method Spawn_Strategy  \\\n",
       "0                  (0, 1)                  (1, 1)       (0, 0)         (1, 1)   \n",
       "1                  (0, 1)                  (1, 1)       (0, 0)         (1, 1)   \n",
       "2                  (0, 1)                  (1, 1)       (0, 0)         (1, 1)   \n",
       "3                  (0, 1)                  (1, 1)       (0, 0)         (1, 1)   \n",
       "4                  (0, 1)                  (1, 1)       (0, 0)         (1, 1)   \n",
       "..                    ...                     ...          ...            ...   \n",
       "835                (0, 0)                  (1, 2)       (0, 0)         (1, 2)   \n",
       "836                (0, 0)                  (1, 2)       (0, 0)         (1, 2)   \n",
       "837                (0, 0)                  (1, 2)       (0, 0)         (1, 2)   \n",
       "838                (0, 0)                  (1, 2)       (0, 0)         (1, 2)   \n",
       "839                (0, 0)                  (1, 2)       (0, 0)         (1, 2)   \n",
       "\n",
       "     ...          Stage_Bytes       Iters Asynch_Iters  \\\n",
       "0    ...  (0, 8, 8, 33176880)  (500, 500)       (0, 0)   \n",
       "1    ...  (0, 8, 8, 33176880)  (500, 500)       (0, 0)   \n",
       "2    ...  (0, 8, 8, 33176880)  (500, 500)       (0, 0)   \n",
       "3    ...  (0, 8, 8, 33176880)  (500, 500)       (0, 0)   \n",
       "4    ...  (0, 8, 8, 33176880)  (500, 500)       (0, 0)   \n",
       "..   ...                  ...         ...          ...   \n",
       "835  ...  (0, 8, 8, 33176880)  (500, 500)       (2, 0)   \n",
       "836  ...  (0, 8, 8, 33176880)  (500, 500)       (2, 0)   \n",
       "837  ...  (0, 8, 8, 33176880)  (500, 500)       (2, 0)   \n",
       "838  ...  (0, 8, 8, 33176880)  (500, 500)       (2, 0)   \n",
       "839  ...  (0, 8, 8, 33176880)  (500, 500)       (2, 0)   \n",
       "\n",
       "                                                T_iter  \\\n",
       "0    ((0.317149, 0.217414, 0.134276, 0.148773, 0.15...   \n",
       "1    ((0.234715, 0.150659, 0.147628, 0.130321, 0.13...   \n",
       "2    ((0.224323, 0.165911, 0.147396, 0.139989, 0.12...   \n",
       "3    ((0.211829, 0.151569, 0.152718, 0.128219, 0.11...   \n",
       "4    ((0.211283, 0.148917, 0.133463, 0.135542, 0.13...   \n",
       "..                                                 ...   \n",
       "835  ((0.161252, 0.143764, 0.143709, 0.143632, 0.14...   \n",
       "836  ((0.159672, 0.142413, 0.142332, 0.142328, 0.14...   \n",
       "837  ((0.161999, 0.144079, 0.144051, 0.144055, 0.14...   \n",
       "838  ((0.159451, 0.142453, 0.142414, 0.142388, 0.14...   \n",
       "839  ((0.161346, 0.143941, 0.14389, 0.143897, 0.143...   \n",
       "\n",
       "                                              T_stages      T_spawn  \\\n",
       "0    (((0.010701, 0.015691, 0.005213, 0.280889), (0...  (2.954793,)   \n",
       "1    (((0.010705, 0.020385, 0.016089, 0.171352), (0...  (2.997034,)   \n",
       "2    (((0.011214, 0.003196, 0.004736, 0.187174), (0...  (2.962994,)   \n",
       "3    (((0.0107, 0.020957, 0.00406, 0.174168), (0.01...  (3.049718,)   \n",
       "4    (((0.010703, 0.010967, 0.000106, 0.171724), (0...  (3.106215,)   \n",
       "..                                                 ...          ...   \n",
       "835  (((0.124864, 0.000256, 4.5e-05, 0.036086), (0....  (2.302374,)   \n",
       "836  (((0.124902, 0.000214, 2.8e-05, 0.034524), (0....  (5.546667,)   \n",
       "837  (((0.124852, 0.00023, 7.5e-05, 0.036838), (0.1...  (3.725691,)   \n",
       "838  (((0.124922, 0.000181, 4.6e-05, 0.0343), (0.12...  (3.066206,)   \n",
       "839  (((0.124865, 0.000212, 8.1e-05, 0.036188), (0....  (3.480278,)   \n",
       "\n",
       "    T_spawn_real         T_SR         T_AR     T_total  \n",
       "0           (0,)  (0.604612,)         (0,)  132.377707  \n",
       "1           (0,)  (0.521934,)         (0,)  138.576342  \n",
       "2           (0,)  (0.558318,)         (0,)  154.978141  \n",
       "3           (0,)  (0.509169,)         (0,)  137.381302  \n",
       "4           (0,)  (0.637513,)         (0,)  142.663098  \n",
       "..           ...          ...          ...         ...  \n",
       "835  (2.236232,)  (0.111917,)  (1.997651,)  146.363428  \n",
       "836  (2.110774,)  (0.551958,)  (1.983407,)  150.696184  \n",
       "837  (2.051036,)   (0.12372,)   (2.11543,)  144.347781  \n",
       "838  (1.990711,)  (0.119849,)  (2.015445,)  144.380533  \n",
       "839  (2.165749,)  (0.119847,)  (1.868907,)  142.924103  \n",
       "\n",
       "[1260 rows x 25 columns]"
      ]
     },
     "execution_count": 10,
649
650
651
652
653
654
655
656
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfG"
   ]
  },
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "used_direction='s'\n",
    "test_parameter='T_total'\n",
    "    \n",
    "if used_direction=='s':\n",
    "    df_aux=grouped_aggG.query('NP > NS')\n",
    "    used_labels=labelsShrink\n",
    "    name_fig=\"Shrink\"\n",
    "    np_aux = [10, 20,20, 40,40,40, 80,80,80,80, 120,120,120,120,120]\n",
    "    nc_aux = [1,  1,10,  1,10,20,  1,10,20,40,  1,10,20,40,80]\n",
    "elif used_direction=='e':\n",
    "    df_aux=grouped_aggM.query('NP < NS')\n",
    "    used_labels=labelsExpand\n",
    "    name_fig=\"Expand\"\n",
    "    np_aux = [1,1,1,1,1,        10,10,10,10,  20,20,20,  40,40,  80 ]\n",
    "    nc_aux = [10,20,40,80,120,  20,40,80,120, 40,80,120, 80,120, 120]\n",
    "elif used_direction=='a':\n",
    "    df_aux=grouped_aggM\n",
    "    used_labels=labels\n",
    "    name_fig=\"All\"\n",
    "    np_aux = [1,1,1,1,1,        10,10,10,10,10, 20,20,20,20,20, 40,40,40,40,40, 80,80,80,80,80, 120,120,120,120,120]\n",
    "    nc_aux = [10,20,40,80,120,  1,20,40,80,120, 1,10,40,80,120, 1,10,20,80,120, 1,10,20,40,120, 1,10,20,40,80]\n",
    "    \n",
    "x = np.arange(len(used_labels))\n",
    "handles = []\n",
    "\n",
    "f=plt.figure(figsize=(20, 12))\n",
    "#ax=f.add_subplot(111)\n",
    "ax = plt.axes(projection='3d')\n",
    "ax.azim = -60\n",
    "ax.dist = 10\n",
    "ax.elev = 10\n",
    "ax.set_xlabel(\"NP\", fontsize=20)\n",
    "ax.set_ylabel(\"NC\", fontsize=20)\n",
    "ax.set_zlabel(\"Alpha\", fontsize=20)\n",
    "ax.tick_params(axis='both', which='major', labelsize=24)\n",
    "ax.tick_params(axis='both', which='minor', labelsize=22)\n",
    "\n",
    "for cst_aux in [1,3]:\n",
    "    df_aux2 = df_aux.query('Cst == @cst_aux')\n",
    "    for css_aux in [0,1]:\n",
    "        array_aux = df_aux2.query('Css == @css_aux')['alpha'].values\n",
    "        ax.plot3D(np_aux, nc_aux, array_aux, colors_spawn[cst_aux*2 + css_aux])\n",
    "      \n",
    "        handles.append(handles_spawn[cst_aux*2 + css_aux])\n",
    "        \n",
    "#ax.set_zlim(0,4)\n",
    "plt.legend(handles=handles, loc='best', fontsize=20,ncol=2,framealpha=1)\n",
    "        \n",
    "f.tight_layout()\n",
    "f.savefig(\"Images/Spawn/3dPlot_\"+name_fig+'_'+test_parameter+\".png\", format=\"png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class MalleabilityIterator:\n",
    "    def __init__(self):\n",
    "        self._sm = [0,1]\n",
    "        self._rm = [0,1]\n",
    "        self._rs = [1,2]\n",
    "        self._adr = [0,96.6]\n",
    "        self._arrays = [self._sm, self._rm, self._rs, self._adr]\n",
    "        self._max_index = len(self._sm) * len(self._rm) * len(self._rs) * len(self._adr)\n",
    "        self._in_use = [0]*4\n",
    "        self._index = 0\n",
    "\n",
    "    def __iter__(self):\n",
    "        return self\n",
    "\n",
    "    def __next__(self):\n",
    "        if self._index < self._max_index:\n",
    "            for index in len(self._arrays):\n",
    "                if self._in_use[index] < len(self._arrays[index])-1:\n",
    "                    self._in_use[index]+=1\n",
    "                    break\n",
    "                elif index == len(self._arrays) - 1 && self._in_use[index] == len(self._arrays[index])-1:\n",
    "            result = []\n",
    "            for index in len(self._arrays):\n",
    "                result.append(self._arrays[index][self._in_use[index]])\n",
    "            \n",
    "            self._index += 1\n",
    "            return tuple(result)\n",
    "        else:\n",
    "            raise StopIteration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for sp_method in [0,1]:\n",
    "    df_aux = grouped_aggG.query('Spawn_Method == @sp_method')\n",
    "    for rp_method in [0,1]:\n",
    "        df_aux = grouped_aggG.query('Redistribution_Method == @rp_method')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[-0.00982064 -0.0113957  -0.01319036 ... -0.01522953 -0.01319036\n",
      "  -0.0113957 ]\n",
      " [-0.0113957  -0.01322338 -0.01530587 ... -0.01767209 -0.01530587\n",
      "  -0.01322338]\n",
      " [-0.01319036 -0.01530587 -0.01771632 ... -0.02045518 -0.01771632\n",
      "  -0.01530587]\n",
      " ...\n",
      " [-0.01200234 -0.01414685 -0.01660867 ...  0.02918791  0.03019517\n",
      "   0.03085725]\n",
      " [-0.01097235 -0.01288301 -0.01507265 ...  0.01583738  0.01709512\n",
      "   0.01804782]\n",
      " [-0.00988645 -0.01157475 -0.01350698 ...  0.00702321  0.0083816\n",
      "   0.00947216]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 1, subplot_kw={'projection': '3d'})\n",
    "\n",
    "# Get the test data\n",
    "X, Y, Z = axes3d.get_test_data(0.05)\n",
    "\n",
    "\n",
    "Z[0] = 200\n",
    "\n",
    "ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)\n",
    "ax.set_proj_type('ortho')  # FOV = 0 deg\n",
    "ax.set_title(\"'ortho'\\nfocal_length = ∞\", fontsize=10)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-3.0000000e+01 -2.9500000e+01 -2.9000000e+01 -2.8500000e+01\n",
      " -2.8000000e+01 -2.7500000e+01 -2.7000000e+01 -2.6500000e+01\n",
      " -2.6000000e+01 -2.5500000e+01 -2.5000000e+01 -2.4500000e+01\n",
      " -2.4000000e+01 -2.3500000e+01 -2.3000000e+01 -2.2500000e+01\n",
      " -2.2000000e+01 -2.1500000e+01 -2.1000000e+01 -2.0500000e+01\n",
      " -2.0000000e+01 -1.9500000e+01 -1.9000000e+01 -1.8500000e+01\n",
      " -1.8000000e+01 -1.7500000e+01 -1.7000000e+01 -1.6500000e+01\n",
      " -1.6000000e+01 -1.5500000e+01 -1.5000000e+01 -1.4500000e+01\n",
      " -1.4000000e+01 -1.3500000e+01 -1.3000000e+01 -1.2500000e+01\n",
      " -1.2000000e+01 -1.1500000e+01 -1.1000000e+01 -1.0500000e+01\n",
      " -1.0000000e+01 -9.5000000e+00 -9.0000000e+00 -8.5000000e+00\n",
      " -8.0000000e+00 -7.5000000e+00 -7.0000000e+00 -6.5000000e+00\n",
      " -6.0000000e+00 -5.5000000e+00 -5.0000000e+00 -4.5000000e+00\n",
      " -4.0000000e+00 -3.5000000e+00 -3.0000000e+00 -2.5000000e+00\n",
      " -2.0000000e+00 -1.5000000e+00 -1.0000000e+00 -5.0000000e-01\n",
      " -1.0658141e-13  5.0000000e-01  1.0000000e+00  1.5000000e+00\n",
      "  2.0000000e+00  2.5000000e+00  3.0000000e+00  3.5000000e+00\n",
      "  4.0000000e+00  4.5000000e+00  5.0000000e+00  5.5000000e+00\n",
      "  6.0000000e+00  6.5000000e+00  7.0000000e+00  7.5000000e+00\n",
      "  8.0000000e+00  8.5000000e+00  9.0000000e+00  9.5000000e+00\n",
      "  1.0000000e+01  1.0500000e+01  1.1000000e+01  1.1500000e+01\n",
      "  1.2000000e+01  1.2500000e+01  1.3000000e+01  1.3500000e+01\n",
      "  1.4000000e+01  1.4500000e+01  1.5000000e+01  1.5500000e+01\n",
      "  1.6000000e+01  1.6500000e+01  1.7000000e+01  1.7500000e+01\n",
      "  1.8000000e+01  1.8500000e+01  1.9000000e+01  1.9500000e+01\n",
      "  2.0000000e+01  2.0500000e+01  2.1000000e+01  2.1500000e+01\n",
      "  2.2000000e+01  2.2500000e+01  2.3000000e+01  2.3500000e+01\n",
      "  2.4000000e+01  2.4500000e+01  2.5000000e+01  2.5500000e+01\n",
      "  2.6000000e+01  2.6500000e+01  2.7000000e+01  2.7500000e+01\n",
      "  2.8000000e+01  2.8500000e+01  2.9000000e+01  2.9500000e+01]\n"
     ]
    }
   ],
   "source": [
    "print(X[1])"
   ]
  },
862
863
864
865
866
867
868
869
870
871
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
872
   "display_name": "Python 3 (ipykernel)",
873
874
875
876
877
878
879
880
881
882
883
884
885
   "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",
886
   "version": "3.9.7"
887
888
889
890
891
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}