Commit 63f24c68 authored by iker_martin's avatar iker_martin
Browse files
parents 30685e95 9ddb15ea
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 52,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [ "source": [
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"/tmp/ipykernel_9826/2056908859.py:18: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n", "/tmp/ipykernel_3823/2056908859.py:18: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n",
" groupM = dfM.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha']\n" " groupM = dfM.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha']\n"
] ]
} }
...@@ -196,7 +196,7 @@ ...@@ -196,7 +196,7 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"/tmp/ipykernel_9826/1294489315.py:13: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n", "/tmp/ipykernel_3823/1294489315.py:13: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n",
" groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega']\n" " groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega']\n"
] ]
} }
...@@ -244,7 +244,7 @@ ...@@ -244,7 +244,7 @@
"text": [ "text": [
"/home/usuario/miniconda3/lib/python3.9/site-packages/numpy/core/fromnumeric.py:3419: RuntimeWarning: Mean of empty slice.\n", "/home/usuario/miniconda3/lib/python3.9/site-packages/numpy/core/fromnumeric.py:3419: RuntimeWarning: Mean of empty slice.\n",
" return _methods._mean(a, axis=axis, dtype=dtype,\n", " return _methods._mean(a, axis=axis, dtype=dtype,\n",
"/tmp/ipykernel_9826/3028104048.py:17: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n", "/tmp/ipykernel_3823/3028104048.py:17: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n",
" groupLT = dfLT[dfLT['NS'] != 0].groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA']\n" " groupLT = dfLT[dfLT['NS'] != 0].groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA']\n"
] ]
} }
...@@ -283,9 +283,9 @@ ...@@ -283,9 +283,9 @@
"name": "stderr", "name": "stderr",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"/tmp/ipykernel_9826/2150887515.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", "/tmp/ipykernel_3823/2150887515.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
" dfLT_aux = dfLT[dfLT[\"NP\"] == np_aux][dfLT[\"NS\"] == ns_aux][dfLT[\"Cst\"] == cst_aux][dfLT[\"Css\"] == css_aux]\n", " dfLT_aux = dfLT[dfLT[\"NP\"] == np_aux][dfLT[\"NS\"] == ns_aux][dfLT[\"Cst\"] == cst_aux][dfLT[\"Css\"] == css_aux]\n",
"/tmp/ipykernel_9826/2150887515.py:13: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", "/tmp/ipykernel_3823/2150887515.py:13: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n",
" dfM_aux = dfM[dfM[\"NP\"] == np_aux][dfM[\"NS\"] == ns_aux][dfM[\"Css\"] == css_aux]\n" " dfM_aux = dfM[dfM[\"NP\"] == np_aux][dfM[\"NS\"] == ns_aux][dfM[\"Css\"] == css_aux]\n"
] ]
} }
...@@ -548,7 +548,7 @@ ...@@ -548,7 +548,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 30, "execution_count": 15,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
...@@ -572,180 +572,276 @@ ...@@ -572,180 +572,276 @@
" <thead>\n", " <thead>\n",
" <tr style=\"text-align: right;\">\n", " <tr style=\"text-align: right;\">\n",
" <th></th>\n", " <th></th>\n",
" <th>TE</th>\n", " <th>N</th>\n",
" </tr>\n", " <th>%Async</th>\n",
" <tr>\n", " <th>NP</th>\n",
" <th>Groups</th>\n", " <th>N_par</th>\n",
" <th></th>\n", " <th>NS</th>\n",
" <th>Dist</th>\n",
" <th>Compute_tam</th>\n",
" <th>Comm_tam</th>\n",
" <th>Cst</th>\n",
" <th>Css</th>\n",
" <th>Time</th>\n",
" <th>Iters</th>\n",
" <th>Ti</th>\n",
" <th>Tt</th>\n",
" <th>To</th>\n",
" <th>omega</th>\n",
" </tr>\n", " </tr>\n",
" </thead>\n", " </thead>\n",
" <tbody>\n", " <tbody>\n",
" <tr>\n", " <tr>\n",
" <th>1,10</th>\n", " <th>0</th>\n",
" <td>6.369967</td>\n", " <td>0</td>\n",
" </tr>\n", " <td>0.0</td>\n",
" <tr>\n", " <td>40</td>\n",
" <th>1,120</th>\n", " <td>0</td>\n",
" <td>7.105817</td>\n", " <td>10</td>\n",
" </tr>\n", " <td>2</td>\n",
" <tr>\n", " <td>100000</td>\n",
" <th>1,20</th>\n", " <td>0</td>\n",
" <td>6.795948</td>\n", " <td>3</td>\n",
" </tr>\n", " <td>0</td>\n",
" <tr>\n", " <td>0.2</td>\n",
" <th>1,40</th>\n", " <td>3</td>\n",
" <td>6.937367</td>\n", " <td>0.199854</td>\n",
" </tr>\n", " <td>0.0</td>\n",
" <tr>\n", " <td>224.0</td>\n",
" <th>1,80</th>\n", " <td>1</td>\n",
" <td>6.966290</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10,1</th>\n",
" <td>6.056520</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10,120</th>\n",
" <td>6.979421</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10,20</th>\n",
" <td>6.574471</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10,40</th>\n",
" <td>6.838011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10,80</th>\n",
" <td>6.981027</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120,1</th>\n",
" <td>6.348445</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120,10</th>\n",
" <td>6.292254</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120,20</th>\n",
" <td>6.327157</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120,40</th>\n",
" <td>6.321162</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120,80</th>\n",
" <td>6.423317</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20,1</th>\n",
" <td>6.072897</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20,10</th>\n",
" <td>6.073298</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20,120</th>\n",
" <td>7.171862</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20,40</th>\n",
" <td>6.991988</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20,80</th>\n",
" <td>7.069774</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>40,1</th>\n", " <th>1</th>\n",
" <td>6.090644</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.226667</td>\n",
" <td>0.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>40,10</th>\n", " <th>2</th>\n",
" <td>5.739764</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.212055</td>\n",
" <td>0.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>40,120</th>\n", " <th>3</th>\n",
" <td>7.113592</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.374593</td>\n",
" <td>1.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>40,20</th>\n", " <th>4</th>\n",
" <td>6.218595</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.200724</td>\n",
" <td>1.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>40,80</th>\n", " <th>...</th>\n",
" <td>6.992810</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",
" <tr>\n", " <tr>\n",
" <th>80,1</th>\n", " <th>71995</th>\n",
" <td>6.305216</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>120</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.210870</td>\n",
" <td>1.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>80,10</th>\n", " <th>71996</th>\n",
" <td>6.259644</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>120</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.200096</td>\n",
" <td>0.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>80,120</th>\n", " <th>71997</th>\n",
" <td>7.032920</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>120</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.202437</td>\n",
" <td>0.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>80,20</th>\n", " <th>71998</th>\n",
" <td>6.302444</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>120</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.200116</td>\n",
" <td>0.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>80,40</th>\n", " <th>71999</th>\n",
" <td>6.434365</td>\n", " <td>0</td>\n",
" <td>0.0</td>\n",
" <td>120</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>2</td>\n",
" <td>100000</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.2</td>\n",
" <td>3</td>\n",
" <td>0.324975</td>\n",
" <td>1.0</td>\n",
" <td>224.0</td>\n",
" <td>1</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
"</table>\n", "</table>\n",
"<p>72000 rows × 16 columns</p>\n",
"</div>" "</div>"
], ],
"text/plain": [ "text/plain": [
" TE\n", " N %Async NP N_par NS Dist Compute_tam Comm_tam Cst Css Time \\\n",
"Groups \n", "0 0 0.0 40 0 10 2 100000 0 3 0 0.2 \n",
"1,10 6.369967\n", "1 0 0.0 40 0 10 2 100000 0 3 0 0.2 \n",
"1,120 7.105817\n", "2 0 0.0 40 0 10 2 100000 0 3 0 0.2 \n",
"1,20 6.795948\n", "3 0 0.0 40 0 10 2 100000 0 3 0 0.2 \n",
"1,40 6.937367\n", "4 0 0.0 40 0 10 2 100000 0 3 0 0.2 \n",
"1,80 6.966290\n", "... .. ... ... ... .. ... ... ... ... ... ... \n",
"10,1 6.056520\n", "71995 0 0.0 120 0 10 2 100000 0 3 0 0.2 \n",
"10,120 6.979421\n", "71996 0 0.0 120 0 10 2 100000 0 3 0 0.2 \n",
"10,20 6.574471\n", "71997 0 0.0 120 0 10 2 100000 0 3 0 0.2 \n",
"10,40 6.838011\n", "71998 0 0.0 120 0 10 2 100000 0 3 0 0.2 \n",
"10,80 6.981027\n", "71999 0 0.0 120 0 10 2 100000 0 3 0 0.2 \n",
"120,1 6.348445\n", "\n",
"120,10 6.292254\n", " Iters Ti Tt To omega \n",
"120,20 6.327157\n", "0 3 0.199854 0.0 224.0 1 \n",
"120,40 6.321162\n", "1 3 0.226667 0.0 224.0 1 \n",
"120,80 6.423317\n", "2 3 0.212055 0.0 224.0 1 \n",
"20,1 6.072897\n", "3 3 0.374593 1.0 224.0 1 \n",
"20,10 6.073298\n", "4 3 0.200724 1.0 224.0 1 \n",
"20,120 7.171862\n", "... ... ... ... ... ... \n",
"20,40 6.991988\n", "71995 3 0.210870 1.0 224.0 1 \n",
"20,80 7.069774\n", "71996 3 0.200096 0.0 224.0 1 \n",
"40,1 6.090644\n", "71997 3 0.202437 0.0 224.0 1 \n",
"40,10 5.739764\n", "71998 3 0.200116 0.0 224.0 1 \n",
"40,120 7.113592\n", "71999 3 0.324975 1.0 224.0 1 \n",
"40,20 6.218595\n", "\n",
"40,80 6.992810\n", "[72000 rows x 16 columns]"
"80,1 6.305216\n", ]
"80,10 6.259644\n", },
"80,120 7.032920\n", "execution_count": 15,
"80,20 6.302444\n",
"80,40 6.434365"
]
},
"execution_count": 30,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [ "source": [
"grouped_aggG.loc[('2,2',0,2,1)]" "dfL"
] ]
}, },
{ {
...@@ -2628,310 +2724,9 @@ ...@@ -2628,310 +2724,9 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 20, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"Se sigue una distribución guassiana: [False, True, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]\n",
"Un total de: 107 no siguen una gaussiana\n",
" 1 2 3 4 5 6 7 8\n",
"1 False False True True True True True False\n",
"2 False False True True True True True False\n",
"3 True True False False True True True True\n",
"4 True True False False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False False True\n",
"7 True True True True True False False False\n",
"8 False False True True True True False False\n",
"Redimensión 1/10 False Mejores: Merge single, Merge, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 1/20 False Mejores: Merge single, Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True False False False True\n",
"2 True False True False True True True False\n",
"3 False True False True True False False False\n",
"4 True False True False True True True False\n",
"5 False True True True False False False True\n",
"6 False True False True False False False True\n",
"7 False True False True False False False True\n",
"8 True False False False True True True False\n",
"Redimensión 1/40 False Mejores: Merge, Baseline, Merge single, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True False False False True\n",
"2 True False True True True True True False\n",
"3 True True False True True True True True\n",
"4 True True True False True True True False\n",
"5 False True True True False False False True\n",
"6 False True True True False False False True\n",
"7 False True True True False False False True\n",
"8 True False True False True True True False\n",
"Redimensión 1/80 False Mejores: Baseline, Merge, Merge single, Merge - Asynchronous, \n",
"Configuración: 1/120 tiene valores iguales\n",
" 1 2 3 4 5 6 7 8\n",
"1 False False True True True True True False\n",
"2 False False True True True True True False\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 False False True True True True True False\n",
"Redimensión 10/1 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True True\n",
"2 True False True True True True True True\n",
"3 False True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 10/20 False Mejores: Merge single, Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True True\n",
"2 True False True True True True True True\n",
"3 False True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False True True True\n",
"6 True True True True True False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 10/40 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True False\n",
"2 True False False True True True True True\n",
"3 False False False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False True False True\n",
"6 True True True True True False False True\n",
"7 True True True True False False False True\n",
"8 False True True True True True True False\n",
"Redimensión 10/80 False Mejores: Merge single, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True True\n",
"2 True False True True True True True False\n",
"3 False True False True True True True False\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True False False True True True True False\n",
"Redimensión 10/120 False Mejores: Merge, Merge single, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 20/1 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False True True True\n",
"6 True True True True True False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 20/10 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True False\n",
"2 True False True True True True True True\n",
"3 False True False True True True True False\n",
"4 True True True False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False False True\n",
"7 True True True True False False False True\n",
"8 False True False True True True True False\n",
"Redimensión 20/40 False Mejores: Merge, Merge single, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True False\n",
"2 True False True True True True True True\n",
"3 False True False True True True True False\n",
"4 True True True False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False False True\n",
"7 True True True True False False False True\n",
"8 False True False True True True True False\n",
"Redimensión 20/80 False Mejores: Merge, Merge single, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True False\n",
"2 True False True True True True True False\n",
"3 False True False True True True True False\n",
"4 True True True False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False False True\n",
"7 True True True True False False False True\n",
"8 False False False True True True True False\n",
"Redimensión 20/120 False Mejores: Merge, Merge single, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 40/1 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 40/10 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 40/20 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True True\n",
"2 True False True True True True True True\n",
"3 False True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False True True\n",
"7 True True True True False True False True\n",
"8 True True True True True True True False\n",
"Redimensión 40/80 False Mejores: Merge single, Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True False\n",
"2 True False True True True True True True\n",
"3 False True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False True True True\n",
"6 True True True True True False False True\n",
"7 True True True True True False False True\n",
"8 False True True True True True True False\n",
"Redimensión 40/120 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False False True True True True False True\n",
"2 False False True True True True True False\n",
"3 True True False False True True True False\n",
"4 True True False False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False False True\n",
"7 False True True True False False False True\n",
"8 True False False True True True True False\n",
"Redimensión 80/1 False Mejores: Merge, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True False\n",
"2 True False False True True True True True\n",
"3 True False False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False False True\n",
"7 True True True True False False False False\n",
"8 False True True True True True False False\n",
"Redimensión 80/10 False Mejores: Merge, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False True True\n",
"7 True True True True True True False True\n",
"8 True True True True True True True False\n",
"Redimensión 80/20 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True False True True True True True\n",
"2 True False True True True True True True\n",
"3 False True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False False True\n",
"7 True True True True False False False True\n",
"8 True True True True True True True False\n",
"Redimensión 80/40 False Mejores: Merge, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False False True\n",
"7 True True True True True False False True\n",
"8 True True True True True True True False\n",
"Redimensión 80/120 False Mejores: Merge, Merge single, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False False True True False False False True\n",
"2 False False False True False False False True\n",
"3 True False False False True True True False\n",
"4 True True False False True True True False\n",
"5 False False True True False False False True\n",
"6 False False True True False False False True\n",
"7 False False True True False False False True\n",
"8 True True False False True True True False\n",
"Redimensión 120/1 False Mejores: Merge, Baseline, Baseline single, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True False\n",
"2 True False False True True True True True\n",
"3 True False False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False False True\n",
"6 True True True True False False False False\n",
"7 True True True True False False False False\n",
"8 False True True True True False False False\n",
"Redimensión 120/10 False Mejores: Merge, Merge - Asynchronous, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True False\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False False True\n",
"7 True True True True True False False True\n",
"8 False True True True True True True False\n",
"Redimensión 120/20 False Mejores: Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False True True True True True True True\n",
"2 True False True True True True True True\n",
"3 True True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False True False False\n",
"6 True True True True True False True True\n",
"7 True True True True False True False False\n",
"8 True True True True False True False False\n",
"Redimensión 120/40 False Mejores: Merge - Asynchronous, Merge, \n",
" 1 2 3 4 5 6 7 8\n",
"1 False False False True True True True True\n",
"2 False False True True True True True True\n",
"3 False True False True True True True True\n",
"4 True True True False True True True True\n",
"5 True True True True False False True True\n",
"6 True True True True False False False True\n",
"7 True True True True True False False True\n",
"8 True True True True True True True False\n",
"Redimensión 120/80 False Mejores: Merge, \n",
"[[5, 4, 6], [5, 4], [4, 0, 5, 6], [0, 4, 5, 6], None, [4], [5, 4], [4], [5, 6], [4, 5], [4], [4], [4, 5, 6], [4, 5, 6], [4, 5, 6], [4], [4], [4], [5, 4], [4], [4, 6], [4, 6], [4], [4, 6], [4, 5], [4, 0, 1, 6], [4, 6], [4], [6, 4], [4]]\n"
]
}
],
"source": [ "source": [
"checked_type='tc'\n", "checked_type='tc'\n",
"use_perc = False\n", "use_perc = False\n",
...@@ -3157,68 +2952,13 @@ ...@@ -3157,68 +2952,13 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 43, "execution_count": 67,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"data": {
"text/plain": [
"Text(0.5, 0, 'Tiempo')"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAEmCAYAAAA0iXexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAyHUlEQVR4nO3de3xcdZ3/8denadJ20mvS0EvaJBVqodxLLCCiKCBXxQsiyMVV1iq6Kru6v58ruyruj/1dl/WCgkUQcAtIAV1UUFFAUERJK4VyESv2kt7vpU3aNMnn98c5SSbTSTKZMzNnJvN+Ph7zmDPnfM+ZzxzS4TPfq7k7IiIiIlIaRsUdgIiIiIhkTsmbiIiISAlR8iYiIiJSQpS8iYiIiJQQJW8iIiIiJUTJm4iIiEgJUfImIiIiUkKUvImIiIiUECVvIiIiIiVkdC4vZmbjgLcDpwJHAFOAscAuYAvQAjzp7q/k8n1FREREyoXlYnksM6sGvgT8LTA5g1OeAq5398cjv7mIiIhIGYmcvJnZCcD9wBzAwt2etJ0seX838DV3/3ykAERERETKSKTkzczmAr8FptI/MdsJvABsBQ4AE4HDgXkE/ex6yjrwTXe/NusgRERERMpI1OTttwT923qSsR8D/8/dnxqgfA1wJfBFgoSvJ4E7z91/kXUgIiIiImUi6+TNzM4HfkKQfHUBH3f372V4bm147snhrmfd/eRBThERERERok0V8r6k7RsyTdwA3H078C6CZlWAZjObFSEWERERkbIQJXl7c/i8H/j34Z7s7tuAxUm7TosQi4iIiEhZiJK8TSdoMn3R3fdmeY2nk7anRYhFREREpCxESd7Ghc/ZJm4AbWmuJyIiIiIDiJK8bSMYLXp4hGvMSbmeiIiIiAwiSvL2avg8y8yy7a92WdL2nyPEIiIiIlIWoiRvP0vavtnMJg3nZDP7CHB2+HIPwWS/IiIiIjKIKMnbnfT1dzsaeMrMmoc6ycyqzOzL9I00deBWd++KEIuIiIhIWYi6wsLngf9D/+WufkOw0sIKgnncOoAJBH3j3gxcDNTRt5RWK3Csu+/OOhARERGRMpGLhem/A3yM/gncoKckld0BvNXdX4oUhIiIiEiZiNJsCoC7fxz4FH3TfljSc/Ij9djjwIlK3EREREQyF7nmrfdCZpMJauDeAywAxqQptg74NUEft7SL14uIiIjIwHKWvPW7qFklMBuYQpDE7QK2hEtiiYiIiEiW8pK8iYiIiEh+RO7zJiIiIiKFo+RNREREpIQoeRMREREpIaNzdaFwfdPTCVZbmAwk6JsaZCju7mfmKhYRERGRkSpy8mZmZwPfBOZmewmGnthXRERERBgkeTOz/w5sBp519xcHKPNR4Nael7kPT0RERESSDThViJl101cj9jvgCndfnXT8cOAloJK+5a7WA08RrFe6bziBuPv1w4xdREREpOwM1mz6B2A60ECwoPxPgGOSjn+GvsStHfg4cLdr4jgRERGRvBlykl4zO58gcXPgGHd/Ody/Epgf7v+gu9+f51hFREREyl4mU4VsTNrek7Q9O3zepMRNREREpDAGTd7Cfm3/RVC7tszd16ec68Cf8heeiIiIiCQbMHkzswbg18AsgoXlr0wp0ho+V+Ulsjwxs9vNbEvY7DtU2QYze9zM/mhmz4dNyCIiIiKxGazm7VvATKAbuMTdU2vYniYYYTovT7Hlyx3AuRmW/WfgPnc/EbgU+Ha+ghIRERHJxGDJ25kEzaIt7v6rNMdvC59rzOyCnEeWJ+7+JLAjeZ+ZHW5mPzOzZWb2lJkd2VMcmBhuTwI2FDBUERERkUMMlrxtCp+PM7NFZjbfzCp7Drr70wQJnAFfN7OpeYwz3xYDn3b3k4DP01fD9hXgCjNrBR4GPh1PeCIiIiKBwZK3GwgSszHAzcDzwIkpZT4D/BR4A/CMmb0jH0Hmk5mNJ5jHbqmZPQd8B5gRHr4MuMPdZwHnA983s0xG6IqIiIjkxYCT9Lr7bWa2gaAm6s0ESVwvM/tSuLkcOJkggXvUzP4M/Jag5u5ApoG4+1eHF3rOjAJ2ufsJaY5dTdg/zt1/Z2ZjganAlsKFJyIiItJnyEl6AcLapqnATnc/GO5LXj6rt2j4POxVFty9YrjnZMvMmoCfuPsx4eungf9w96VmZsBx7r7CzB4BfuDud5jZUcCvgHqtIiEiIiJxySh5S3tikLzlihcqeTOze4AzCJLRzcCXgccImoZnECz5da+7f9XM5gO3AuMJEtL/5u6/KEScIiIiIulESd6eIIsatoG4+9tzdS0RERGRkSrr5E1ERERECk8jJ0VERERKyICjTUeiqVOnelNTU9xhiIiIiAxp2bJl29y9LnV/WSVvTU1NtLS0xB2GiIiIlKjX9x9k8579HHHYhLy/l5mtSbe/rJI3ERERkcG4O9v2drB2xz7WbG9j9fY21m7fx5odbazZ3saOfR0kqip48fpzCGYXKzwlbyIiIlJWurqdjbvbWbM9SMjW7NjHmm1trNkRJGr7Orp6y44ymDFpHI21Cc45ejqNtQkaaxJ0O1TEk7vlLnkzs4nAOcBCYBYwmZRVGQbh7n5mrmIRERGR8nags4t1O9pZu2Mfq7e1sXZHG2u2B7VprTvb6ejqm662qmIUs2vG0VhbzclzamiqTdBYW01DbYJZU8YxZnTB1hHISOTkzczGEKyDugiozuYS5HC+OBERESkPew909iZkwSPYXrujjQ2720meDW38mNE01CQ4csYE3tlTgxYmadMnjqViVEzVaFmIlLyFtW1PAMfTtzTWYJKTtNK5SyIiIlJw7s72fR1hQnZoDdr2fR39yk8dX0VDTYKFc2p6k7OGmmqaahPUVFfF1kct16LWvH0POCHp9dPA74D3AIcTJGtfBSYAswkWuK8PyzpwD/DniDGIiIhIierudjbu2c+abX2DApJr0PYe6OwtawYzJ42joSbBO4+eRkNNdVKSlmDC2MoYP0nhZJ28mVkz8F6CJKwTuMrdfxAeO4YgecPdr0857zzgRmAecAFwqbv/PNs4REREpLgd6OyidWc7a8PEbHWYmK3evo/WHf37n1VWGLNrgkEBqTVos2uKr/9ZHKLUvF2etP1/exK3obj7I+G6qD8lWCD+PjNb4O5/iRCLiIiIxGjfgc6+WrOUGrSNu9vpTuo4VV1VQUNtNfOmTeDs+dNoDJs2G2oTzJg0rqT6n8UhSvJ2WvjswDeHc6K7t5vZ+4FXgZrw/PMjxCIiIiJ55O7s2NcRTqcR1Jqt3d4WJmr72La3f/+z2uoqGmoTvKlpCo21s/oNEKgdQf3P4hAleWsgSNxWufvmgQqZWaW7H0zd7+47zex24B+Bs83sMHffEiEeERERiaC729m0Z/8hidma7UHC9npK/7MZE8fSUJvgrKOm0VCboKm2moaaIEkrl/5ncYiSvE0JnzemOXYgaTsB7B7gGk8RJG+jgLcAD2b65mY2G7gLmA50A4vd/euZni8iIlKOOjq7ad0ZJmbhIIGemrR1O9vp6EzpfzYlaM5sbpxCY23fAIFZUxKMrVT/szhESd4Ohud3pTm2J2m7noGTt51J2zOG+f6dwOfcfbmZTQCWmdmj7v7SMK8jIiIyouw70NlvSo3kGrQNu/r3P0tUVdBQk2DuYRMOqUGbOVn9z4pRlORtG8H0H5PSHNuQtH00MFBCNS1pe1grvLr7RsJaP3d/3cxeJkgUlbyJiMiI5u7sbDvImu37glGb24IlntaGa3Fu23ugX/kpiUoaa6s5qXEK71swi8aavv5nU8er/1mpiZK8vUrQ7+2INMdWJG1fCCwd4BrvStrenm0gZtYEnAj8PttriIiIFJPubmfz6/vDiWn39V+Hc3sbr+/v7Fd+xqSxNNQkOPPIw2gImzabwiWeJqr/2YgSJXlrAc4CJprZ4SlTfTxK0KxZAXzQzG51998kn2xmFwBXplxv2MxsPPAAcK2770lzfBHB0l00NDRk8xYiIiJ5cbCrm9ad7f2WeFq7I5gHbd2ONg4k9T8bPSqY/6yhJsGChrD/WViDNrtG/c/Kiblnt6yomZ0N/JxgxOln3f2mlOP3AReHLzsIVlP4Q/j6reGxivD8le5+fBYxVAI/AX7u7jcOVb65udlbWrLKEUVERLLS1tHZ27SZWoO2fmf//mfjKiv6TanRUBPUnjXWJpgxaSyjK0bF90Gk4Mxsmbs3H7I/QvJWCWwiGHW6PPXiZtYAPEfQJy7d4vM9DewHgbPc/alhvr8BdwI73P3aTM5R8iYiIrnm7uxqO9hvUEByDdrW1w/tf9YQ1poFE9P2jeCsGz9G/c+k10DJW9bNpu5+0MyuAprCN0i4e1vS8bVmdg7B9B/1pF+Ifi/w4eEmbqHTCJpdXzCz58J9X3T3h7O4loiIyIC6u50trx9Imv8sXOIpXEVgT0r/s+nh/Gdvn1fXrwatoTbBpHHqfybRRFqY3t1/OsTxZ81sHvBR4BygEagkGI36GMHcbFuzfO/fkD4hFBERGbaDXd2s39keznsWJGc9SzytTdP/bNaUcTTUVnPC7Mm9zZw9C6Sr/5nkU6TkLRNhbdxN4UNERCQ27R1dvQuir00aublmexvrd7XTldQBbWzlKBprqpkztZoz5tXRUBusv9lYU83Myep/JvHJe/ImIiJSSLvaOvompk1ZQWBLSv+zyYlKGmsSHD97MhedMDNc2ilI0uomqP+ZFCclbyIiUlLcw/5nKYlZsKJAG7vb+y+nPW3iGBprqnnbG+uCZs2kGrRJCfU/k9Kj5E1ERIpOZ1c363e1H1KD1tP/bP/Bvv5nFT39z2oSvOv4GUmLowfP46rU/0xGFiVvIiISi/0Hw/5n2/pqzXpq0NbvbKczpf9ZT0L21rl1/QYIzJw8jkr1P5MykpPkzcwaCabteAswn2Dut8QwLuHurkRSRGSE2d12MGlQQP9F0jfv6d//bOLY0TRNrebY+km867iZwRJPNQmaplZTN34Mo7RAuggQMXkzs1HA/wSuTbqW/nWJiJQJd2fr6wdYk1SDFsx/FjRz7mrr3//ssAljaKxNcPrcumBpp6l9SzxNTlTF9ClESkvU2q67gQ/Qt4KCEjcRkRGms6ubDbv2H1KD1tPU2X6wq7dsxSijfvI4GmsTXHDsjN6JaXvmP0tUqZFFJKqs/xWZ2fuBS+hb9up14D7gGWAj0DbAqSIiUmT2H+xiXVhr1jMooKcGrTWl/9mY0X39z047Ympf/7OaBPVT1P9MJN+i/AS6Omn7aeA97r4tYjwiIpInu9sPpkxM2zdB7aY9+/uVnTB2NE211RxdP4kLjptBY01Qg9ZUW81hE9T/TCROUZK3BeFzF3CZEjcRkXi5O1v3HuhbGL1niadwuaedKf3P6iaMobEmkVR71leDNjlRqQlqRYpUlOSthqDJ9Hl3X5ejeEREZBCdXd1s3L0/HLV5aB+0to6+/mejDOqnjKOxpprzjp1BU22Chpq+9Terx6j/mUgpivIvdxdQGz6LiEiO7D/YRevONlZva+u3SPraHW207mzjYFdf/7OqsP9ZU22CNx/evwatfvI4qkar/5nISBMleVsBnAnU5ygWEZGysWd/2P9s+6GLpG/asx/vy8+YMGY0jVMTzJ8xkfOOmR7WnFXTNDXBtAlj1f9MpMxESd6WEiRvbzSzOe7+1xzFJCJS8tydbXs7DpmYtqd5c8e+jn7lp44P5j879fBaGsOmzZ4atCnqfyYiSaIkb3cA/wDMBW4E3puLgERESkVXt7NhV3vvfGfJidra7fvYl9L/bGY4/9k5R08PFkZP6oOm/mcikqmsvy3cvcPMLgZ+DbzbzO4CPunue3MWnYhIzA50drFuR3u/WrOeZs51qf3PKkYxu2YcTbXVnPKGmn4rCMyaklD/MxHJiUg/9dx9pZmdCtwPXA5cYGb3Ar8DNgEdg52fcq0no8QiIpKt1/cfPCQx66lJ25jS/2z8mNE01iY4csYEzjlmOo01id75z6ZPVP8zEcm/yPX07v6qmf0v4HaCBek/ET6GdZlcxCIiko67s31fxyHTavQkatsP6X9WRUNNglPeUNu7tFPP/Gc11VXqfyYisYq6MP0U4BHgTeEuH6T4gJfJ8r1vBy4Etrj7MdlcQ0RGjq5uZ+Pu9nDU5qE1aMn9z8xg5qSg/9k7j57Wm5g1hEnaePU/E5EiFmVt07HA48BxuQtnWO4AbgLuiun9RUa++nrYsCGe9zaDhga44Qa4/HIg6H/WurO937JOa7bvY82ONlp3tNPR1d17elXFKGaF/c8WzqmhMWzabKhNMGvKOMaMrojnc4lI6VqyBK67DtauPeT7qZCi/Lz8FEHi5gS1Z78BbiZYmH6Tu7dHD29g7v6kmTXl8z1EylpMidtrU2byo6PP4PDt69kwcSpr72lhzWvVrKmcyIbd7f36n1VXVdBYW828aRM4e/40msIatMapQf+zCvU/E5FcWbIEFi2Ctrbg9Zo1wWsoeAIXJXn7YNL2Le7+yajBiEgRyVPitr+ikiM//8OMy9fu20XDmnUsPPt0GmqS+p/VJqhV/zMRKZTrrutL3Hq0tQX7Syh5OzJ8bgM+l4NY8sLMFgGLABoaGmKORqQ8/OcJ5/HP53wq6/Mruru49+5/4sitf2VCR3vQhPrd7qFPFBHJl7Vrh7c/j6IkbxUETaYr8t1EGoW7LwYWAzQ3N2czoEJE0jj3I9/klcPm5ORaq//3hYMX0A8vEYlbQ0PQVJpuf4FFSd7WA4cDB3MUi4gUk5kzYcMGHjz67fzDhdEq169+9kf8y2Pfze7kRCLoFCwiEqcbbujf5w1i+36Kkry1AEeEj4Izs3uAM4CpZtYKfNndb4sjFpERaf16qK/POHFb/o0PUdO+J3fvn2a0qYhIbHq+h4pgtKm5Z9eSaGbvBH5G0HR6hrs/lcvA8qG5udlbWlriDkOkpPz0+Y186u7lnHfMdG6+4qS4wxERKRtmtszdmw/Zn23yFl50KfB+YCVwurvvzj7E/FPyJiIiIqUiX8nbROBB4B3Ai8An3P23WV8wz8xsK5Cmt2FOTQW25fk9yo3uaW7pfuae7mlu6X7mnu5p7hXinja6e13qzijNpl8KN0cD1wC1BE2or5DdwvRfzSqQImNmLemyZMme7mlu6X7mnu5pbul+5p7uae7FeU+jDFj4Cv3XMu1ZaeEo+uaAG44RkbyJiIiI5FPU1ZcHmtp8uFOea/41ERERkQxESd6eRElXOovjDmAE0j3NrZK4n2b2BPC28OX17v6V+KIZUknc0xKi+5l7uqe5F9s9jTRgQUTKl5k1AX/N0+XnAHdQOsmbiEjBjIo7ABERERHJXNQ+byJSvtqBn2dQ7m3A2HB7J/CHDK8tIiJpqNlURPLKzFYDjeHLX7v7GfFFIyJS+squ2dTMbjezLWa2MoOy/2Fmz4WPV81sVwFCFBERERlQOTab3gHcBNw1VEF3//uebTP7NHBi/sISERERGVrOkrdwqaxzgIXALGAyMCbD093dz8xVLEO80ZPhKLleZnY48C2gDmgDPubur6Scehnw5ULEKCLZTxViZm8F3heeOxOYAuwiWBrvV8Adaf59Z/z+ZnYO8DdAM1APdBGsLPMD4Fvu3p5ynTHAh4FLgOMJvht3AMuB29z9/mxiMTMDzg9jOTH8rG3Aa8CPgMXuPqyle8Lv8avC6x5N8J3YCWwGngUeApa6e9dwrisiuRU5eQu/mG4AFgHV2VyC+OeLW0ywLuufzexk4NsE67UCYGaNBFMXPBZTfCIyBDM7ArgFSPdDsC58NAOfN7NvAZ9z985hXH8S8F3g4jSHm8PHlWb2DnffHp5zDHA/MC+l/GHAucC5ZnYfcPkwY5lC0HpwYcqhcQRLFb4J+Hszu9rdH8rwmlcCNxKs15hqAnAEwY/YfzGzj7r77zONV0RyK1LyFv5Ke4Lg12QmqyokJ2nDXYUhL8xsPPBmYGnwQxY4tMbwUuB+/doUKU5mdirwY4LEpccB4EWCWrcpwLEE33kVwGeAuWb27gyTpgrgQfp+1G0AVgGVBN9/iXD/ccAj4Y/AucCvgZrw2KvAeoKat+PCa0JQI7cW+McMP24F8F/A6eHrHcDLBH2Yjww/KwRJ2ANmdom7/3CwC5rZFwl+hCfbEsZcCcwnSOAItx8zs/e5eyajjUUkx6IOWPgecAJ9idjTwL8DfwlfO3A9wa+5pQRfeEZfbdvd4fE41zUdBexy9xOSHkellLkUuCeG2ERkCGY2i6A5rydx2wR8BJjk7ie5+5nuvoAgmfk3oDssdx7BGs2ZuIYgcXsJeLu717v729z9zQS1aN9JKvsm4EMENW41BEnlXHef5+7vCGM5HPhd0jnXmtmcDGP5OEHitpOgiXOau78ljGUacDWwJyw7GrgzvEdpmdl59E/cWoGLgBnufrq7nxJ+xk8TNMtCkKzea2azM4xZRHLJ3bN6EDQRdBP09zgAfDDp2CM9x9Kcdx7Br8Rugi+fc7KNIULsTcDKpNdPAx8Itw04PunYPGA14bQqeuihx/Ae4b8fDx9PDOO8J5LO+8og5R5JKreKIOkY7LofTSrfAdRn8P5OkLhNGeS6TyWVPRA+Lxnou4OgGXd30jlfyvBeOEES1TxI+beEn62n/D0DlBtN0Bewp9xGoGmQ655N0Aeup/zSuP++9NCjHB9Rat4uT9r+v+7+g0xOcvdHgAXhl9Ek4L5wwEBBmNk9BL9455lZq5ldTfBZrjazFQTNLBclnXIZcK+7x90vT0RSmNkJBH3HIEgmLnf3jYOd4+63A78MX1YS1GRl4hPuvnOQ4zcnbVcRNNdeM9B3h7tvBe5L2vWWDOMA+D/u3jLQQXf/DfCNpF3vN7NpaYq+F2hIev1Zd189yHUfJegT3Hu+mTUMVF5E8iNK8nZa+OzAN4dzogejsd4PbAfGD/f8KNz9Mnef4e6V7j7L3W9z97+6+7nufry7z3f3ryaV/4q7f6FQ8YnIsPxN0vZTnnkn+uSpgs7KoPwr7v7kEGWeSXl9r7vvSVsy/TnzM4gDgtaObw9ZKvhe7UkcK4F3pynz3qTttQTdW4by70nXrRjguiKSR1GStwbCZgp33zxQITOrTLc//AV7O0Ez5dlmdliEWESkPL0tafuXA5Y61PNJ2ydZ0milAfxuiOMQ9LUb7jnJtYRTBizV33J33zJUIXdfQ9CS0OPkNMVOTdr+aSYtDOF1VwxwDREpgCijTXu+aNI1URxI2k4Q9OtI5ymCEVajCJoMHowQj4iUkTDhOiZp1yVmdtpA5VOMS9quAiYy8PcUHJqYHcLd21JywCHPoW8AAPSNWB3KCxmW6ynbc4/emHzAzCoI+v/2SE7IhvI8wWA1CKYQEZECynptUzPbS/AF+Li7n5Vy7C7gCoKauWPd/aUBrnEafZ18P+Pu38oqmAxNnTrVm5qa8vkWIiIiIjmxbNmybe5el7o/Ss3bNmA2waCDVBuSto8mGKWVTnIH2gkA4dDzu4DpBCNSF7v715NPMrMzCOY5+mu468HkfmoDaWpqoqVlwD6+IiIiIkXDzNak2z9k8pY0kqg9HB3V41WCfm/pqsyTq98vZOBOsO9K2t4ePncSzHy+3MwmAMvM7NE0tXdPuXvq7OIiIiIiI1omAxZWE9Rw3ZGyv6cKa2KaqT4eJUjCAD5oZocMgTezC4ArU6/n7hvdfXm4/TrBnHD1GcQpIiIiMuINZ7Rp6misx5O2z0s+4MFiyD8Kz6kCfmlm3zOza8LHPeHxUQT93Va6+x8PecNgAfkTgXTD/081sxVm9oiZHT2MzyEiIiJSsqJMFfIEwQoJRv+5lnp8nmCSSidI4K4Cbgofl9C3rl8n8HepJ4drjj4AXJtmrqTlQKO7H08wl9GPBgrSzBaZWYuZtWzdunWgYpKko7Obh1/YSFe35iUWEREpNlknb+5+kCAh+zTwPTNLpBxfC5xD3+AFS3kA7AUudfenks8N54Z7AFji7odMH+Lue9x9b7j9MFBpZlMHiHOxuze7e3Nd3SEDNiSNc772JJ9cspwNu9rjDkVERERSRBltirv/dIjjz5rZPIK1BM8BGglm+t4APEYwkrRfdVg4d9NtwMvufmO665rZdGCzu7uZLSRIQrenKyvD4+78dds+AGbXZDrtlIiIiBRKpOQtE+7eRl9zaSZOIxjI8IKZPRfu+yLh+nvufgtwMXCNmXUC7QS1d2rjy4EfPLsOgCOnT4g5EhEREUkn78nbcIULKg+6VI27DycZlGH4woPB5O23XtUccyQiIiKSTpQBCzLC7Nl/sHdbTaYiIiLFScmb9PrHpcHcyh9/2xtijkREREQGMpxm04Vm9lie4nB3PzNP15YM/fzFzQB8/p3zYo5EREREBjKc5G0K8LY8xGAEc8FJjJat2dG7XVmhClkREZFipf9LCwAfujVYxOLuvz055khERERkMMOpeTsAbM5XIBKfrm7nQGc3AG8+Iu1cxyIiIlIkhpO8PeHu5+ctEonNTY+tAuD0uUrcREREip2aTYX/+OWrAHz90hNjjkRERESGouStzG3avb93u6a6KsZIREREJBNK3srcNUuWAfAvF86PORIRERHJhJK3MvfHtbsA+OhpTbHGISIiIplR8lbGfvHiJgCmjq/CbNDlZEVERKRIKHkrY4u+HzSZ3vnRhTFHIiIiIplS8lam9h/s6t0+euakGCMRERGR4cg0eVOb2gjzrz95CYD3L5gVcyQiIiIyHJlM0jsnfG7PZyBSWEt+vxaA//GeY2KORERERIZjyOTN3dcUIhApnD9vfr13e1xVRYyRiIiIyHCpz1sZ+pvvPQvANy/TigoiIiKlpuiSNzObbWaPm9nLZvaimX02TRkzs2+Y2Soze97MFsQRaylyd9bvClrA33X8zJijERERkeEazsL0hdIJfM7dl5vZBGCZmT3q7i8llTkPmBs+TgZuDp9lCHf/IejrdtSMiTFHIiIiItkoupo3d9/o7svD7deBl4H6lGIXAXd54BlgspnNKHCoJem6H64E4NarToo5EhEREclG0SVvycysCTgR+H3KoXpgXdLrVg5N8CTF7vaDvduzpiRijERERESyVbTJm5mNBx4ArnX3PamH05ziA1xnkZm1mFnL1q1bcx1mSfn80hUAfPKMw2OORERERLJVlMmbmVUSJG5L3P3BNEVagdlJr2cBG9Jdy90Xu3uzuzfX1dXlPtgS8uhLmwH4h7PfGHMkIiIikq2iS94sWCH9NuBld79xgGIPAVeFo05PAXa7+8aCBVmCnl29o3d7dEXR/WcXERGRDBXjaNPTgCuBF8zsuXDfF4EGAHe/BXgYOB9YBbQBHyl8mKXlQ7c+A8A9Hzsl5khEREQkiqJL3tz9Nwyxlqq7O/CpwkRU+rq6nYNdQZfAUw+vjTkaERERiULtZ2XgG7/6MwBnzCvvPn8iIiIjgZK3MvD1MHn72gdPiDcQERERiUzJ2wi3cXd77/bkRFWMkYiIiEguKHkb4T7x/WUAXP/uo2OORERERHJBydsIt6J1NwBXndoYcyQiIiKSC0reRrCfrQymvjtswhiC6fNERESk1Cl5G8E+8Z/LAbjr6oUxRyIiIiK5ouRthNp/sKt3+8jpE2OMRERERHJJydsIdf2PXwTgg82zhygpIiIipUTJ2wh1zx/WAXD9RRplKiIiMpIoeRuB/rTp9d7tsZUVMUYiIiIiuabkbQT68O1/AODmyxfEHImIiIjkmpK3Ecbd2bRnPwDnHTsj5mhEREQk15S8jTD/+cwaAI6p1whTERGRkUjJ2wjzL/8VjDL9zpXNMUciIiIi+aDkbQTZ1dbRu10/eVyMkYiIiEi+KHkbQT533woAPv2OI2KORERERPJFydsI8qtXtgBw7VlvjDkSERERyZeiTN7M7HYz22JmKwc4foaZ7Taz58LHlwodY7F55rXtAIwyqBilRehFRERGqtFxBzCAO4CbgLsGKfOUu19YmHCK34dufQaAez52SsyRiIiISD4VZc2buz8J7Ig7jlLR1e10e7B98htq4w1GRERE8qook7cMnWpmK8zsETMr6wU8v/bLVwE488jDYo5ERERE8q1Ym02HshxodPe9ZnY+8CNgbrqCZrYIWATQ0NBQsAAL6ZuPrQLgxktOiDcQERERybuSrHlz9z3uvjfcfhioNLOpA5Rd7O7N7t5cV1dX0DgLYf2u9t7tSYnKGCMRERGRQijJ5M3MppuZhdsLCT7H9nijisfHv98CwL9eVNYtxyIiImWjKJtNzewe4Axgqpm1Al8GKgHc/RbgYuAaM+sE2oFL3d1jCjdWK9fvAeCKUxpjjkREREQKoSiTN3e/bIjjNxFMJVLWHn5hIwAzJo0lrIgUERGREa4km00l8MklywG486MLY45ERERECkXJW4naf7Crd/uN0ybEGImIiIgUkpK3EvWl/wpWDrts4cic/kRERETSU/JWou5raQXgy++aH3MkIiIiUkhK3krQyxv39G6PrayIMRIREREpNCVvJejDt/8BgFuuOCnmSERERKTQlLyVGHdny+sHADj3mOkxRyMiIiKFpuStxNz59GoAjp89OdY4REREJB5K3krMV378EgC3XLEg5khEREQkDkreSsjOfR292zMmjYsxEhEREYmLkrcS8vf3PQfAZ8+cG28gIiIiEhslbyXkiT9tBeAzSt5ERETKlpK3EvH0X7YBUFUxiopRWoReRESkXCl5KxEfuvX3ANz9sZNjjkRERETipOStBHR2dfduNzfVxBiJiIiIxE3JWwm48dFXATh7/rSYIxEREZG4KXkrAd9+4i8A/L8PHB9zJCIiIhI3JW9Fbt2Ott7tSeMqY4xEREREioGStyK36PvLAPi39x4bcyQiIiJSDIoyeTOz281si5mtHOC4mdk3zGyVmT1vZiN2raiXN+4B4LKFs2OORERERIpBUSZvwB3AuYMcPw+YGz4WATcXIKb8M+v3+PFRbwWgfvI4zAo0t9uSJdDUBKNGBc9LlhTmfUVERCQjRZm8ufuTwI5BilwE3OWBZ4DJZjajMNHlSZrk7NMX/XcA7vzomwoTw5IlsGgRrFkD7sHzokVK4ERERIpIUSZvGagH1iW9bg33jRjto8f0bh9x2ITCvOl110FbW/99bW3BfhERESkKpZq8pWtD9LQFzRaZWYuZtWzdujXPYeXOP7/zGgCuWP7Twr3p2rXD2y8iIiIFV6rJWyuQ3IN/FrAhXUF3X+zuze7eXFdXV5DgcuGBY88C4J8f+27h3rShYXj7RUREpOBKNXl7CLgqHHV6CrDb3TfGHVSuvHjYnN7tsV0HC/fGN9wAiUT/fYlEsF9ERESKwui4A0jHzO4BzgCmmlkr8GWgEsDdbwEeBs4HVgFtwEfiiTSH3HsHLXz4kq8CcOsDXw32F8rllwfP110XNJU2NASJW89+ERERiZ15IZODmDU3N3tLS0vcYQzK3ZnzTw8DsPp/XRBzNCIiIhIXM1vm7s2p+0u12XTEuv23qwFY0DA51jhERESkOCl5KzL/+pOXALj5ipNijkRERESKkZK3ItLW0dm7PW3i2BgjERERkWKl5K2I/GzlJgC+c6Vq3URERCQ9JW9FZGlLK421Cd45f1rcoYiIiEiRUvJWJNZub+N3r23n4gWzCrcIvYiIiJQcJW9F4v5l6zCD9580K+5QREREpIgpeSsCXd3O/ctaOX1uHTMnj4s7HBERESliSt6KwNN/2caG3fv5gGrdREREZAhK3orA0pZWJo2r5GwNVBAREZEhKHmL2e62g/zsxU1cdMJMxlZWxB2OiIiIFDklbzF7aMV6Ojq7uaR5dtyhiIiISAlQ8hazpctaOWrGRI6eOTHuUERERKQEKHmL0Sub9vB8624+cJLmdhMREZHMKHmL0dKWViorjPecWB93KCIiIlIilLzFpKOzmx/+cT1nHTWNmuqquMMRERGREqHkLSaPvbKZHfs6NFBBREREhkXJW0yWtrQybeIYTp87Ne5QREREpIQUZfJmZuea2Z/MbJWZfSHN8TPMbLeZPRc+vhRHnNnasmc/j/9pC+9bMIvRFUX5n0BERESK1Oi4A0hlZhXAt4CzgVbgWTN7yN1fSin6lLtfWPAAc+DBP66n29FyWCIiIjJsxVjtsxBY5e6vuXsHcC9wUcwx5Yy7c1/LOpobp/CGuvFxhyMiIiIlphiTt3pgXdLr1nBfqlPNbIWZPWJmRxcmtOiWr93Ja1v3aaCCiIiIZKXomk2BdLPVesrr5UCju+81s/OBHwFz017MbBGwCKChoSGHYWZnaUsriaoKzj9uRtyhiIiISAkqxpq3ViC5WmoWsCG5gLvvcfe94fbDQKWZpR226e6L3b3Z3Zvr6uryFXNG2jo6+fGKDZx/7AzGjynGvFlERESKXTEmb88Cc81sjplVAZcCDyUXMLPpFq4nZWYLCT7H9oJHOkyPvLCJfR1dajIVERGRrBVd9Y+7d5rZ3wE/ByqA2939RTP7RHj8FuBi4Boz6wTagUvdPbVptejc17KOptoEb2qaEncoIiIiUqKKLnmD3qbQh1P23ZK0fRNwU6HjimLN9n38/q87+Mdz5mkRehEREclaMTabjkj3L2tllMH7FmgRehEREcmekrcC6Op27l/Wyulz65gxaVzc4YiIiEgJU/JWAL9dtY2Nu/droIKIiIhEpuStAO5rWcfkRCVnzT8s7lBERESkxCl5y7NdbR384sXNvOeEesaMrog7HBERESlxSt7y7KEVG+jo6uZiLUIvIiIiOaDkLc/ua1nH/BkTOaZ+UtyhiIiIyAig5C2PXtqwh5Xr93BJs2rdREREJDeUvOXR0mXrqKoYxUUnaG43ERERyQ0lb3nS0dnNj/64nrPnT2NKdVXc4YiIiMgIoeQtT3718mZ2th3kYjWZioiISA4pecuT+1rWMX3iWN46ty7uUERERGQEUfKWB5v37OfXr27l/SfVUzFKi9CLiIhI7ih5y4MHlrfS7XDxSVoOS0RERHJLyVuOuRn3L/kVC9etZE7deDCDpiZYsiTu0ERERGQEUPKWS2Ysqz+K12pncfELv+zbv2YNLFqkBE5EREQiU/KWY/cddzaJjnYueOU3/Q+0tcF118UTlIiIiIwYSt5yxYx9lWP56by3cOErT1F9cP+hZdauLXxcIiIiMqIUZfJmZuea2Z/MbJWZfSHNcTOzb4THnzezBXHEmeruE85j35gEH3j+l+kLNDQUNiAREREZcYoueTOzCuBbwHnAfOAyM5ufUuw8YG74WATcXNAgB3DDO64GoHn9S4ceTCTghhsKHJGIiIiMNKPjDiCNhcAqd38NwMzuBS4CkjOii4C73N2BZ8xsspnNcPeNhQ+XYEQpcPc9XyRxcD+HzOxWUQGLF8Pllxc8NBERERlZijF5qwfWJb1uBU7OoEw9EE/yFnrz2ufTH7jzTiVuIiIikhNF12wKh1ZcAZ5FmaCg2SIzazGzlq1bt0YOLitK3ERERCRHijF5awWSlyaYBWzIogwA7r7Y3ZvdvbmuLoZ1RisqCv+eIiIiMmIVY/L2LDDXzOaYWRVwKfBQSpmHgKvCUaenALtj6+82lEWL4o5ARERERpCi6/Pm7p1m9nfAz4EK4HZ3f9HMPhEevwV4GDgfWAW0AR+JK16CoHoHLfRzzTXw7W8XPh4REREZsYoueQNw94cJErTkfbckbTvwqULHNShP2+VOREREJKeKsdlURERERAag5E1ERESkhJiXUXOfmW0F1uT5baYC2/L8HuVG9zS3dD9zT/c0t3Q/c0/3NPcKcU8b3f2QqTLKKnkrBDNrcffmuOMYSXRPc0v3M/d0T3NL9zP3dE9zL857qmZTERERkRKi5E1ERESkhCh5y73FcQcwAume5pbuZ+7pnuaW7mfu6Z7mXmz3VH3eREREREqIat5ERERESoiStwyZ2blm9iczW2VmX0hz3MzsG+Hx581sQabnlquI9/R2M9tiZisLG3Vxy/aemtlsM3vczF42sxfN7LOFj774RLifY83sD2a2Iryf1xc++uIU5d99eLzCzP5oZj8pXNTFLeJ36Woze8HMnjOzlsJGXpwi3s/JZna/mb0Sfp+empcg3V2PIR4Ea6z+BXgDUAWsAOanlDkfeAQw4BTg95meW46PKPc0PPZWYAGwMu7PUiyPiH+nM4AF4fYE4NVy/zuNeD8NGB9uVwK/B06J+zPF/Yj67z48/g/A3cBP4v48xfDIwXfpamBq3J+jWB45uJ93An8bblcBk/MRp2reMrMQWOXur7l7B3AvcFFKmYuAuzzwDDDZzGZkeG45inJPcfcngR0Fjbj4ZX1P3X2juy8HcPfXgZeB+kIGX4Si3E93971hmcrwoQ7GEf/dm9ks4ALgu4UMushFuqdyiKzvp5lNJKhYuA3A3TvcfVc+glTylpl6YF3S61YO/R/bQGUyObccRbmnkl5O7qmZNQEnEtQWlbNI9zNs3nsO2AI86u7lfj8h+t/o14D/BnTnKb5SFPWeOvALM1tmZovyFmXpiHI/3wBsBb4XNu1/18yq8xGkkrfMWJp9qb+iByqTybnlKMo9lfQi31MzGw88AFzr7ntyGFspinQ/3b3L3U8AZgELzeyY3IZXkrK+p2Z2IbDF3ZflPqySFvXf/WnuvgA4D/iUmb01l8GVoCj3czRBd56b3f1EYB+Ql37uSt4y0wrMTno9C9iQYZlMzi1HUe6ppBfpnppZJUHitsTdH8xjnKUiJ3+jYbPJE8C5OY+w9ES5p6cB7zaz1QRNWe8ws//MX6glI9Lfqbv3PG8BfkjQbFjOov7/vjWplv1+gmQu55S8ZeZZYK6ZzTGzKuBS4KGUMg8BV4WjUE4Bdrv7xgzPLUdR7qmkl/U9NTMj6KfxsrvfWNiwi1aU+1lnZpMBzGwccBbwSgFjL1ZZ31N3/yd3n+XuTeF5j7n7FQWNvjhF+TutNrMJAGHz3juBch/BH+VvdBOwzszmheXOBF7KR5Cj83HRkcbdO83s74CfE4xEud3dXzSzT4THbwEeJhiBsgpoAz4y2LkxfIyiEuWeApjZPcAZwFQzawW+7O63FfZTFJeI9/Q04ErghbCfFsAX3f3hAn6EohLxfs4A7jSzCoIfyfe5e9lPbRH1370cKuI9nQb8MPjtxmjgbnf/WYE/QlHJwd/op4ElYeL3Gnn6+9UKCyIiIiIlRM2mIiIiIiVEyZuIiIhICVHyJiIiIlJClLyJiIiIlBAlbyIiIiIlRMmbiIiISAlR8iYiIiJSQpS8iYiIiJSQ/w8GKTRP05FkzQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [ "source": [
"#f, (ax1, ax2) = plt.subplots(nrows=2, sharex=True, gridspec_kw={'height_ratios': (1,3)}, figsize=(10,4))\n", "x2 = np.array(x) * 1000\n",
"f=plt.figure(figsize=(16, 8))\n", "y_array = [y]\n",
"ax=f.add_subplot(111)\n", "aux_labels = [\"Expected\"]"
" \n",
"thresh = 100000000 - 1\n",
"\n",
"x_low = []\n",
"x_high = []\n",
"\n",
"y_low = []\n",
"y_high = []\n",
"\n",
"y2_low = []\n",
"y2_high = []\n",
"\n",
"#Bucle de bajas prestaciones...\n",
"for i in range(len(x)):\n",
" if y[i] < thresh:\n",
" x_low.append(x[i])\n",
" y_low.append(y[i])\n",
" y2_low.append(intercept + slope*x[i])\n",
" else:\n",
" x_high.append(x[i])\n",
" y_high.append(y[i])\n",
" y2_high.append(intercept + slope*x[i])\n",
"\n",
"ax1.scatter(x_low,y_low, color='red')\n",
"ax1.plot(x_low,y2_low)\n",
"\n",
"ax2.scatter(x_high,y_low, color='red')\n",
"ax2.plot(x_high,y2_low)\n",
"\n",
"ax1.set_ylabel(\"Tamaño\", fontsize=36)\n",
"ax1.set_xlabel(\"Tiempo\", fontsize=36)\n",
"#ax.set_ylim(0,110000000)"
] ]
}, },
{ {
...@@ -3260,33 +3000,112 @@ ...@@ -3260,33 +3000,112 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 31, "execution_count": 48,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"x = np.array(x).reshape((-1, 1))\n",
"y = np.array(y)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"0.9962787972985218\n", "0.9720444025507028\n",
"409360.65712023154\n", "417555.74204228446\n",
"[6.56144796e+08]\n", "[4.08208613e+09]\n",
"[ 413953.67068972 411329.09150716 410672.94671151 ...\n", "[4.25719914e+05 4.21637828e+05 4.21637828e+05 ... 9.36564851e+07\n",
" 99880255.53157426 98379652.38394217 99038421.75876622]\n" " 1.00391927e+08 9.74120044e+07]\n"
] ]
} }
], ],
"source": [ "source": [
"from sklearn.linear_model import LinearRegression\n",
"\n",
"x = np.array(x).reshape((-1, 1))\n",
"y = np.array(y)\n",
"\n",
"reg = LinearRegression().fit(x, y)\n", "reg = LinearRegression().fit(x, y)\n",
"print(reg.score(x, y))\n", "print(reg.score(x, y))\n",
"print(reg.intercept_)\n", "print(reg.intercept_)\n",
"print(reg.coef_)\n", "print(reg.coef_)\n",
"\n", "\n",
"print(reg.predict(x))" "reg_array = reg.predict(x)\n",
"print(reg_array)\n",
"y_array.append(reg_array)\n",
"aux_labels.append(\"LinearReg\")"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9994154481836294\n",
"27900.7721101176\n",
"[ 4.29146862e+09 2.70526901e+11 -1.56299343e+13 1.73278870e+14]\n",
"[3.64847913e+04 3.21925112e+04 3.21925112e+04 ... 1.00097111e+08\n",
" 1.00132901e+08 1.00289449e+08]\n"
]
}
],
"source": [
"degrees = 4\n",
"poly = PolynomialFeatures(degree=degrees, include_bias=False)\n",
"poly_features = poly.fit_transform(x)\n",
"poly_reg = LinearRegression()\n",
"poly_reg.fit(poly_features, y)\n",
"\n",
"print(poly_reg.score(poly_features, y))\n",
"print(poly_reg.intercept_)\n",
"print(poly_reg.coef_)\n",
"\n",
"poly_array = poly_reg.predict(poly_features)\n",
"print(poly_array)\n",
"y_array.append(poly_array)\n",
"aux_labels.append(\"PolyReg-\"+str(degrees))"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9IAAAH8CAYAAAA9qpexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABuIklEQVR4nO3deXxcdbn48c/TnYCk7CCQFimCCIgSERBlKSgCBQREoS4oEoTrAvf6u1et2oJWvNcNN7jWK8KFiF5xgSqKUNkU1LaC7ApKWwqyQxDLUtrn98dM2kk6k8xkkkyWz/v1mtec8z3f8z3PJKdpnnyXE5mJJEmSJEmqzphGByBJkiRJ0nBiIi1JkiRJUg1MpCVJkiRJqoGJtCRJkiRJNTCRliRJkiSpBibSkiRJkiTVYFyjAxjqNt1005w6dWqjw5AkSZIkDYDFixc/lpmb1XKOiXQvpk6dyqJFixodhiRJkiRpAETE0lrPcWi3JEmSJEk1MJGuICJmRMS8jo6ORociSZIkSRpCTKQryMz5mdnW3Nzc6FAkSZIkSUOIibQkSZIkSTUwkZYkSZIkqQYm0pIkSZIk1cBEWpIkSZKkGphIV+Cq3ZIkSZKkcsY1OoChKjPnA/NbW1tPrvac5557joceeoiOjg5efPHFAYxOklSPcePG0dzczJZbbsmkSZMaHY4kSRpmTKT7yXPPPcef//xnNt98c3baaScmTJhARDQ6LElSN5nJCy+8wBNPPMGf//xndtxxR5NpSZJUE4d295OHHnqIzTffnK222oqJEyeaREvSEBURTJw4ka222orNN9+chx56qNEhSZKkYcZEup90dHSw8cYbNzoMSVINNt54Y1wLQ5Ik1cpEup+8+OKLTJgwodFhSJJqMGHCBNe0kCRJNTORrqAvq3Y7nFuShhd/bkuSpL4wka4gM+dnZltzc3OjQ5EkSZIkDSEm0pIkSZKkftXOrUzlK4xhDlP5Cu3c2uiQ+pWJtDSMRAT7779/o8PQEHHiiScSESxZsqTRoUiSJK3Rzq20MZ+ldJDAUjpoY/6ISqZNpNWvIqLX17XXXtvoMPvNnDlzRtxnUv/qfv+PHTuWTTfdlAMPPJD29vZGh8eSJUvWiXHcuHFsvvnmHHLIIVx22WWNDrEqf/nLX1h//fWJCN75znc2OhxJkka1WSxgBSu7lK1gJbNY0KCI+t+4RgegkWn27NkVj02dOnXwApGGiM5/EytXruTPf/4zP/3pT7nmmmtYvHgxX/7ylxscHTQ3N3P66acD8Pzzz3PHHXfws5/9jCuvvJIvfOELfPSjH21sgD148cUXede73sWYMf5tWJKkoWAZ5RdsrlQ+HJlIa0DMmTOn0SFIQ0r3fxMLFizg4IMP5pxzzuHDH/5ww//ANHny5HVi/P73v8/xxx/P7NmzOe2002hqampMcL343Oc+xy233MIXvvAFPvKRjzQ6HEmSRr0WmllaJmluYeQs5Oyf79Uw9913H5MnT2bjjTdm6dKlXY7985//5BWveAVjx47luuuuW1PeOSf0b3/7G1/+8pfZaaedmDRpEttssw1nnHEGTz/9dNlrLV++nA9+8IO87GUvY+LEiWyyySYcccQRLFy4sGz9VatW8d///d+8/vWvp7m5mfXWW49p06bx/ve/n3vuuQco9KyfeeaZABxwwAFdhsaWWrFiBWeffTa7774766+/PhtssAF77703l1xySdlrv/DCC3zmM59h++23Z+LEiWy33XZ88pOf5Pnnn6/uC6thYfr06ey0005kZpf7cPHixRxzzDFsvvnmTJw4kSlTpnDaaafx97//vdc27777biKCAw88sGKdXXfdlfHjx/PQQw/12t7b3/52NthgA1asWMGdd965zvErr7ySQw89lE033ZSJEyey/fbb8//+3//jqaeeKtvelVdeyetf/3rWX399Nt54Y4466ijuvvvuuuZ6L1q0iM985jN86lOfYrfddqv5fEmS1P/mMp0mxncpa2I8c5neoIj6nz3SapjtttuO//mf/+Ftb3sbxx9/PNdffz3jxhVuydNOO427776bOXPmsN9++61z7hlnnMH111/Pcccdx5FHHsmVV17JOeecww033MBvfvMbJk2atKbuH//4R970pjfxxBNP8OY3v5mjjz6axx57jJ/+9Kfsu+++/OQnP+HQQw9dU/+FF17gsMMO4+qrr2bbbbflhBNOYMMNN2TJkiX85Cc/Yd9992WHHXbg9NNP56c//SnXXXcd73nPe8r2KD711FMceOCB3HzzzbzmNa/hfe97H6tXr+bKK6/khBNO4I477uCzn/3smvqZyXHHHcdll13G9ttvzwc/+EFeeOEFzj//fG677bZ+/OprKMhMYO2zjH/2s59xzDHHkJkce+yxTJkyhcWLF3Peeedx2WWX8dvf/rbHnuuddtqJAw44gGuuuYa//OUvvPzlL+9y/MYbb+T222/nmGOOYcstt6wpxvHju/5neNZZZzF79mw23nhjDj/8cDbffHNuvfVWvvjFL3LFFVdw0003seGGG66p/4Mf/IATTjiBiRMnctxxx7HVVltx4403svfee/OqV72qqli6e/bZZ3n3u9/N7rvvzsc+9jF+85vf9KkdSZLUv2ZS+OP2LBawjA5aaGYu09eUjwiZ6auH1x577JHVWLRoUVX1RjoggZw9e3bZ19lnn73OOaeeemoC+bGPfSwzMy+88MIEcv/9989Vq1Z1qfue97wngdxkk01yyZIla8pXrVqVRx99dAJ51llnrSlfuXJlbr/99jlx4sS89tpru7T1wAMP5Etf+tLccsst87nnnltT/vGPfzyBnDFjRpfyzMznnnsuH3nkkTX7s2fPTiCvueaasl+Pznj/8z//s0v5s88+m29+85szIvLmm29eU97e3p5A7rXXXvnss8+uKX/88cfzZS97WQK53377lb2WhqbOfxPdXXXVVRkRGRG5ZMmS/Mc//pGbbLJJjhkzJq+//voudT//+c8nkAcffHCX8s7767777ltT9sMf/jCB/Ld/+7d1rtlZ/1e/+tWasvvuuy+BnDJlyjr1L7roogRys80263I//vrXv04g995773zyySe7nPPd7343gTz99NPXlD399NM5efLknDBhQt5yyy1d6v/Hf/zHmq9R6eeoxoc//OGcOHFi3nHHHZmZec011ySQM2fOrKkdf35LkjS6AYuyxjyx4YnqUH0BM4B506ZNq+qLP1i/iF1868U55StTMuZETvnKlLz41osH5brV6vyFuNKrubl5nXOeffbZfNWrXpURkV//+tdz/fXXz8022ywfeOCBdep2JgKlyXKnv/71rzlmzJicOnXqmrKf/vSnCeRHP/rRsvGec845CeTPf/7zzMx88cUXs7m5Oddbb72y1++up0T6sccey7Fjx2Zra2vZc2+55ZYE8v/9v/+3puyggw5KIH/961+vU78zQTGR7uriizOnTMmMKLxfPLT+Sazzx6VPfOITecwxx+TYsWMTyDPOOCMzMy+++OIE8vjjj1+njZUrV+bUqVMTyKVLl64pL5dIr1y5Ml/60pfmJpts0uUPQU8++WSut956uf322+fq1avXlHcm0s3NzWti/NjHPpaHH354RkROmDAhf/zjH3eJ56ijjkogb7/99rKfeffdd8/NNttszX5nQv7e9753nbr/+Mc/cvLkyTUn0ldffXVGRJc/UplIS5KkvuhLIu3Q7goycz4wv7W19eRGx9Kp/bZ22ua3sWLlCgCWdiylbX4bADN3ndnI0NZRuB+rM2nSJH7wgx/Q2trKhz70ISKCSy+9lJe+9KUVzyk33PtlL3sZ2267LUuWLOGpp55i8uTJ3HTTTQAsXbq07AJonfOd77rrLg499FDuvvtuOjo6eN3rXtfj9auxcOFCVq1aRUSUvfbKlSvXXLvTH//4R8aMGcO+++67Tn2fH72u9nZoa4MVhX8SLF1a2AeYObT+SayZTx8RTJ48mTe84Q2cdNJJax7V9Mc//hGg7PzmcePG8cY3vpElS5Zw880309LSUvE648aN4/3vfz9nnXUWP/rRjzjhhBMAuOiii3j22Wdpa2tbZx4/QEdHx5oYO02cOJHLLruMN7/5zV3Kb7rpJsaPH88Pf/hDfvjDH67T1gsvvMCjjz7K448/ziabbMLNN98MUPa+3mCDDdh9993XeYRcuX8zJ554IlOnTuWpp57ive99L6973ev4t3/7t4pfC0mSpIFiIj2MzFowa00S3WnFyhXMWjBryCXStXr5y1/Obrvtxo033sjOO+/Mm970ph7rb7HFFmXLt9xyS5YuXUpHRweTJ0/m8ccfByj7y36pZ555BmDNIklbb711jZ9gXZ3XXrhwYcVFzUqvDYVkZuONN15nPipQ9ZzW0WTWrLVJdKcVKwrlQy2R7u2PSx0dhZUtt9pqq7LHO8srLeRVqq2tjc997nN861vfWpNIz5s3jwkTJvDe97637DlTpkxZs9jX008/zVVXXcX73/9+jjvuOG666SZ23nnnNXUff/xxXnzxxXUS7+6eeeYZNtlkkzWfrdK/23Ll5dref//9mTp1Kv/6r//KY489xlVXXcXYsWN7jEGSJGkguGr3MLKsY1lN5cPJ5z//eW688UY23XRT7rjjDs4+++we6z/88MNlyztXIm5ubu7yftlll/U4NKPzGb+TJ08G4IEHHqj7M3Ve+4wzzujx2tdcc02Xc5544ok1vdXlPpvWWlbh1q9UPpR13i+Vvs+dq3Z31uvJ1ltvzYwZM7j++uu566671iwy9ta3vpXNNtus1/M33HBDjjnmGNrb23n66ad597vf3eUPAc3NzWy00Ua9DnmaMmXKmvag8r/bcuXl2usclfHHP/6RZ599lp122qnLavkHHHAAAO3t7UQEu+++e6+fVZIkqS9MpIeRlubywzkrlQ8XN954I5/+9KfZcccduf3229lxxx2ZPXt2jyvwlj4Sq9Pf/vY37r//fqZOnbomId5rr70AuOGGG6qKZaeddmLy5MnceuutPPjgg73W7+wNW7Vq1TrH9txzT8aMGVP1tQFe85rXsHr16rKfvfvQV0GlEc49jHwesl796lcD5b/PL7744pp74jWveU1V7Z122mlAoSd63rx5AJxyyik1xXTooYdyyCGHsHjxYr73ve+tKd9rr7148sknueOOO6pqp/Ozlbuvn3nmGW655Zaa4jr66KM56aST1nl1rr6//fbbc9JJJ3H00UfX1K4kSVLVap1UPdpeQ2nV7otvvTib5jYlc1jzaprbNKQWHKPCCsWVPPHEE9nS0pITJ05cs3r1LbfckhMnTsxtttkmH3vssS71q1m1+8wzz1xT/sILL+T222+f66233poFxbq78cYb85///Oea/U984hMVV+1+/vnnu6za/c1vfjOBPP/888u2/a53vWvN4mgrV65c5/i9996bf/vb39bsd67avffee6+zavf222/vYmPdXHxxZlNTJqx9NTUNrQXHqv038Y9//CM33njjHDt2bN50001djn3hC19IIA866KAu5eUWG+u0evXqfPnLX54bbbRRrrfeevnyl7+87HV7WrU7M3PhwoUJ5Pbbb7/mHr766qvX3KflFuV75plnunyGjo6ObG5u7vdVu7tzsTFJktQXuNjYyNY5D3rWglks61hGS3MLc6fPHZLzo8stFNTpqKOOWjPk8n3vex/Lli3ja1/72pqyV73qVXzpS1/igx/8IO9973u5/PLL12nj9a9/Pbvvvjtvf/vbaW5u5sorr+RPf/oTe+yxB//+7/++pt748eP58Y9/zJvf/GYOO+ww9tlnH3bffXeampq4//77WbhwIX/729/4+9//TlNTEwCzZ8/m97//PfPnz+flL385hx9+OC95yUu4//77+dWvfsUXvvAFTjzxRAAOOOAAxowZw8c//nFuv/12NtpoIwA++clPAvCNb3yDe+65h09/+tNcdNFF7LvvvmyxxRY8+OCD3HXXXSxcuJBLLrmE7bbbDoDjjz+eH/zgB1x++eXssssuHHnkkaxcuZJLL72U1772tfz1r3+t59sy4nTOg541qzCcu6UF5s4devOjq7HBBhtw/vnn87a3vY399tuPt73tbbS0tLB48WJ+9atfseWWW/Ktb32r6vYigg984AP867/+K1B7b3Sn1tZWjjzySC677DK+853vcMoppzB9+nQ+//nP8/GPf5wddtiBQw89lO22245nnnmGpUuXct1117Hvvvvyy1/+EigM7T733HN55zvfyT777NPlOdJ/+tOf2G+//bjuuusYM8ZBUpIkaZioNfMeba+h1CM9HNDL46+A/O53v5uZmV/72tcSyCOOOKJsW29961sTyC9/+ctryjp74P7617/mF7/4xdxxxx1z4sSJ+dKXvjQ/8pGPZEdHR9m2Hn744fyP//iPfOUrX5nrrbderr/++jlt2rQ85phj8qKLLlqnt3jlypX59a9/PV/72tfm+uuvn01NTTlt2rQ8+eST85577ulS96KLLspXvepVOWnSpLK9j88//3x+/etfz7333js33HDDnDBhQm677bZ54IEH5le+8pV1et2ff/75PPPMM3O77bbLCRMm5JQpU/ITn/hEPvfcc/ZID0Pl7ome/OEPf8ijjjoqN9100xw/fnxuu+22+YEPfKDHx8FV6sl94okncsyYMTlx4sR17rNOvfVIZxZGiUREbr311l1GStxwww35tre9LbfaaqscP358brrppvmqV70qzzjjjFy4cOE67VxxxRW5995753rrrZeTJ0/OI444Iu+666487LDDEljnmdS1skdakiT1BX3okY7CeaqktbU1Fy1a1Gu9xYsXs8ceewxCRKPbiSeeyIUXXsh9993H1KlTGx2ONKRde+21HHDAAbzzne/koosuanQ4Za1atYqXvexlPP/88w1bUM+f35IkjW4RsTgzW2s5x3F0kjRC/dd//RcAH/zgBxscSeGxXSu6PassM/nsZz/LsmXLXBhMkiQNK86RlqQR5LbbbuNnP/sZixcv5he/+AWHH344r3vd6xodFr/73e94+9vfzpve9CamTp3KM888w+9+9ztuueUWtt122x7XVZAkSRpqTKQlaQRZvHgxn/jEJ9hwww1529vexrnnntvokADYcccdOfzww/ntb3/LFVdcwYsvvsg222zDhz/8YT7xiU+w+eabNzpESZKkqo2qOdIR0QJ8A3gM+Etmfr63c5wjLUkjmz+/JUkDoZ1bmcUCltFBC83MZToz2a3RYamMUTlHOiLOj4hHIuL2buWHRMSfI+LeiPhYsfjlwM8z833AzoMerCRJkqRhK8Y9TURW9Xpn7MrSOJ2M2SyNj/Cei++hnVsb/REGzWmf/w3jNl5OxGrGbbyc0z7/m0aH1K+GfSINXAAcUloQEWOBbwJvoZAwHx8ROwM3A++IiF8D1wxynJIkSZKGqRj3NKx6CRB9eI1h1bveyikX/rURoQ+60z7/G8779KtZ9eQ2wBhWPbkN53361SMqmR72iXRmXg880a14T+DezPxbZr4AfB84EngvMDszDwQOG9xIJUmSJA1ba5LovhrDPz99QH9FM6TN+6+psHL9roUr1y+UjxDDPpGuYGvg/pL95cWyXwIfjoj/BpZUOjki2iJiUUQsevTRRwc0UEmSJEmjxP3NjY5gUKx68qU1lQ9HI3XV7nJ/KsrMvB04treTM3MeMA8Ki431c2ySJEmSRqExmz0MbNnoMAbc2I0eLA7rXrcc1i0fjkZqj/RyYNuS/W2AB2tpICJmRMS8jo6Ofg1MkiRJ0jC03vNAPX1sqznljHv7K5ohre3fl8D4f3YtHP/PQvkIMVIT6YXADhGxXURMAN4BXF5LA5k5PzPbmptHx/ALSZIkST1Y8fmSZLrW12pOPftGzv3Yvo2IfNCd+7F9OfWsmxm70XJgNWM3Ws6pZ908oj7/sB/aHRGXAPsDm0bEcgqLiX0nIj4IXAmMBc7PzDsaGKYkSZKk4W7F56uqNpmJPMnHS0oCGDlJZDXO/di+nNv5EGK2YaQM6e407BPpzDy+QvkVwBV9bTciZgAzpk2b1tcmJEmSJI0Qk5nIUzzf4/GuybNGspE6tLtuDu0eeBHB/vvv3+gwJEmSpF49yceZzMQuZZOZSDKHZI5J9ChjIq1+FRFE1PN8veFpzpw5az5752vSpElMmzaNtrY2lixZ0ugQJUmSVKcn+fiaxNnkeXQb9kO7B4pDuwfeXXfdRVNTU6PD6Ff77bffml72xx9/nF//+td8+9vf5tJLL+X3v/89O+ywQ2MDlCRJklQ3E+kKMnM+ML+1tfXkRscyUu20006NDqHf7b///syZM2fN/urVq5kxYwZXXHEFn/vc5/jud7/buOAkSZIk9QuHdqthys2R7hwife2113LppZey55570tTUxMYbb8w73vEOHnjggbJtPfHEE3z84x/nFa94Beuttx7Nzc1Mnz6dX/3qV+vU7ejo4Atf+AIHHngg22yzDRMmTGCzzTbjiCOO4He/+12PsT700EO8//3vZ+utt2bs2LFccMEFPX7GMWPGcOKJJwKwcOHCdY6vWLGCs88+m913353111+fDTbYgL333ptLLrmkbHvPP/88c+bM4WUvexkTJ05ku+2245Of/CTPP/+8c84lSZKkQWKPtIakc889l8svv5wjjjiC/fbbj9///vf84Ac/4E9/+hO33HILEyeuXehh6dKl7L///ixZsoQ3vOENHHLIIfzzn//kZz/7GYcccgjf+ta3OPnktQML7rrrLmbNmsUb3/hGDjvsMDbaaCOWLVvG5Zdfzi9+8Qvmz5/PIYccsk5MTzzxBHvttRcbbLABRx99NGPGjGGLLbbo9bNkJgDjx4/vUv7UU09x4IEHcvPNN/Oa17yG973vfaxevZorr7ySE044gTvuuIPPfvazXdo55phj+PnPf84OO+zABz/4QVauXMkFF1zAHXf4dDdJkiRpsJhIV+Ac6cb65S9/ycKFC9l1113XlJ1wwglccsklXHbZZRx33HFryt/znvewdOlSLrnkEt7xjnesKX/qqafYf//9+fCHP8wRRxyxJul9xStewYMPPsimm27a5ZrLly9nzz335IwzziibSN922228613v4vzzz2fcuOr+6axatYrzzz8fgH337frswNNPP52bb76Z//zP/+Tf//3f15Q/99xzHHXUUXzuc5/j2GOPZffddwfg4osv5uc//zlveMMbuPrqq5kwYQIAZ511FnvttVdV8UiSJEmqn0O7Kxiqj79q51am8hXGMIepfIV2bm10SAPiwx/+cJckGljTq/yHP/xhTdmf/vQnrrvuOo455pguSTTA5MmTOfPMM3nuuef40Y9+tKa8ubl5nSQaYJtttuHYY4/l7rvvZtmyZescnzBhAl/84hd7TKKvvfZa5syZw5w5c/jwhz/MLrvswpVXXsnOO+/Mpz71qTX1Hn/8cS6++GJaW1u7JNEAkyZN4j//8z/JTL73ve+tKb/wwgsB+OxnP7smie78nKVtS5IkSRpY9kgPI+3cShvzWcFKAJbSQRvzAZjJbo0Mrd+1trauU7btttsC8OSTT64pu+mmm4DCvOfSRb46Pfroo0BhOHep3/72t3z1q1/lpptu4pFHHuGFF17ocvyBBx6gpaWlS9nUqVPZfPPNe4z7uuuu47rrrutStvvuu3PttddS+keZhQsXsmrVKiKibNwrV65cJ+6bb76ZMWPGsM8++6xTv3tvtyRJkqSBYyI9jMxiwZokutMKVjKLBSMukZ48efI6ZZ09watWrVpT9vjjjwNw1VVXcdVVV1Vs75lnnlmz/ZOf/IRjjz2WSZMmcfDBB7P99tuz/vrrM2bMGK699lquu+46nn/++XXa2HLLLXuNe/bs2cyZM4fVq1fzwAMP8MUvfpGvfe1rHHfccfziF79gzJgxXeJeuHBh2UXIysXd0dHBxhtvXLZHvJq52pIkSZL6h4l0BUNxjvQyOmoqHw06e3m/+tWv8uEPf7iqcz71qU8xYcIEFi1axCte8Youx0455ZR1epQ7RUTVcY0ZM4Ztt92Wr371qzz44INceumlfOMb31gTY2fcZ5xxBl/+8peranPDDTfkiSee4MUXX1wnmX744Yerjk2SJElSfZwjXcFQnCPdQvlYKpWPBp2LbN1www1Vn3Pvvfey8847r5NEr169mt/85jf9Gh/Al770JSZOnMhZZ53F008/DcCee+7JmDFjaor71a9+NatXr+bGG29c59hAxC1JkiSpPBPpYWQu02mi6yOUmhjPXKY3KKLGa21t5Q1veAM//vGP16yO3d1tt93GI488smZ/6tSp3HPPPTz44INryjKTM888kzvvvLPfY2xpaeHkk0/m8ccf50tf+hIAm2++OTNnzmTRokV85jOf4cUXX1znvL/+9a/cd999a/bf/e53A/DJT36yy5zujo4OPvOZz/R73JIkSZLKc2j3MNI5D3oWC1hGBy00M5fpQ3J+9Iknnljx2LnnnktTU1O/Xet73/seBx54ICeddBJf+9rXeN3rXsfkyZNZvnw5t956K7fffjs33XTTmoXCzjjjDD7wgQ/w6le/mmOOOYbx48fz29/+ljvvvJMZM2Ywf/78fout0yc+8Qm+853v8JWvfIUPfehDbLrppnzjG9/gnnvu4dOf/jQXXXQR++67L1tssQUPPvggd911FwsXLuSSSy5hu+22AwqJ9Pe//31++ctfsssuu3DEEUewcuVKfvSjH9Ha2sqf//znNXOwJUmSJA0cE+lhZia7DcnEubvORzWVc8455/RrIr3NNtuwePFivv71r/OjH/2I9vZ2Vq1axZZbbsnOO+/Mhz70oS6P0jrllFOYOHEi55xzDhdeeCHrrbceb3jDG/jud7/Lj370owFJpLfaaitOPfVUvvzlL3P22WfzpS99iQ033JDrrruOefPm8b3vfY8f/ehHPPfcc2yxxRbssMMOfOUrX+Hggw9e00ZE8JOf/ITPfe5zXHTRRXz9619nq6224j3veQ+nnXYal112GRtuuGG/xy5JkiSpq8jMRscwJJUsNnbyPffc02v9xYsXs8ceewx8YFIZV111FW9605v42Mc+xtlnn93ocKRhxZ/fkiSNbhGxODPXff5uDxwHWsFQXGxMKp3X3enxxx/nYx/7GABvfetbBzskSZIkadRxaLc0jPzrv/4rf/rTn9hnn33YbLPNWL58Ob/4xS944oknOOWUU9hzzz0bHaIkSRpg7e0waxYsWwYtLTB3Lsyc2eiopNHFRFoaRo4++mgefvhh5s+fz1NPPcWkSZN45Stfyfve9z7e//73Nzo8SZI0wNrboa0NVqwo7C9dWtgHk2lpMJlIS8PIcccdx3HHHdfoMCRJUoPMmrU2ie60YkWh3ERaGjzOkZYkSZKGiWXLaiuXNDBMpCVJkqRhoqWltnJJA8NEuoKImBER8zo6OhodiiRJkgQUFhZraupa1tRUKJc0eEykK+jL4698JrckDS/+3JY03MycCe+Zt4yxU56GSMZOeZr3zFvm/GhpkLnYWD8ZN24cL7zwAhMnTmx0KJKkKr3wwguMG+d/hZKGj3Zu5cKZ81k1cyUAq4ALGc/rmcFMdmtscNIoYo90P2lubuaJJ55odBiSpBo88cQT1DLySJIabRYLWMHKLmUrWMksFjQoIml0MpHuJ1tuuSWPPPIIf//733n++ecdLihJQ1Rm8vzzz/P3v/+dRx55hC233LLRIUlS1ZZRfv2eSuWSBobj2frJpEmT2HHHHXnooYe4++67efHFFxsdkiSpgnHjxtHc3MyOO+7IpEmTGh2OJFWthWaWlkmaW3B0jTSYTKT70aRJk5g6dWqjw5AkSdIINZfptDG/y/DuJsYzl+kNjEoafRzaLUmSJA0TM9mNecxgCs0EMIVm5rnQmDTo7JGWJEmShpGZ7GbiLDWYPdIVRMSMiJjX0eHCDZIkSZKktUykK8jM+ZnZ5mNRJEmSJEmlTKQlSZIkSarBgCXSERED1bYkSZIkSY1S92JjEbENcCDwWmAXYCqwOTCpmEs/BzwCLAFuAxYC12Tm8nqvLUmSJEnSYOtTIh0RLcC7gOMoJM9dDnfbXw+YArQAbyxp4w7gB8DFmbm0L3FIkiRJkjTYahraHRH7R8TlwN+Asygk0dHtVfH0bq9XFtv4a0T8LCIOrD18SZIkSZIGV1U90hHxBmAu8PrOom5VngBuBe4FlgNPAiuK9dYDNga2AaYBuwEblbQRwFuAt0TETcCszLyuj59HkiRJkqQB1WMiXRzC/RXgqM6i4vtzwJXAFRTmO99by0UjYgfgAAoJ9JuBScVDewO/jojLgDMc8i1JkiRJGmp665G+i0KS25lA/x74NvB/mflMXy+amfcA9wDzImJ94G3AyRQSaYAjgTcBG/T1GpIkSZIkDYTe5kivV3y/HNg7M/fOzPPrSaK7y8x/ZuYFmfl6YC/gsm7XliRJkiRpyOgtkb4WeF1mHpWZvx/oYDLzD5n5VmDP4rUlSZIkSRpSehzanZkNWUk7MxcD0/u73eKiaTMpfO6dM3Of/r6GJEmSJGlk69NzpIeSiDgfOBx4JDN3KSk/BPgqMBb4n8z8fGbeANwQEUcBCxsRryRJ0mgWZ5Z/WmrOzkGOZPhqv62dWQtmsaxjGS3NLcydPpeZu85sdFjSqDLsE2ngAuAbwP92FkTEWOCbwMEUHse1MCIuz8w7i1VOAN4/yHFKkiSNanFmwJxVrPsk1SQIk+kqtN/WTtv8NlasXAHA0o6ltM1vAzCZlgZRb3Okh7zMvJ7Cc6xL7Qncm5l/y8wXgO9TWAm885FeHZn59OBGKkmSNMqtSaLLvOasamRkw8asBbPWJNGdVqxcwawFsxoUkTQ6DVqPdERMAl4HbEkh8f1dZv5jgC63NXB/yf7y4rUBTgK+29PJEdEGtAG0tLQMRHySJEmjUGfiXK5c1VjWsaymckkDo64e6Yg4JCIOjYi3RETFn4ARcQrwIPBr4HvAL4GHIuKzxWHY/a1cLAmQmbMz88aeTs7MeZnZmpmtm2222QCEJ0mSJNWupbl8J0+lckkDo8+JdETsAVwBzAf+IzPLTmopJtHnAZPpmuCuB3wcOL+vMfRgObBtyf42FBJ5SZIkadiaO30uTeObupQ1jW9i7vS5DYpIGp3q6ZE+tGT7O+UqRMRGwH8VdzsT7dIxPQG8MyKOriOOchYCO0TEdhExAXgHcHktDUTEjIiY19HR0c+hSZIkjVbJ2l8JqylXdzN3ncm8GfOY0jyFIJjSPIV5M+a50Jg0yOpJpF9bsv2LCnVOAl5C4Sfjc8DJwMZAC4UFwKCQTH+8r0FExCXATcCOEbE8Ik7KzBeBDwJXAncB/5eZd9TSbmbOz8y25ubmvoYmSZKkUnkWa5Pmbq88q5GRDSszd53JktOXsHr2apacvsQkWmqAehYbm1Z8/3tmPlahznEl22dnZmfP9VMR8S7gVcArgNdExLaZef86LfQiM4+vUH4FhaHnfRIRM4AZ06ZN67WuJEmSqmTCLGkEqCeR3orCnxCXljsYEc3Aa4q7CXy79HhmroqIi4DPFYteQ9eVthsqM+cD8zee8oqT3/6tmxodjiRJ0rC3BTv2ePzt+DuXpOGhnqHd6xffn6lwfO9i+wkszsyHy9S5tWTbpQYlSZJGsP2Y2qdjkjTU1NMjvQoYC0yqcHyfku1rK9R5qmR7gzpiGTAv22x9fnDK3o0OQ5IkaYTw9ypJQ8v/faD2c+rpkX6KwkJhUyocP7Bk+7cV6pSu3f9iHbH0O1ftliRJkiSVU08ifXfxfduI2KH0QERsA+xV3E3ghgptbFGy/WQdsfQ7V+2WJEmSJJVTTyJ9bcn2lyJiHEBEBIVnR3fOj/59ZlZKkncv2V5SRyySJEmSJA2KehLpC4EXituHAXdHxPeA24C3l9T7Vg9t7F+yfVsdsfQ7h3ZLkiRJksrpcyKdmUuAuRTmSQNsRyGBfkVJtcXAReXOj4jtgD0o9FovqbCqd8M4tFuSJEmSVE49PdJk5meATwMrKSTUpa8bgSMyMyucfmrJ9lX1xCFJkiRJ0mCp5/FXAGTmZyPiW8CbgG2BZ4GFmXljL6dOoDA8HOC79cYhSZIkSdJgqDuRBsjMR4H2Gs85vT+uPVAiYgYwY9q0aY0ORZIkSZI0hNQ1tHskc460JEmSJKkcE2lJkiRJkmrQL0O7S0XENKAV2AxoBsZk5ln9fR1JkiRJkhqhXxLpiFgPOA34EIUFx7pbJ5GOiIuArSk8/mpmZj7UH7FIkiRJkjSQ6h7aHRG7AH8E/otCEt39MViV3ArsX3y9s944JEmSJEkaDHUl0sVh3NcAL2dt4vwscAvwZC+nfxdYVdw+qp44BkJEzIiIeR0dHY0ORZIkSZI0hNTbI30JsElx+yEKPcuTM/M1wB96OjEzHwN+QyH5fm1ErF9nLP3KVbslSZIkSeX0OZGOiKOAPSjMcV4OtGbm9zJzZQ3N/Lb4Pg7Yta+xSJIkSZI0WOrpkT66ZPtfMvPBPrRxe8n2y+uIRZIkSZKkQVFPIr1X8f3xzPxZH9t4rGR7k4q1JEmSJEkaIupJpLegMKz7z3W08WzJ9np1tCNJkiRJ0qCoJ5HufAZ1LXOiu5tcsj2klsd21W5JkiRJUjn1JNKPUlhxe5s62titZPuxirUawFW7JUkaWdq5lal8hTHMYSpfoZ1bGx2SJGmYqieRvqf4vn1E9DWZPqpke1EdsUiSJFXUzq20MZ+ldJDAUjpoY77JtCSpT+pJpK8s2f5orSdHxBHAaynMs16WmX+tIxZJkqSKZrGAFe07wdTTYcxsmHo6K9p3YhYLGh2aJGkYqieR/h5rFwv7YEQcW+2JEfFa4LslRd+sIw5JkqQeLW1vgbYZsHQyZBTe22YUyiVJqlGfE+nic6PPoTBPegxwSUR8LSKmVDonIraOiLOB6ygsNJbAcuDcvsYhSZLUm7GzDoYVE7oWrphQKJckqUbjeq/So08DrcDBFJLpfwH+JSL+BmzUWSkifgy8HHhFZ1Hx/Tng6MxcUWcckiRJFa1a9pKayiVJ6kk9Q7vJzFXA0cAPKCTHna+XUUiks1j1SApJdJSc/hhwSGYuricGSZKk3kxpiZrKJUnqSV2JNEBm/jMzjweOB24pFkeFF8CLwP8Ar87M6+u9viRJUm/mzoWmpq5lTU2FckmSalXv0O41MvMHwA8i4lXAfhSeEb0JsD7wFPAQcCNwdWYOqWdGS5KkkW3mzML7rFmwbBm0tBSS6M5ySZJqEZnZe61RKCJmADOmTZt28j333NNrfUmSJEnS8BMRizOztZZz6h7aPVJl5vzMbGtubm50KJIkSZKkIaTPQ7sj4t3FzQcyc0Ef29gfaAHIzP/tayySJGnwtHMrs1jAMjpooZm5TGcmuzU6LEmSBk09c6QvoLAq95VAnxJp4CPAEcV2TKQlSRri2rmVNuazgpUALKWDNuYDmExLkkaNoTC0u3RFb0mSNITNYsGaJLrTClYyq89/U5ckafgZCom0JEkaJpbRUVO5JEkjUaMT6QnF9xcaGoUkSapKC+UX4axULknSSNRvz5Huox2K7/4ZW5KkfhLMKVv+UjbgAT5aV9tzmc572//KylkHwLJmaOlg/NxrmDtz+7ralSRpOGlYj3REnAhMo7DQ2N2NikOSpJGkUhIN8CDPsDVfrO8C7bsRbUfC0smQAUsnF/bbXWhMkjR6VNUjHRG/7uHwnr0c79IUsB6wPbBxSfnVVZ4vSZLq8CDP1HX+rFnwwoquf4d/YcUYZs2CmTPralqSpGGj2qHd+1PoOe4ugI2A/Wq8bpS09zjwrRrPlyRJDbBsWW3lkiSNRLUM7Y5ur0rl1bw6z1sEHJyZj/b9I0iSpMHS0lJbuSRJI1G1PdJnlimbTaFX+a9Ae5XtrAb+CfwdWJyZf6nyvH4REWOAzwAbAosy88LBvL4kSY32Ujao6/y5c6GtDVasWFvW1FQolyRptKgqkc7MdRLpiJhd3Ly33PHBEhHnA4cDj2TmLiXlhwBfBcYC/5OZnweOBLYGngCWNyBcSZIG1Km0cl4uhCgZPJbF2VT/eIYHNpxTV/ud86BnzSoM525pKSTRw2F+dPtt7cxaMItlHctoaW5h7vS5zNx1GAQuSRpyIrPc1OcqToxYQqFH+trMfG9/BlVjHG8EngH+tzORjoixwF+AgykkzAuB44EjgCcz81sRcWlmHttb+62trblo0aIBi1+SNLK0cyuzWMAyOmihmblMZyaDt6J1nBlwyCGwz3xYPbbrwQ2W8dI5+/DAvz0waPEMFe23tdM2v40VK9d2pTeNb2LejHkm05I0ykXE4sxsreWcPj/+KjOnZuZ2jUyii3FcT6GHudSeFHrK/5aZLwDfp9AbvRx4slhn1eBFKUkaDdq5lTbms5QOElhKB23Mp51bBzeQvX5eTKK7LVHyTAsPzrlxcGMZImYtmNUliQZYsXIFsxbMalBEkqThrNo50uuIiHGZ+WJ/BtOPtgbuL9lfDryOwlDvr0fEG4DrK50cEW1AG0CLq6dI0qhT6VnMp9LKuRxe8bxZLGAFK7uUrWAls1gweL3Sc1ax7rqgnQrJ9Gi0rKP8suKVyiVJ6kmfe6SB+yNibkRM7a9g+lG53x4yM1dk5kmZ+aHM/GalkzNzXma2ZmbrZpttNoBhSpKGmkpJNMB5LOI0flbx+DI6aiofGJWS6NGtpbn8HxAqlUuS1JN6EuktgI8B90bEzyPiiOKq2EPBcmDbkv1tgAdraSAiZkTEvI6OwfzlR5I0UNq5lal8hTHMYSpf6fNw63ksrnisheaayjV45k6fS9P4pi5lTeObmDvd5cYlSbXrj8R3DHAI8BNgaUR8OiK27od267EQ2CEitouICcA7gMtraSAz52dmW3Ozv/xI0nDXn3OXV1F5kc65TKeJ8V3KmhjPXKbXfJ2+66k3OnnpS0dnb/XMXWcyb8Y8pjRPIQimNE9xoTFJUp/Vs2r3HOC9dO35hcJK3quAnwP/nZlX1hNgFXFcAuwPbAo8DMzOzO9ExKHAORQef3V+ZvbpT86u2i1Jw99UvsLSMsOrp9DMEs7oUtbT0G6AsQQvMrvi8Yav2t1LntzH//YlSRqx+rJqd58T6eIFxwCHUViY6y107eHubHgpMI9CMvtIny82yCJiBjBj2rRpJ99zzz2NDkeSVIcxzCnbjxzA6m6Jc2+JdG8Ljg0FlZJpk2hJktY1qI+/AsjM1cUh0DOAqcBngM6HU3audjIVmEthcbIfRMSB9VxzsDi0W5JGjlrmLmcPifRwSKKhkDCXe0mSpP5RV4902QYLvdQzKPRSv5nyvdT3At8CLsjM7s+AHlIc2i1Jw1/nHOnSR1M1MZ55zBjUYdeSJGnoGfQe6XKKvdSXZeZhwHYUeqM7V8zu7KXeAfgCsDwi/jci9u3vOOrlqt2SNHLMZDfmMYMpNBMU5kabREuSpL7q9x7psheJGAscQaGX+mC6PuSyM4A7gfOACzPznwMeVJXskZYk1aK9HWbNgmXLoKUF5s6FmS4MLUnSkDUkeqTLycxVmfmTzHwLhZW+n6OQQHcm0QHsDHwdeCAizoqIDQcjNkmS+kt7O7S1wdKlhTnJS5cW9tvbGx2ZJEnqT4PVI90MvBs4BXhF6aEKpySF4eAnZOYNAxxej+yRljRYDuJCFnDfmv3pbMfVvKfhj1NS9aZOLSTP3U2ZAkuWDHY0kiSpGoP++KteG4/Yi0LyfBwwqbO4pMpC4FzgZuBECsn2xhQS6QCeBfbIzLsHLMgKfPyVpP5QKQnu7RFLnXZmU5bQ4SJZw8SYMeVXx46A1asHPx5JktS7IZFIR8RLgHdRSKB36SwuqfIs8H3gm5n5x27nTgJOA2YDGxSLL87M9/RrkDWwR1oaPapJbqfQXHXPcKWVokv3+2oKzSzhjLrbUXkRq1l30FSy86HXc8fP96943mjpkW6/rZ1ZC2axrGMZLc0tzJ0+l5m7OhFckjQ8NXSOdES8NiL+h8KQ7K9TSKJLFxW7B/g3YOvMPKl7Eg2Qmc9l5peBQ0qKh8VzpyUNb9X2EC+lgyy+tzGfdm6tWHcWC9ZJmvsjiQZYhk8UGChrk+jurzHcecV+vPKwayueO3cuNDV1LWtqKpSPFO23tdM2v42lHUtJkqUdS2mb30b7bU4ElySNHnUl0hGxQUScEhF/BH5HYSGx9Vn7W8cq4DLgzZm5Y2Z+JTOf6q3dzLyJwnDvALaoJ0ZJfXcaP2McZxLMYRxncho/W6dOO7cyla8whjlM5Ss9JpbdHcSFBHPWvA7iwv4Mf8CtYCWzWFDx+EAmuy00D1jbKv0b8LrH7vxF5Sc2zpwJ8+YVeqAjCu/z5o2sVbtnLZjFipUrupStWLmCWQtmNSgiSZIG37i+nhgR3wKOp5A4Q9ffOh4G/gf4VmYu7+MllgOvAcb2NcZ6lMyRbsTlNUjK9UJmlT2TA9XmQMTUF6fxM85j7bSGVeSa/XM5HFh36HJnLy3Q6/zd7gtrASzgPg7iQq6mYbM5atZTstxCM0vrTKYrzZGey/S62lUdsuf/lmbOHFmJc3fLOpbVVC5J0khUT4/0yaybRN9AIbneNjM/VUcSDWsfjdUQmTk/M9uam4dur09pT17na7hqxGepdI16rl1vmwMRU1/NY3Gv5ZWGLvfUS9upexLdW/lQ1VPP8Fym08T4LmXd93syne24gw8yjxlMoZmgMDfahcb6pr29MId5zJjCe58fSRWr+jGq4aeluaWmckmSRqJ650gH8AxwHrBrZu6XmT/IzBfrD41PAgfgHOmyhlLCVa+R9FlGklUV/pZVWl6pN3a0zN/trWd4JruVTYKrGWGQzFnTMz+T3VjCGaxmDks4wyS6D2p7vnNS+W+5yc5v+c3ABToMzJ0+l6bxXSeCN41vYu70ETQRXJKkXvR5aDdwO4UE+qLMfKaf4lkjM+/o7zYlVW8sUTaZHlsyi6PS0OXhOH83qxwJUcuq3VBIgsvVacRw/dFs1ixY0XVaLytWFMq7D8POHFNccKy73lftHg06V+d21W5J0mjW50Q6M+0SkUawNvboMke6tLzTXKaXfbxTNfN3p7Nd2WHc09mujxHXz+R25FpWYfpupfLMcgO2Ati/nyIa3mbuOtPEWZI0qvXb469GmoiYERHzOjpGxxBVqbtzOZxTaV3TAz2W4FRa1yw0BpWHLlcz9Phq3rNO0jyd7YbVQmMaPloqTN+tVC5JktSTyGzoml5DXmtray5atG6vXKP1NAR1uPWqNfKzuGq3NDp0zpEuHd7d1DTyHk0lSZJqFxGLM7O1pnMGOpGOiInAa4GXAs8C92Xm7QN60X40VBNpGFkJ10j6LJKGpvb2wpzoZcsKPdFz55pES5KkQUqkIyKA7YFNKazY/efMXFmm3nrAZ4A21j4mq9Ny4MzMPL+mizfAUE6kJUmSJEn16UsiXfUc6YiYFBFzgYeAPwO/Bf4EdETEBRGxZUndjYEbgTOADSis0FL62hb4dkR8u5ZgJUmSJElqtKoS6YjYELgW+BiwGV2T4knAu4CbSpLpC4FX9dBkFs99X0R8qE+RS5IkSZLUANU+/uprwJ4UEuDOJLhUAC3Af0XEPOCwYj2AK4DrgSeAjYH9gENK2vlMRHx3IJ5FLUmSJElSf+s1kY6InYB3szbxfRK4CLgLmADsAxxLoXf7baxNsp8BjsjM67o1+V8RcQBwGYVh3y8pnn9BnZ+lX0XEDGDGtGnTGh2KJEmSJGkIqWZo9ztLtv8M7JyZp2fmtzLz65l5PHAA8DyFxPrtFJLuT5VJogHIzGuAT5UUHdSn6AdQZs7PzLbm5uZGhyJJkiRJGkKqSaT3Ltn+UGY+3L1CZv4G+AaF3uhxwItAbytyn1+sB7B7FXFIkiRJktRw1STSOxbfn8zMq3uo98PiewJ/6W3Oc2b+g0IPdwBb9lRXkiRJkqShoppEejLF5LiXeneXbD9a5fUfKb6/pMr6kiRJkiQ1VDWJdFPx/emeKhV7mDs9V+X1Xyi+V7t6uCRJkiRJDVXVc6SLVg9YFJIkSZIkDRO1JNKSJEmSJI16JtKSJEmSJNXARLqCiJgREfM6OjoaHYokSZIkaQipZZGvjSPijf1cd+Marj+oMnM+ML+1tfXkRsciSZIkSRo6akmkXwtcU0W9qKGuJEmSJEnDSq1Du6OXVxZf1dSNOmOXpFGhvR2mToUxYwrv7e2NjkiSJGl0qzaRrjbxrTVJNpmWpKKDDoKIta+DDiokzW1tsHQpZBbe29pMpiVJkhopMrPnChH7DUYgmXndYFynVq2trblo0aJGhyFphIkq/4w4aRI899y65VOmwJIl/RqSJEnSqBQRizOztZZzep0jPVQTXEkarqpNoqF8Eg2wbFn/xCJJkqTa+fgrSRpAAzW/uaWlf9qRJElS7WpZtVuSVIPO+c0rVhT2O+c316qpaW0bnftz5/ZPjJIkSaqdPdKSNEBmzeqaAMO6+72ZPh3mzSvMiY4ovM+bBzNn9l+ckiRJqo2JtCRVqdZh2vXOY54+Ha6+upA0L1kCq1cX3k2iJUmSGqvHod0RsWNm/nmwghkq15Yk6HlRsNJh2pUS25aWQr3upkwpX16qlwcqSJIkqYF665G+LSLOi4htBiUaICK2johvAbcOQNv7R8QNEfHfEbF/f7cvaXgrfYZzNStrr1hRGL5dydy5hfnMpTrnN2f2/JIkSdLQ1VsiPQ5oA+6NiG9HxC4DFUhE7BoR3wH+CryfKhdCi4jzI+KRiLi9W/khEfHniLg3Ij5WLE7gGWASsLwfw5c0zNXySKpSPQ3fnjmz8vzmODN6fR30vwcB0H5bO1PPmcqYM8cw9ZyptN/WT0t/a0D4/ZIkaeSL7KHrIyIuA2YUdzsr/g64EPhJZj5a18UjtgTeCrwLeF1ncfH9ssx8axVtvJFCcvy/mblLsWws8BfgYAoJ80LgeODuzFwdEVsAX87MXmcatra25qJFi2r7YJKGnb4m0lOmFOYt13StM6u/2M6b7sySjiWsWLl2lbKm8U3MmzGPmbs6WXqoab+tnbb5bX6/JEkaRiJicWa21nJOjz3SmXkkcDhwN4UEN4C9gPOAByPidxFxdkS8NSK2j4iK7UXE2IjYISKOiYj/ioiFFJLcb1BIojvbvxs4vJokuhjj9cAT3Yr3BO7NzL9l5gvA94EjM3N18fiTwMRq2pekSgbjMVR3PnZnl6QMYMXKFcxa0MOYcjXMrAWz/H5JkjQK9Dp8OjOviIhfAu8BPgFsXzw0Fnht8dVpdUQ8TCGxfZZCYrwesDGwOesm7qXdMn8F5lLoWV5NfbYG7i/ZXw68LiKOBt4MTKaQwJcVEW0UhrTT0tJSZyiSRpqIwkJic+c2bgXtZR11LgmuAVHp++L3S5KkkaWqecjFxPa7EXEBcBRwKnAg6ybGY4GXAlt1K680jnE1cA1wLvDT7GmceW3KXS8z88fAj3s7OTPnAfOgMLS7n2KSNAIMlYXAWpr9I99Q1NLcwtKOdZdk9/slSdLIUtNzpLPgJ5n5JmAKcDpwFYXe51LR7VXq2eI5ZwBTM/PgYpv9+evpcmDbkv1tgAf7sX1JI0yln0CNXk175013pml816W/m8Y3MXf6AI8pV5/MnT7X75ckSaNAVT3S5WTmA8DXgK8VF/faBdgZ2A7YDFi/WPWfwKPAfcAdwB2ZuaqeoKuwENghIrYDHgDeAZxQSwMRMQOYMW3atAEIT9JQNFiJcs7OqhYcm77ddK5+99W039bOrAWzWNaxjJbmFuZOn+vCVUNU5/fF75ckSSNbj6t2DwcRcQmwP7Ap8DAwOzO/ExGHAudQGG5+fmb2qTvAVbulgXPQQbBgwdr96dPh6qsbF48kSZJGn76s2j3sE+mBUtIjffI999zT6HCkEad7Et3JZFqSJEmDyUR6ANgjLQ2Mnp7b7I8lSZIkDZZ+f460JPWmvR2mToUxYwrv7e2NjkiSJEkaWCbSkio67TQYN67QezxuXGG/VHs7tLXB0qWFXuSlSwv7JtOSJEkayUykK4iIGRExr6Ojo9GhSA1x2mlw3nmwqrjG/qpVhf3SZHrWLFixout5K1YUynszfXpt5ZIkSdJQ4RzpXjhHWqPVuHFrk+hSY8fCiy8WtseMKT+fOQJWr+79Gq7aLUmSpEbryxzpPj9HWtLIVi6J7l7e0lIYzt1dS0t11zBpliRJ0nDk0O4KHNqt0W7s2N7L586Fpqaux5uaCuWSJEnSSGUiXUFmzs/Mtubm5kaHIjVEW1vv5TNnwrx5MGVKYTj3lCmF/ZkzByfG/hZnRq+vWrXf1s7Uc6Yy5swxTD1nKu23uRJbo/i9kCRJ/cU50r1wjrQGW7nnKzfqn+lppxUS41WrCj3RbW1w7rmNiWWg1ZIk5+zqviHtt7XTNr+NFSvXrsjWNL6JeTPmMXPXYfrXhmHK74UkSaqkL3OkTaR7YSKtwVQuie7kP9WBNRCJ9NRzprK0Y91J5FOap7Dk9CVVX0/183shSZIq6Usi7dDuCpwjrb6KWPel0WlZx7KayjVw/F5IkqT+ZCJdgXOk1ReVkmaT6dGppbn88uWVyjVw/F5IkqT+ZCKtUc3eYw2kudPn0jS+67LmTeObmDvdZc0Hm98LSZLUn0ykNWrZe6xS1c57rrYewMxdZzJvxjymNE8hCKY0T3FxqwbxeyFJkvpTvy42FhHrAQcAewPTgI2AScBTwCPAIuD6zLy73y46wFxsbOQaiIW9+qPNobRqtyRJkjTS9WWxsXH9dOH1gU8D7wcm91D1pGL9G4AzM/Oa/ri+hj+Tx7VG6+eWJEmShou6h3ZHxO7An4CPUuiB7kyJosyrs/yNwFUR8cV6rz9QXLV78IykIdaVkmCTY0mSJGnkqGtod0TsAPwW2BRI1ibLTwK3AY8CzwMbAtsDO1JI3jvrJvD1zDy9z0EMMId2D7xGPTvZZzZLkiRJasTQ7gvomkTPB76YmTdUCHBj4F3AJ4rnBfChiLgiM39VZyyjjsOh65Pp11CSJElS7fo8tDsiDqWwqFgCq4CTMvPISkk0QGY+kZlfBXYG/tDZFPCZvsYxWo2k4dCNlLnuS5IkSZJ6Us8c6aNLtudm5nerPTEzHwdmUBj6DdAaEdvUEYskSZIkSYOinkR6n+L7c8CXaj05Mx8D5pUUvb6OWDSMuUCXJEmSpOGknkR6SwrDuu/IzGf62MaNJdtb1BFLv3PV7sHlEGtJkiRJw0U9ifR6xfe+JtEAK8q0NyRk5vzMbGtubm50KJIkSZKkIaSeRPoxCguFbV9HG9t1a09Vcji0JEmSJDVGPYn0X4rv20REX+c3H1+yfU8dsYxKDoeWJEmSpMFXTyL9y5Lt8yKipjHQEfFe4ODi7tPAb+uIRZIkSZKkQVFPIn0ha+dHvxK4ISJaezspIiZExGzWrtidwLczc1UdsUiSJEmSNCjG9fXEzHwkIs4C/otCMrwL8PuI+A0wH/gThedEvwC8hMJc6n2AY4HNKMyvBngAmNvXOCRJkiRJGkx9TqQBMvOLEbEDcDKFZDqAfYuvSqJYF+AJ4JDM9BlTkiRJkqRhoZ6h3QBk5inAv7D2UVZR8l766n7sGuDVmXlnvTFIkiRJkjRY6k6kATLzPGBb4D+AmygM5+4ugPuBi4H9MnN6Zt7fH9eXJEmSJGmw1DW0u1RmPgV8AfhCRIynkFhvBEwEngIeycxh86zoiJgBzJg2bVqjQ5EkSZIkDSGRPny4R62trblo0aJGhyFJkiRJGgARsTgze30CVal+GdotSZIkSdJoYSItSZIkSVINTKQlSZIkSapBvy02FhGvB94AvBKYDDSx9nFXvcnMnN5fsUiSJEmSNFDqTqQj4mDg68AOfW0CcMUzSZIkSdKwUDGRjoj/AB4GFmbmHRXqvA/4dudu/4cnSZIkSdLQ0lOP9NkUe4oj4ibgnZm5pPNgRGwPnEfXHuUHgBuA5cA/ByBeSZIkSZIaqqdE+g/AlkALsA/wM2CXkuMfBsZTSKKfBU4Bvpc+mFqSJEmSNIJVXLU7M/fKzKnA4cWiV0TEK0qqlC4OdmJmtptES5IkSZJGumoef/X3ku2nS7a3Lb4/lJmX9l9IkiRJkiQNXT0m0sV50JdRGL69ODMf6HZuAn8euPD6X0SsHxGLI+Lw3mtLkiRJktRVxUQ6IlqA64BtgKeAd3Wrsrz4PmFAIqtSRJwfEY9ExO3dyg+JiD9HxL0R8bGSQ/8B/N/gRqnRJM6MdV6Def5ga7+tnannTGXMmWOYes5U2m9rr/rcg/73oC6f86D/PWgAI61fPZ9VkiRJI0dPPdLfBF4KrAaOy8zuPc83Ulixe8cBiq1aFwCHlBZExFgK8b8F2Bk4PiJ2joiDgDspPNZL6neVkt5qk+F6zx9s7be10za/jaUdS0mSpR1LaZvfVlWCedD/HsSC+xZ0KVtw34Ihm0zX81klSZI0svSUSE+nMHR7UWYuKHP8O8X3jSPisH6PrEqZeT3wRLfiPYF7M/NvmfkC8H3gSOAAYC/gBODkiKhmjrikCmYtmMWKlSu6lK1YuYJZC2b1em73JLq38kar57NKkiRpZOkpkXyo+L5bRLQVe3THdx7MzBspJNMBfDUiNh3AOGu1NXB/yf5yYOvMnJWZpwPfA76dmavLnVz8vIsiYtGjjz468NFKw9SyjmU1lQ9no+mzSpIkqWc9JdJzKSTJE4HzgFuBV3er82Hg58DLgN9FxIEDEWQflBsHu+bRXJl5QWb+rNLJmTkvM1szs3WzzTYbkAClkaCluaWm8uFsNH1WSZIk9WxcpQOZ+Z2IeBD4KLAPhYR6jYj4dHHzj8DrKCTTV0XEPcBvKfRoP19tIJl5Vm2h92g5ax/PBYUF0x6spYGImAHMmDZtWj+GJY0sc6fPpW1+W5chz03jm5g7fW6v507fbnrZYdzTt5tepnbj1fNZJUmSNLJEZvZeqTCXeFPgycxcWSxbTUkvb2fV4nvvjXaTmWNrPackvqnAzzJzl+L+OOAvFOZ5PwAsBE7IzDtqbbu1tTUXLVrU19A0CpVbGCxnV/9Pot7zB1v7be3MWjCLZR3LaGluYe70uczcdWZV53ZfcGz6dtO5+t1XD1Sodavns0qSJGloiojFmdla0znVJNIVLlZ2fnEfZV8T6Yi4BNifQqL/MDC72Jt+KHAOMBY4PzP71G1kIi1JkiRJI1dfEumKQ7urcD196Hnub5l5fIXyK4Ar+tquQ7slSZIkSeX0uUd6tLBHWpIkSZJGrr70SPscZUmSJEmSamAiXUFEzIiIeR0dHY0ORZIkSZI0hJhIV5CZ8zOzrbm5udGhSJIkSZKGEBNpSZIkSZJqYCItSZIkSVIN6nn8VRcRsSHwZmBPYBtgMjCxytMzM6f3Vyz9wcdfSZIkSZLKqTuRjoiJwFygDVi/L00wBJ5H3V1mzgfmt7a2ntzoWEaDODPWKcvZA39bNOq6w8VpPz+NeYvnsSpXMTbG0rZHG+cedm6jwxow7be1M2vBLJZ1LKOluYW50+cyc9eZjQ5LkiRJQ0xdQ7uLvdA3AWcAG1BIint6dTm9TJlGoXLJbE/lw/26w8VpPz+N8xadx6pcBcCqXMV5i87jtJ+f1uDIBkb7be20zW9jacdSkmRpx1La5rfRflt7o0OTJEnSEFPvHOnvAruzNiG+EfgS8NfifgJnAl8Gfgg8yNoEOoHvFY+fVWcckvrZvMXzaiof7mYtmMWKlSu6lK1YuYJZC2Y1KCJJkiQNVX0e2h0RrcBbKSTELwLvzswfFI/tAmwPkJlndjvvLRQS6x2Bw4B3ZOaVfY1joDhHWqNdZ090teXD3bKOZTWVS5IkafSqp0e6dOLgFzqT6N5k5i+A1wDXAs3A/0XE9nXEMSB8jrRGu7Extqby4a6luaWmckmSJI1e9STSry++J/D1Wk7MzGeBY4DHKcytrul8SQOvbY+2msqHu7nT59I0vqlLWdP4JuZOn9ugiCRJkjRU1ZNIt1BIou/NzIcrVYqI8eXKM/NJ4HwK86UPjojN64hFw1ilVbIHevXsRl13uDj3sHM5tfXUNT3QY2Msp7aeOmJX7Z6560zmzZjHlOYpBMGU5inMmzHPVbslSZK0jsjsW9IQEc9TmGN9fWYe0O3YT4EjKCTaG2dmR4U2DgcuL9Z7W2b+uE/BDKDW1tZctGhRo8OQJEmSJA2AiFicma21nFNPj/TK4nu5lYeeLtneuoc2nizZ3qqOWPpdRMyIiHkdHWX/BiBJkiRJGqXqSaQfK76XW43rwZLtV/bQxhYl2y+pI5Z+52JjkiRJkqRy6kmk/0JhfnO550P9qWT78B7amFGy/XgdsUiSJEmSNCjqSaQ7Jw5vWObxVVdReLY0wNsjYt/uJ0fEYcC7yrQnSZIkSdKQVU8ifU3J9ltKD2TmY8BPKfRYTwCujojvRsSpxdclxeNjKCw0dntm3lxHLJIkSZIkDYpxdZx7LYXFwjYCTgS+0e34R4GDKMyhngC8u/jqFMX3F4EP1hGHJEmSJEmDps+JdGaujIh3A1MBIqIpM1eUHF8WEW8Gfkxh5e4o08wzwHsy84a+xiFJkiRJ0mCqp0eazPx5L8cXRsSOwPuANwNTgPEUVvX+NTAvMx+tJ4aBEhEzgBnTppVbS02SJEmSNFpFZjY6hiGttbU1Fy1yHTRJkiRJGokiYnFmttZyTj2LjUmSJEmSNOqYSEuSJEmSVAMTaUmSJEmSamAiLUmSJElSDepatbtTREwB3gXsC+xM4dnSTTU0kZnZL7FIkiRJkjSQ6kpeI2IMcDZweklb5Z4XLUmSJEnSiFBvL/D3gLdRSJ4Tk2hJkiRJ0gjX50Q6Io4BjqOQQAP8A/g/4HfA34EVdUfXQBExA5gxbdq0RociSZIkSRpC6umRPqlk+0bgqMx8rM54hozMnA/Mb21tPbnRsUiSJEmSho56Vu1+TfF9FXD8SEqiJUmSJEmqpJ5EemMKw7pvzcz7+ykeSZIkSZKGtHoS6ae6vUuSJEmSNOLVk0j/icIq3Vv3UyySJEmSJA159STSPyy+vzwituuPYCRJkiRJGurqSaQvAP5S3P5y/aFIkiRJkjT09TmRzswXgGMpzJE+IiL+NyI26K/AJEmSJEkaiup5jjSZeXtE7A1cCswEDouI7wM3AQ8BL9TQ1vX1xCJJkiRJ0mCoK5EGyMy/RMTngfOBjYAPFF81NdMfsUiSJEmSNNDqSl4jYiPgF8Bri0XZl2bqiUGSJEmSpMHU50Q6IiYB1wC79V84AysiXgF8BNgUWJCZ5zU4JEmSJEnSMFNPj/S/UEiik0Kv8m+A84DfAQ9l5rP1h9e7iDgfOBx4JDN3KSk/BPgqMBb4n8z8fGbeBXwgIsYA3x6M+AZSnLluZ37O7suggMZr1Gd55TdfyZ2P3blmf+dNd+aOf7ljwK8rSZIkafiq5/FXby/Z/u/MfGNmXpKZ9w1WEl10AXBIaUFEjAW+CbwF2Bk4PiJ2Lh47gkLSv2AQY+x35RLPnsqHskZ9lu5JNMCdj93JK7/5ygG9riRJkqThrZ5Eeqfi+wrg3/ohlj4prvb9RLfiPYF7M/Nvxcd0fR84slj/8szch8Iq4xrFuifRvZVLkiRJEtQ3tHsshWHdfxrkHuhqbA3cX7K/HHhdROwPHA1MBK6odHJEtAFtAC0tLQMWpCRJkiRp+KknkX4A2B5Y2U+x9KdyY4IzM68Fru3t5MycB8wDaG1tHZ6TjiVJkiRJA6Keod2LKCSs0/oplv60HNi2ZH8b4MEGxaIhaudNd66pXJIkSZKgvkT6guL7SyPiDf0QS39aCOwQEdtFxATgHcDltTQQETMiYl5HR8eABFivSitaD8dVuxv1We74lzvWSZpdtVuSJElSbyKz78lKRPwQOAa4HXhDZg561hkRlwD7U3g29MPA7Mz8TkQcCpxDYS73+Zk5ty/tt7a25qJFi/opWkmSJEnSUBIRizOztZZz6pkjDXASsBFwIPCbiPhAZv62zjZrkpnHVyi/gh4WFOtNRMwAZkybNhRHrkuSJEmSGqXPPdIR8eni5jjgVGATCqt43w3cBDwEvFBte5l5Vp8CGWD2SEuSJEnSyDXYPdJzKCTOnZLC4mOvYO0zpmsxJBNpSZIkSZJK1Tu0u9xjpnoqr2T4rZAlSZIkSRqV6kmkr2cEJ8DOkZYkSZIklVPXqt2jgXOkJUmSJGnk6ssc6XqeIy1JkiRJ0qhjIl1BRMyIiHkdHYP+aGxJkiRJ0hBmIl1BZs7PzLbm5uZGhyJJkiRJGkJMpCVJkiRJqoGJtCRJkiRJNaj3OdJrRMSGwJuBPYFtgMnAxCpPz8yc3l+x9AcffyVJkiRJKqfuRDoiJgJzgTZg/b40wRB8HnVmzgfmt7a2ntzoWCRJkiRJQ0ddiXSxF/pa4FUUEuLelCbM1dSXJEmSJGlIqbdH+rvA7iX7NwI3AUcB21NInM8CXgJsC+wDbF2sm8AlwD11xiBJkiRJ0qDpcyIdEa3AWykkxC8C787MHxSP7UIhkSYzz+x23luALwM7AocB78jMK/sahyRJkiRJg6meVbtnlmx/oTOJ7k1m/gJ4DYUh4c3A/0XE9nXEIUmSJEnSoKknkX598T2Br9dyYmY+CxwDPA5sUOv5gyEiZkTEvI6OjkaHIkmSJEkaQupJpFsoJNH3ZubDlSpFxPhy5Zn5JHA+hUXHDo6IzeuIpd9l5vzMbGtubm50KJIkSZKkIaSeRHqj4vvfyxx7vmS7qYc2biiJY986YpEkSZIkaVDUk0ivLL6vKnPs6ZLtrcsc7/RkyfZWdcQiSZIkSdKgqCeRfqz4Xm7s84Ml26/soY0tSrZfUkcskiRJkiQNil4T6YhoKb4263boLxTmN08rc9qfSrYP76H5GSXbj/cWiyRJkiRJjVZNj/QS4D7ggm7li4rvG5Z5fNVVFJ4tDfD2iFhn/nNEHAa8q0x7Q4KrdkuSJEmSyqllaHd027+mZPstpQcy8zHgp8VzJgBXR8R3I+LU4uuS4vExFFb+vj0zb64x9gHlqt2SJEmSpHLG1XHutRQWC9sIOBH4RrfjHwUOojCHegLw7uKrU2di/iLwwTrikCRJkiRp0PQ5kc7MlRHxbmAqQEQ0ZeaKkuPLIuLNwI8prNzdvUcb4BngPZl5Q5ljkiRJkiQNOfX0SJOZP+/l+MKI2BF4H/BmYAownsKq3r8G5mXmo/XEIEmSJEnSYKorka5GsZf6G6w79FuSJEmSpGGnnudIS5IkSZI06phIS5IkSZJUAxNpSZIkSZJqUMsc6T0j4tcDFEdm5vQBaluSJEmSpH5TSyK9EbDfAMQQQA5Au3WJiBnAjGnTpjU6FEmSJEnSEOLQ7goyc35mtjU3Nzc6FEmSJEnSEFJLj/TzwMMDFYgkSZIkScNBLYn0tZl56IBFIkmSJEnSMODQbkmSJEmSamAiLUmSJElSDUykJUmSJEmqgYm0JEmSJEk1MJGWJEmSJKkGJtKSJEmSJNXARFqSJEmSpBpUm0jHgEYhSZIkSdIwMa6KOtsV358dyEAGS0QcBRwGbA58MzN/1diIJEmSJEnDSa+JdGYuHYxA6hER5wOHA49k5i4l5YcAXwXGAv+TmZ/PzJ8CP42IjYAvAsM2kY4z1x0okLOzAZHUb+yZY1nN6jX7YxjDqtmrGhiRJEmSJJU3UuZIXwAcUloQEWOBbwJvAXYGjo+InUuqfLJ4fFgql0T3VD6UdU+iAVazmrFnjm1QRJIkSZJU2YhIpDPzeuCJbsV7Avdm5t8y8wXg+8CRUfCfwC8y84+DHavW1T2J7q1ckiRJkhppRCTSFWwN3F+yv7xY9iHgIODYiPhAuRMjoi0iFkXEokcffXTgI5UkSZIkDRvVLDY2XJUb45yZ+TXgaz2dmJnzgHkAra2tw3PSsSRJkiRpQIzkHunlwLYl+9sAD1Z7ckTMiIh5HR0d/R6YuhpT4TasVC5JkiRJjTSSM5WFwA4RsV1ETADeAVxe7cmZOT8z25qbmwcswHpUWp17OK7avWr2qnWSZlftliRJkjRUjYih3RFxCbA/sGlELAdmZ+Z3IuKDwJUUHn91fmbe0cAw+91wTJorMWmWJEmSNFyMiEQ6M4+vUH4FcEVf2oyIGcCMadOm1ROaJEmSJGmEGclDu+sy1Id2S5IkSZIaw0RakiRJkqQamEhX4KrdkiRJkqRyTKQrcGi3JEmSJKkcE2lJkiRJkmpgIi1JkiRJUg1MpCtwjrQkSZIkqRwT6QqcIy1JkiRJKsdEWpIkSZKkGphIS5IkSZJUAxPpCpwjLUmSJEkqx0S6AudIS5IkSZLKMZGWJEmSJKkGJtKSJEmSJNXARFqSJEmSpBqYSFfgYmOSJEmSpHJMpCtwsTFJkiRJUjkm0pIkSZIk1cBEWpIkSZKkGphIS5IkSZJUAxNpSZIkSZJqYCItSZIkSVINTKQr8PFXkiRJkqRyTKQr8PFXkiRJkqRyTKQlSZIkSaqBibQkSZIkSTUwkZYkSZIkqQYm0pIkSZIk1cBEWpIkSZKkGphIS5IkSZJUAxNpSZIkSZJqYCJdQUTMiIh5HR0djQ5FkiRJkjSEmEhXkJnzM7Otubm50aFIkiRJkoYQE2lJkiRJkmpgIi1JkiRJUg1MpCVJkiRJqoGJtCRJkiRJNTCRliRJkiSpBibSkiRJkiTVwERakiRJkqQamEhLkiRJklQDE2lJkiRJkmpgIi1JkiRJUg1GVSIdES+LiO9ExKWNjkWSJEmSNDwN+0Q6Is6PiEci4vZu5YdExJ8j4t6I+BhAZv4tM09qTKT9L86MdV7DVftt7Uw9ZypjzhzD1HOm0n5be6NDkiRJkqSyhn0iDVwAHFJaEBFjgW8CbwF2Bo6PiJ0HP7SBUylpHo7JdPtt7bTNb2Npx1KSZGnHUtrmt5lMS5IkSRqShn0inZnXA090K94TuLfYA/0C8H3gyEEPTlWZtWAWK1au6FK2YuUKZi2Y1aCIJEmSJKmyYZ9IV7A1cH/J/nJg64jYJCL+G3h1RHy80skR0RYRiyJi0aOPPjrQsY56yzqW1VQuSZIkSY00rtEBDJBy45szMx8HPtDbyZk5D5gH0Nramv0cm7ppaW5hacfSsuWSJEmSNNSM1B7p5cC2JfvbAA82KBb1Yu70uTSNb+pS1jS+ibnT5zYoIkmSJEmqbKQm0guBHSJiu4iYALwDuLyWBiJiRkTM6+joGJAA65Wzy3eUVyofymbuOpN5M+YxpXkKQTCleQrzZsxj5q4zGx2aJEmSJK0jModf4lUqIi4B9gc2BR4GZmfmdyLiUOAcYCxwfmb2qXuztbU1Fy1a1E/RSpIkSZKGkohYnJmttZwz7OdIZ+bxFcqvAK7oa7sRMQOYMW3atL42IUmSJEkagUbq0O66Zeb8zGxrbm5udCiSJEmSpCHERFqSJEmSpBqYSEuSJEmSVAMT6QqG+qrdkiRJkqTGMJGuwDnSkiRJkqRyTKQlSZIkSaqBiXQFDu2WJEmSJJVjIl2BQ7slSZIkSeWYSEuSJEmSVAMTaUmSJEmSamAiXYFzpCVJkiRJ5ZhIV+AcaUmSJElSOSbSkiRJkiTVwERakiRJkqQaRGY2OoYhLSIeBZYWd5uBaidNV1u3mnq91dkUeKzKuIa6Wr7GQ/269bbZ1/O9Twee92n95w/F+3Qk3aPQmPt0oK45mu5Tf5YO3+s24j6t9Rzv09qNpPu0P9ocqffplMzcrLrwijLTV5UvYF5/162mXm91gEWN/to04ms81K9bb5t9Pd/7dHjeL426rvdpl2Mj5h7tj+/tULrmaLpP/Vk6fK/biPu01nO8T4fO/dKI6/ZHm96na18O7a7N/AGoW029Wq473DXqsw7Edetts6/ne58OPO/T+s/3Ph14jfisA3XN0XSfeo8O3+s24j6t9Rzv09qNpPu0P9r0Pi1yaPcIEBGLMrO10XFIPfE+1VDnParhwPtUw4H3qYaDeu9Te6RHhnmNDkCqgvephjrvUQ0H3qcaDrxPNRzUdZ/aIy1JkiRJUg3skZYkSZIkqQYm0pIkSZIk1cBEWpIkSZKkGphIj2AR8YqI+O+IuDQiTm10PFI5EXFURHw7Ii6LiDc1Oh6pnIh4WUR8JyIubXQsUqmIWD8iLiz+HJ3Z6HikcvwZquGg1t9JTaSHqIg4PyIeiYjbu5UfEhF/joh7I+JjPbWRmXdl5geA4wAfQaB+10/36U8z82TgRODtAxiuRql+uk//lpknDWykUkGN9+zRwKXFn6NHDHqwGrVquU/9GapGqfE+rel3UhPpoesC4JDSgogYC3wTeAuwM3B8ROwcEbtGxM+6vTYvnnME8BtgweCGr1HiAvrhPi36ZPE8qb9dQP/dp9JguIAq71lgG+D+YrVVgxijdAHV36dSo1xA7fdpVb+Tjuu/GNWfMvP6iJjarXhP4N7M/BtARHwfODIzzwYOr9DO5cDlEfFz4HsDGLJGof64TyMigM8Dv8jMPw5wyBqF+uvnqTRYarlngeUUkulbsINEg6jG+/TOQQ5PAmq7TyPiLmr4ndQfuMPL1qz9qzMU/vPculLliNg/Ir4WEd8Crhjo4KSimu5T4EPAQcCxEfGBgQxMKlHrz9NNIuK/gVdHxMcHOjipjEr37I+BYyLiPGB+IwKTSpS9T/0ZqiGm0s/Tmn4ntUd6eIkyZVmpcmZeC1w7UMFIFdR6n34N+NrAhSOVVet9+jjgH3rUSGXv2cz8J/DewQ5GqqDSferPUA0lle7Tmn4ntUd6eFkObFuyvw3wYINikSrxPtVw4H2q4cZ7VsOB96mGg365T02kh5eFwA4RsV1ETADeAVze4Jik7rxPNRx4n2q48Z7VcOB9quGgX+5TE+khKiIuAW4CdoyI5RFxUma+CHwQuBK4C/i/zLyjkXFqdPM+1XDgfarhxntWw4H3qYaDgbxPI7PilDBJkiRJktSNPdKSJEmSJNXARFqSJEmSpBqYSEuSJEmSVAMTaUmSJEmSamAiLUmSJElSDUykJUmSJEmqgYm0JGnYiIhrIyKLrzmNjkeDKyK+WvL9P7jR8QymiLim+LlXRMTURscjSaOdibQkqd9ExNSSRKe/X1Mb/fnUOBGxG/Avxd2rM/OqRsbTAP8OJLAe8JUGxyJJo56JtCRJGg6+BIwtbn+qkYE0QmYuBOYXd4+KiP0aGY8kjXbjGh2AJGlEeRa4sop6+wGTittPAn+osm2NQhGxP3BQcfeazPxd46JpqLOBI4rbc4F9GxiLJI1qkZmNjkGSNMpExBJgSnH3uszcv3HRaKiLiF8DBxR3j8zMyxsZTyNFxO+A1xV3p2fmrxsZjySNVg7tliRJQ1ZEvJq1SfQDwM8bGM5Q8O2S7X9tWBSSNMqZSEuSpKHstJLt9sxc1bBIhob/A54rbh/qInyS1Bgm0pKkYaOvj7+KiDdGxDkRcXNEPBwRL0TEIxGxMCI+HxE71XP9iHhzRFwSEfcUH0/0j2LbH42I9cq0MzEi2iLi6oh4NCJWFuP6RUQc29dYouCwiPhhRNxbjOWxiPhDRHwiIjat7ivW5TobRsQHI+KKiFhabPPp4mf9XkS8IyLG9t5S7SJiEvC2kqIfVnHOiSVflyUl5dtFxGeL98BjEfF8RPwtIr4dETtWaOv1EXFhRPw1Ip4rfu5bIuLMiNiwhs+xXUTMKX7PHiq2tTIinoqIuyJifkR8OiJae2srM//B2nUIAnhXtXFIkvqPc6QlSYOur3OkI+JaCguVAZyZmXN6qT8N+G9gei9NrwK+CfxbZr5Y7fUpPIbof4Cekt9bgQMz8/FiG7sAlwJlk7ei/wNm1hjLV4H/BQ7vod3HgJOqnWMcEe8Cvgz0loDfCbwvM39fTbvViogjgZ8Wdx/JzC2qOOdE4LvF3aWZOTUi3g98jcKjo8p5ATgmM39WbGMChfvmvT1c6gHgoMy8u5d4PgV8EpjQW+xFh2XmFb202QZ8q7h7e2buWmXbkqR+4qrdkqQRKSL2pvC4oE1Kip8H7gCeAjYCdqXwf+FY4MPADhFxRE8JbImxwI+BA4v7DwL3AuOBVwFNxfLdgF9ExOuAHYDrgI2Lx/5CISGbXKzX2bN7HLAM+H9VftyxwGXAG4r7TwB3URh5tlPxs0IhIf5RRByXmT/pqcGI+ASFlaFLPVKMeTywM/CSYvnOwK8j4ujMrGbV9modVrJ9bV8aKCbWnfOKnwVuB/4JbA9sWyyfAFwaEa8HbqbQ8925OvbjwJ8p/LFlF9Z+LbcGfhkRr8zMf1a49ieBs7oV3w8spTA8ewMKf1DaquR4NaMFrynZ3iUiWjJzWRXnSZL6iUO7JUkjTkRsA1zO2iT6IQq9i82ZuUdmTs/M11BILD8HrC7Wewswp8rLnEohib4TOCAzt87M/TJzH2Bz1vYYArwWOIFCT/TGFBL8HTJzx8w8sBjL9sBNJeecHhHbVRnLKRSS6CeBdwNbZOa+xVi2AE4Cni7WHQdcWPwalRURb6FrEr0cOBLYKjPfkJl7FT/jh4AVxTpNwPcjYlv6zwEl29U8Iq27TYHzKPwB5aPAJpm5Z2YekJktwFEUkmqAicBnKPzx4ggKn/mtwOaZ+frMfCOFr+WZJe1PocKCXxGxOV2fd30F8IrMbCl+DQ/OzL0z86XFdk8EbgB6HSqYmfdQ+GNJpwMr1ZUkDQwTaUnSSPRt1g5H/ivwmsy8IDOfL62UmR2ZOQs4uaT43yNi6yqusQmFXt99M/Pabu3+MzM/APympPh8Cj3g36PwCKd7u52zlEKyWprwVjv/dTMKva1vysyLSnvUM3NlZp5PoXd3ZbH4JcAXyjUUEeMoDGvu9BDwhsy8PDM7/+BAZj6Xmd+gkIx2LgA2mcJQ8LpFxGQKf1zodGsfmlmfQoL81sz8UmZ2eRZ5Zl4GfKSk6C0UepAfAV6fmT/t9plXFqcTXFJyTqXh329i7XDu+4oxlB0GnpmPZOaFxWT9l1V+ttKvx2urPEeS1E9MpCVJI0pE7A4cUtxNCnON/97TOcVE8+ri7ngKPbzV+EBmPtnD8fNKtidQGFJ+alZYoCQzH6UwP7rTvlXGAfBfmbmo0sHM/A2FecKdjomIcnOO3wq0lOx/JDOX9NDuVcC5pedHREul+jXYmcJiWp3urVSxFxdk5i96OH4x8I+S/QnAR3sZKv3Nku3tIuKlZeqU9sz/ITNf6D1UqGFV8tKvxy5VniNJ6icm0pKkkebEku0balgA639Ltg+qov7dmXl9L3V+123/+5n5dNma5c/ZuYo4oNAjfG6vteDrrB06PJ6184BLvbVkexlVrJQNfKmk3bEV2q1V92HtD/axnW/1dLA4SuGWkqKnge/30uYi1vbCQ/nvU2nv924DsLL58pLtqf3ctiSpFybSkqSRZr+S7asr1lpX6VDZPSIiKtYsuKmX41AYFl3rOaW95xtVrNXVHzPzkd4qFYeP31FS9Loy1fYu2f55pd7zMu3+qUIbfbVZyfY/uw/Lr9ILwOIq6pV+nxZn5sqKNVmTfJfOUS73fVpYsv0K4OJ+nj9eOhJi835sV5JUBVftliSNGMXkt3SY63HFlZirUfpopAnAhkBHD/W7J8nryMwV3fLxXs9h7eJdsHbl797cVmW9zrqdX6OXlx4o9ppOLSkqTY57cyuwe3F7Wg3nVbJ+yfazFWv17PEqV2Av/ZpX8z3qfs4636fM/G1E3AjsUyx6B4X78XfAr4EbgZsy86kqr9fT9SdFxNgahoVLkupkIi1JGkma6fp/2y70ff5oMz0n0lXNee2Hc6rxeB/rdu9J7b7/aA3tltattie9Wr2NDqhksL5HleI7lsIK7XsU98dQSKw7k+vVEfFHCvPiv5OZT6zbRNXX7HXkgCSp/zi0W5I0kqzfe5WqDaf/I2tJ/kqHSE/sdqz7fl/bnVTDeZWUPpt5vYq1hrDiInevo7Cy9+9YN9kdA7QC/wUsiYgP1NB86dfkudLVxSVJA284/ZIgSVJvnuq2/9bMjD6+ljQg/r56SQ11NyzZ7t7j/lQ/tdu9nb4o7eFuioj+SM4HXWauKj56bW8K877fCnyRwoJlpYn1S4DzIuLUKpveuGS71/nxkqT+ZSItSRoxMvOfwDMlRS+vVHeE6b7CdU9eVrL9cOmB4tevdO5t6XOce1Natz8Su/u67VfzbO8hLTMfLz6b+v9l5mspfKbZwHMl1c6OiGrmxm9Tsr2kH8OUJFXBRFqSNNLcWLL9poZFMbheGxG9/p8eEeOA15QUlVvRurRsnzLHK7W7Z0lRxedZ1+BOuvbY9scCZkNKZv49M88CPlRS3Ez51dS7K/161LLYnCSpH5hIS5JGml+UbB8QEX1dbGw42RLYv4p6h9J1IbDrytQpLTsoIrasot3DgE16abcmxdWs7y0p2q3eNoewH3Xbr+ZrXvr1WFixliRpQJhIS5JGmu+w9hm/Y4BvR0T3RbRGos8VH19VVkSMBz5bUnQfcE2Zqt8BOheuGg/8Z08XLX5tzy4pWgr8qpqAq3BtyXY1vbRDRhXPIS+1Qbf9HlfvjoiX0/UPIuW+j5KkAWQiLUkaUTLzH8AnSor2An4VEdtUOGWNiNgjIi6MiBMGLMCB8zoKfzSY0P1AcaGui4BdS4rnZuY6j0wqLrJ2YUnRuyPi0+USw4hYH/gB8IqS4s/04/OMryjZ3r/G5LTRzomIL0TEy3qqVBwWX/rHiucorPDdkwNKtu/IzGV9jFGS1Ec+R1qSNOJk5rci4tXAKcWiNwJ/jYgfAb+m0Gv6LIX5qNsAr6Ywn7pz0a7h1sP3E+AtFB6ztFdEfJvCvNmgMAT4FGCHkvq/yszv9NDe6cB+rF2Y7EzgsIi4APgzhZ7q1wBtwNSS837aS7u1uhJ4msKK4JtQ+GNBb0nmUNEMvAf4aEQsptC7fguFBd5WAJMpfG/eRdc/RJyTmT09vxwK3+tO/9c/4UqSamEiLUkaqU4F7gfOojACawJwfPE10txKIZk+n0JS9uUe6t4EHNtTY5n5dETsB/wSeGWxeE+6LijW3Y+Bfu3Jz8xnI+KHwEnFomMYPol0qT2Kr960A5/uqUJEbAC8ubibFEYaSJIGmUO7JUkjUhbMpTCcuZ2uj3Uq50ngUgrJ2vcGOLx+l5kXURjye0uFKs8AnwEOKA5/76295cBrgVl0faZzd38BZgLHZubztcRcpW+WbB/f0zzwIeZbwLep7tFUfwSOy8x3ZubKXuoeC3Q+U/vKzOz+mDBJ0iCIMtOjJEkacYpzh19H4bFBm1IYnvwM8ABwN3BXZq6u3MLQEhHXUhh+DXBmZs4pObYrsDvwUgpD2P8K/Dozn+3jtcZQSKpfCWwGvEjhWdELM/Puvn2Cmq5/DWtXJT8qMy8b6Gv2p4jYisIfdKZSWCRsHIV7bxnwx8xcWkNbNwJ7F3fflJlX9W+0kqRqmEhLkjQM9ZRIjzQRcQCFue0A12bmAT3VH6kiYk/g98Xd32Xm3j3VlyQNHId2S5KkIS0zrwGuLu7uHxF7NTKeBvp4yfashkUhSTKRliRJw8K/AZ2P1TqrkYE0QkTsARxZ3L08M3/dU31J0sAykZYkSUNeZt7K2oXHDo6INzUyngb4AoXHmT1H4fFkkqQG8vFXkiRpWMjMjwAfaXQcjZCZBzY6BknSWvZIS5IkSZJUA1ftliRJkiSpBvZIS5IkSZJUAxNpSZIkSZJqYCItSZIkSVINTKQlSZIkSaqBibQkSZIkSTUwkZYkSZIkqQb/H7iilcVYjuBIAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 1152x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"f=plt.figure(figsize=(16, 8))\n",
"ax=f.add_subplot(111)\n",
"\n",
"\n",
"for i in range(len(y_array)):\n",
" ax.scatter(x2,y_array[i], color=colors_spawn[i])\n",
"#ax.plot(x2,y, color=colors_spawn[0])\n",
"ax.set_ylabel(\"Tamaño (Bytes)\", fontsize=36)\n",
"ax.set_xlabel(\"Tiempo (ms)\", fontsize=36)\n",
"ax.axhline(7549560)\n",
"plt.legend(labels=aux_labels, loc='best', fontsize=20,ncol=2,framealpha=1)\n",
"plt.xscale(\"log\")\n",
"plt.yscale(\"log\")\n",
"f.savefig(\"Images/Regresion.png\", format=\"png\")"
] ]
}, },
{ {
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
%matplotlib inline %matplotlib inline
import pandas as pd import pandas as pd
from pandas import DataFrame, Series from pandas import DataFrame, Series
import numpy as np import numpy as np
import math import math
import seaborn as sns import seaborn as sns
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import matplotlib.patches as mpatches import matplotlib.patches as mpatches
import matplotlib.colors as colors import matplotlib.colors as colors
from matplotlib.legend_handler import HandlerLine2D, HandlerTuple from matplotlib.legend_handler import HandlerLine2D, HandlerTuple
from matplotlib.colors import LinearSegmentedColormap from matplotlib.colors import LinearSegmentedColormap
from scipy import stats from scipy import stats
import scikit_posthocs as sp import scikit_posthocs as sp
import sys import sys
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
matrixMalEX="data_GG.csv" matrixMalEX="data_GG.csv"
matrixMal="data_GM.csv" matrixMal="data_GM.csv"
matrixIt="data_L.csv" matrixIt="data_L.csv"
matrixIt_Total="data_L_Total.csv" matrixIt_Total="data_L_Total.csv"
n_qty=6 #CAMBIAR SEGUN LA CANTIDAD DE NODOS USADOS n_qty=6 #CAMBIAR SEGUN LA CANTIDAD DE NODOS USADOS
n_groups= 2 n_groups= 2
repet = 10 #CAMBIAR EL NUMERO SEGUN NUMERO DE EJECUCIONES POR CONFIG repet = 10 #CAMBIAR EL NUMERO SEGUN NUMERO DE EJECUCIONES POR CONFIG
time_constant = True # Cambiar segun el speedUp usado time_constant = True # Cambiar segun el speedUp usado
   
p_value = 0.05 p_value = 0.05
values = [2, 10, 20, 40] values = [2, 10, 20, 40]
# WORST BEST # WORST BEST
dist_names = ['null', 'BalancedFit', 'CompactFit'] dist_names = ['null', 'BalancedFit', 'CompactFit']
   
processes = [1,10,20,40,80,120] processes = [1,10,20,40,80,120]
   
labelsP = [['(2,2)', '(2,10)', '(2,20)', '(2,40)'],['(10,2)', '(10,10)', '(10,20)', '(10,40)'], labelsP = [['(2,2)', '(2,10)', '(2,20)', '(2,40)'],['(10,2)', '(10,10)', '(10,20)', '(10,40)'],
['(20,2)', '(20,10)', '(20,20)', '(20,40)'],['(40,2)', '(40,10)', '(40,20)', '(40,40)']] ['(20,2)', '(20,10)', '(20,20)', '(20,40)'],['(40,2)', '(40,10)', '(40,20)', '(40,40)']]
labelsP_J = ['(2,2)', '(2,10)', '(2,20)', '(2,40)','(10,2)', '(10,10)', '(10,20)', '(10,40)', labelsP_J = ['(2,2)', '(2,10)', '(2,20)', '(2,40)','(10,2)', '(10,10)', '(10,20)', '(10,40)',
'(20,2)', '(20,10)', '(20,20)', '(20,40)','(40,2)', '(40,10)', '(40,20)', '(40,40)'] '(20,2)', '(20,10)', '(20,20)', '(20,40)','(40,2)', '(40,10)', '(40,20)', '(40,40)']
positions = [321, 322, 323, 324, 325] positions = [321, 322, 323, 324, 325]
positions_small = [221, 222, 223, 224] positions_small = [221, 222, 223, 224]
   
labels = ['(1,10)', '(1,20)', '(1,40)','(1,80)','(1,120)', labels = ['(1,10)', '(1,20)', '(1,40)','(1,80)','(1,120)',
'(10,1)', '(10,20)', '(10,40)','(10,80)','(10,120)', '(10,1)', '(10,20)', '(10,40)','(10,80)','(10,120)',
'(20,1)', '(20,10)','(20,40)','(20,80)','(20,120)', '(20,1)', '(20,10)','(20,40)','(20,80)','(20,120)',
'(40,1)', '(40,10)', '(40,20)','(40,80)','(40,120)', '(40,1)', '(40,10)', '(40,20)','(40,80)','(40,120)',
'(80,1)', '(80,10)', '(80,20)', '(80,40)','(80,120)', '(80,1)', '(80,10)', '(80,20)', '(80,40)','(80,120)',
'(120,1)', '(120,10)', '(120,20)','(120,40)','(120,80)'] '(120,1)', '(120,10)', '(120,20)','(120,40)','(120,80)']
   
labelsExpand = ['(1,10)', '(1,20)', '(1,40)','(1,80)','(1,120)', labelsExpand = ['(1,10)', '(1,20)', '(1,40)','(1,80)','(1,120)',
'(10,20)', '(10,40)','(10,80)','(10,120)', '(10,20)', '(10,40)','(10,80)','(10,120)',
'(20,40)','(20,80)','(20,120)', '(20,40)','(20,80)','(20,120)',
'(40,80)','(40,120)', '(40,80)','(40,120)',
'(80,120)'] '(80,120)']
labelsShrink = ['(10,1)', labelsShrink = ['(10,1)',
'(20,1)', '(20,10)', '(20,1)', '(20,10)',
'(40,1)', '(40,10)', '(40,20)', '(40,1)', '(40,10)', '(40,20)',
'(80,1)', '(80,10)', '(80,20)', '(80,40)', '(80,1)', '(80,10)', '(80,20)', '(80,40)',
'(120,1)', '(120,10)', '(120,20)','(120,40)','(120,80)'] '(120,1)', '(120,10)', '(120,20)','(120,40)','(120,80)']
   
labelsExpandOrdered = ['(1,10)', '(1,20)', '(10,20)', labelsExpandOrdered = ['(1,10)', '(1,20)', '(10,20)',
'(1,40)','(10,40)','(20,40)', '(1,40)','(10,40)','(20,40)',
'(1,80)','(10,80)','(20,80)','(40,80)', '(1,80)','(10,80)','(20,80)','(40,80)',
'(1,120)', '(10,120)', '(20,120)','(40,120)','(80,120)'] '(1,120)', '(10,120)', '(20,120)','(40,120)','(80,120)']
labelsShrinkOrdered = ['(10,1)', '(20,1)', '(40,1)', '(80,1)', '(120,1)', labelsShrinkOrdered = ['(10,1)', '(20,1)', '(40,1)', '(80,1)', '(120,1)',
'(20,10)', '(40,10)', '(80,10)', '(120,10)', '(20,10)', '(40,10)', '(80,10)', '(120,10)',
'(40,20)', '(80,20)', '(120,20)', '(40,20)', '(80,20)', '(120,20)',
'(80,40)','(120,40)', '(80,40)','(120,40)',
'(120,80)'] '(120,80)']
   
labelsExpandIntra = ['(1,10)', '(1,20)','(10,20)'] labelsExpandIntra = ['(1,10)', '(1,20)','(10,20)']
labelsShrinkIntra = ['(10,1)', '(20,1)', '(20,10)'] labelsShrinkIntra = ['(10,1)', '(20,1)', '(20,10)']
labelsExpandInter = ['(1,40)','(1,80)', '(1,160)', labelsExpandInter = ['(1,40)','(1,80)', '(1,160)',
'(10,40)','(10,80)', '(10,160)', '(10,40)','(10,80)', '(10,160)',
'(20,40)','(20,80)', '(20,160)', '(20,40)','(20,80)', '(20,160)',
'(40,80)', '(40,160)', '(40,80)', '(40,160)',
'(80,160)'] '(80,160)']
labelsShrinkInter = ['(40,1)', '(40,10)', '(40,20)', labelsShrinkInter = ['(40,1)', '(40,10)', '(40,20)',
'(80,1)', '(80,10)', '(80,20)','(80,40)', '(80,1)', '(80,10)', '(80,20)','(80,40)',
'(160,1)', '(160,10)', '(160,20)','(160,40)', '(160,80)'] '(160,1)', '(160,10)', '(160,20)','(160,40)', '(160,80)']
   
#0 #1 #2 #3 #0 #1 #2 #3
labelsMethods = ['Baseline', 'Baseline single','Baseline - Asynchronous','Baseline single - Asynchronous', labelsMethods = ['Baseline', 'Baseline single','Baseline - Asynchronous','Baseline single - Asynchronous',
'Merge','Merge single','Merge - Asynchronous','Merge single - Asynchronous'] 'Merge','Merge single','Merge - Asynchronous','Merge single - Asynchronous']
#4 #5 #6 #7 #4 #5 #6 #7
colors_spawn = ['green','springgreen','blue','darkblue','red','darkred','darkgoldenrod','olive'] colors_spawn = ['green','springgreen','blue','darkblue','red','darkred','darkgoldenrod','olive']
linestyle_spawn = ['-', '--', '-.', ':'] linestyle_spawn = ['-', '--', '-.', ':']
markers_spawn = ['.','1','s','p', 'h','d','X','P'] markers_spawn = ['.','1','s','p', 'h','d','X','P']
   
OrMult_patch = mpatches.Patch(hatch='', facecolor='green', label='Baseline') OrMult_patch = mpatches.Patch(hatch='', facecolor='green', label='Baseline')
OrSing_patch = mpatches.Patch(hatch='', facecolor='springgreen', label='Baseline single') OrSing_patch = mpatches.Patch(hatch='', facecolor='springgreen', label='Baseline single')
OrPthMult_patch = mpatches.Patch(hatch='//', facecolor='blue', label='Baseline - Asyncrhonous') OrPthMult_patch = mpatches.Patch(hatch='//', facecolor='blue', label='Baseline - Asyncrhonous')
OrPthSing_patch = mpatches.Patch(hatch='\\', facecolor='darkblue', label='Baseline single - Asyncrhonous') OrPthSing_patch = mpatches.Patch(hatch='\\', facecolor='darkblue', label='Baseline single - Asyncrhonous')
MergeMult_patch = mpatches.Patch(hatch='||', facecolor='red', label='Merge') MergeMult_patch = mpatches.Patch(hatch='||', facecolor='red', label='Merge')
MergeSing_patch = mpatches.Patch(hatch='...', facecolor='darkred', label='Merge single') MergeSing_patch = mpatches.Patch(hatch='...', facecolor='darkred', label='Merge single')
MergePthMult_patch = mpatches.Patch(hatch='xx', facecolor='yellow', label='Merge - Asyncrhonous') MergePthMult_patch = mpatches.Patch(hatch='xx', facecolor='yellow', label='Merge - Asyncrhonous')
MergePthSing_patch = mpatches.Patch(hatch='++', facecolor='olive', label='Merge single - Asyncrhonous') MergePthSing_patch = mpatches.Patch(hatch='++', facecolor='olive', label='Merge single - Asyncrhonous')
   
handles_spawn = [OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch] handles_spawn = [OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch]
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
dfG = pd.read_csv( matrixMalEX ) dfG = pd.read_csv( matrixMalEX )
   
dfG = dfG.drop(columns=dfG.columns[0]) dfG = dfG.drop(columns=dfG.columns[0])
dfG['S'] = dfG['N'] dfG['S'] = dfG['N']
dfG['N'] = dfG['S'] + dfG['%Async'] dfG['N'] = dfG['S'] + dfG['%Async']
dfG['%Async'] = (dfG['%Async'] / dfG['N']) * 100 dfG['%Async'] = (dfG['%Async'] / dfG['N']) * 100
dfG['%Async'] = dfG['%Async'].fillna(0) dfG['%Async'] = dfG['%Async'].fillna(0)
   
if(n_qty == 1): if(n_qty == 1):
group = dfG.groupby(['%Async', 'Cst', 'Css', 'Groups'])['TE'] group = dfG.groupby(['%Async', 'Cst', 'Css', 'Groups'])['TE']
group2 = dfG.groupby(['%Async', 'Cst', 'Css', 'NP','NS'])['TE'] group2 = dfG.groupby(['%Async', 'Cst', 'Css', 'NP','NS'])['TE']
else: else:
group = dfG.groupby(['Dist', '%Async', 'Cst', 'Css', 'Groups'])['TE'] group = dfG.groupby(['Dist', '%Async', 'Cst', 'Css', 'Groups'])['TE']
group2 = dfG.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP','NS'])['TE'] group2 = dfG.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP','NS'])['TE']
   
grouped_aggG = group.agg(['median']) grouped_aggG = group.agg(['median'])
grouped_aggG.rename(columns={'median':'TE'}, inplace=True) grouped_aggG.rename(columns={'median':'TE'}, inplace=True)
   
grouped_aggG2 = group2.agg(['median']) grouped_aggG2 = group2.agg(['median'])
grouped_aggG2.rename(columns={'median':'TE'}, inplace=True) grouped_aggG2.rename(columns={'median':'TE'}, inplace=True)
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
dfM = pd.read_csv( matrixMal ) dfM = pd.read_csv( matrixMal )
dfM = dfM.drop(columns=dfM.columns[0]) dfM = dfM.drop(columns=dfM.columns[0])
   
dfM['S'] = dfM['N'] dfM['S'] = dfM['N']
dfM['N'] = dfM['S'] + dfM['%Async'] dfM['N'] = dfM['S'] + dfM['%Async']
dfM["TR"] = dfM["TC"] + dfM["TH"] + dfM["TS"] + dfM["TA"] dfM["TR"] = dfM["TC"] + dfM["TH"] + dfM["TS"] + dfM["TA"]
dfM['%Async'] = (dfM['%Async'] / dfM['N']) * 100 dfM['%Async'] = (dfM['%Async'] / dfM['N']) * 100
   
dfM['%Async'] = dfM['%Async'].fillna(0) dfM['%Async'] = dfM['%Async'].fillna(0)
dfM['alpha'] = 1 dfM['alpha'] = 1
   
#dfM = dfM.drop(dfM.loc[(dfM["Cst"] == 3) & (dfM["Css"] == 1) & (dfM["NP"] > dfM["NS"])].index) #dfM = dfM.drop(dfM.loc[(dfM["Cst"] == 3) & (dfM["Css"] == 1) & (dfM["NP"] > dfM["NS"])].index)
#dfM = dfM.drop(dfM.loc[(dfM["Cst"] == 2) & (dfM["Css"] == 1) & (dfM["NP"] > dfM["NS"])].index) #dfM = dfM.drop(dfM.loc[(dfM["Cst"] == 2) & (dfM["Css"] == 1) & (dfM["NP"] > dfM["NS"])].index)
   
if(n_qty == 1): if(n_qty == 1):
groupM = dfM.groupby(['%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha'] groupM = dfM.groupby(['%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha']
else: else:
groupM = dfM.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha'] groupM = dfM.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha']
   
#group #group
grouped_aggM = groupM.agg(['median']) grouped_aggM = groupM.agg(['median'])
grouped_aggM.columns = grouped_aggM.columns.get_level_values(0) grouped_aggM.columns = grouped_aggM.columns.get_level_values(0)
   
for cst_aux in [1,3]: for cst_aux in [1,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
for np_aux in processes: for np_aux in processes:
for ns_aux in processes: for ns_aux in processes:
if np_aux != ns_aux: if np_aux != ns_aux:
grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux)]['alpha'] = \ grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux)]['alpha'] = \
grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux)]['TC'] / \ grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux)]['TC'] / \
grouped_aggM.loc[('2,2',0, cst_aux-1, css_aux, np_aux,ns_aux)]['TC'] grouped_aggM.loc[('2,2',0, cst_aux-1, css_aux, np_aux,ns_aux)]['TC']
   
``` ```
   
%%%% Output: stream %%%% Output: stream
   
/tmp/ipykernel_9826/2056908859.py:18: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. /tmp/ipykernel_3823/2056908859.py:18: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
groupM = dfM.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha'] groupM = dfM.groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['TC', 'TH', 'TS', 'TA', 'TR', 'alpha']
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
dfL = pd.read_csv( matrixIt ) dfL = pd.read_csv( matrixIt )
dfL = dfL.drop(columns=dfL.columns[0]) dfL = dfL.drop(columns=dfL.columns[0])
   
dfL['%Async'] = dfL['%Async'].fillna(0) dfL['%Async'] = dfL['%Async'].fillna(0)
dfL['omega'] = 1 dfL['omega'] = 1
   
#dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 3) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index) #dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 3) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index)
#dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 2) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index) #dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 2) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index)
   
if(n_qty == 1): if(n_qty == 1):
groupL = dfL[dfL['NS'] != 0].groupby(['Tt', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega'] groupL = dfL[dfL['NS'] != 0].groupby(['Tt', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega']
else: else:
groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega'] groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega']
   
#group #group
grouped_aggL = groupL.agg(['median', 'count']) grouped_aggL = groupL.agg(['median', 'count'])
grouped_aggL.columns = grouped_aggL.columns.get_level_values(0) grouped_aggL.columns = grouped_aggL.columns.get_level_values(0)
grouped_aggL.set_axis(['Ti', 'Iters', 'To', 'Iters2', 'omega', 'omega2'], axis='columns', inplace=True) grouped_aggL.set_axis(['Ti', 'Iters', 'To', 'Iters2', 'omega', 'omega2'], axis='columns', inplace=True)
grouped_aggL['Iters'] = np.round(grouped_aggL['Iters']/repet) grouped_aggL['Iters'] = np.round(grouped_aggL['Iters']/repet)
grouped_aggL['Iters2'] = np.round(grouped_aggL['Iters2']/repet) grouped_aggL['Iters2'] = np.round(grouped_aggL['Iters2']/repet)
   
for cst_aux in [1,3]: for cst_aux in [1,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
for np_aux in processes: for np_aux in processes:
for ns_aux in processes: for ns_aux in processes:
if np_aux != ns_aux: if np_aux != ns_aux:
grouped_aggL.loc[(1,2,0, cst_aux, css_aux, np_aux,ns_aux), 'omega'] = \ grouped_aggL.loc[(1,2,0, cst_aux, css_aux, np_aux,ns_aux), 'omega'] = \
grouped_aggL.loc[(1,2,0, cst_aux, css_aux, np_aux,ns_aux)]['Ti'] / \ grouped_aggL.loc[(1,2,0, cst_aux, css_aux, np_aux,ns_aux)]['Ti'] / \
grouped_aggL.loc[(0,2,0, cst_aux, css_aux, np_aux,ns_aux)]['Ti'] grouped_aggL.loc[(0,2,0, cst_aux, css_aux, np_aux,ns_aux)]['Ti']
``` ```
   
%%%% Output: stream %%%% Output: stream
   
/tmp/ipykernel_9826/1294489315.py:13: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. /tmp/ipykernel_3823/1294489315.py:13: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega'] groupL = dfL[dfL['NS'] != 0].groupby(['Tt', 'Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Ti', 'To', 'omega']
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
dfLT = pd.read_csv( matrixIt_Total ) dfLT = pd.read_csv( matrixIt_Total )
dfLT = dfLT.drop(columns=dfLT.columns[0]) dfLT = dfLT.drop(columns=dfLT.columns[0])
   
dfLT['%Async'] = dfLT['%Async'].fillna(0) dfLT['%Async'] = dfLT['%Async'].fillna(0)
dfLT['ItA']= dfLT.Ti.apply(lambda x: list(x.replace('(','').replace(')','').split(','))) dfLT['ItA']= dfLT.Ti.apply(lambda x: list(x.replace('(','').replace(')','').split(',')))
dfLT['TiA']= dfLT.ItA.apply(lambda x: np.median(list(map(float,[y for y in x if y]))) ) dfLT['TiA']= dfLT.ItA.apply(lambda x: np.median(list(map(float,[y for y in x if y]))) )
dfLT['TiA']= dfLT['TiA'].fillna(0) dfLT['TiA']= dfLT['TiA'].fillna(0)
dfLT['ItA']= dfLT.ItA.apply(lambda x: len([y for y in x if y])) dfLT['ItA']= dfLT.ItA.apply(lambda x: len([y for y in x if y]))
   
   
#dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 3) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index) #dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 3) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index)
#dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 2) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index) #dfL = dfL.drop(dfL.loc[(dfL["Cst"] == 2) & (dfL["Css"] == 1) & (dfL["NP"] > dfL["NS"])].index)
   
if(n_qty == 1): if(n_qty == 1):
groupLT = dfLT[dfLT['NS'] != 0].groupby(['%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA'] groupLT = dfLT[dfLT['NS'] != 0].groupby(['%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA']
else: else:
groupLT = dfLT[dfLT['NS'] != 0].groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA'] groupLT = dfLT[dfLT['NS'] != 0].groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA']
   
#group #group
grouped_aggLT = groupLT.agg(['median']) grouped_aggLT = groupLT.agg(['median'])
grouped_aggLT.columns = grouped_aggLT.columns.get_level_values(0) grouped_aggLT.columns = grouped_aggLT.columns.get_level_values(0)
grouped_aggLT.set_axis(['Sum','ItA'], axis='columns', inplace=True) grouped_aggLT.set_axis(['Sum','ItA'], axis='columns', inplace=True)
``` ```
   
%%%% Output: stream %%%% Output: stream
   
/home/usuario/miniconda3/lib/python3.9/site-packages/numpy/core/fromnumeric.py:3419: RuntimeWarning: Mean of empty slice. /home/usuario/miniconda3/lib/python3.9/site-packages/numpy/core/fromnumeric.py:3419: RuntimeWarning: Mean of empty slice.
return _methods._mean(a, axis=axis, dtype=dtype, return _methods._mean(a, axis=axis, dtype=dtype,
/tmp/ipykernel_9826/3028104048.py:17: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. /tmp/ipykernel_3823/3028104048.py:17: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
groupLT = dfLT[dfLT['NS'] != 0].groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA'] groupLT = dfLT[dfLT['NS'] != 0].groupby(['Dist', '%Async', 'Cst', 'Css', 'NP', 'NS'])['Sum', 'ItA']
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
tc_list = [] tc_list = []
alpha_list = [] alpha_list = []
omega_list = [] omega_list = []
ita_list = [] ita_list = []
dfLT['index'] = dfLT.index dfLT['index'] = dfLT.index
dfM['index'] = dfM.index dfM['index'] = dfM.index
for cst_aux in [0,1,2,3]: for cst_aux in [0,1,2,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
for np_aux in processes: for np_aux in processes:
for ns_aux in processes: for ns_aux in processes:
if np_aux != ns_aux: if np_aux != ns_aux:
dfLT_aux = dfLT[dfLT["NP"] == np_aux][dfLT["NS"] == ns_aux][dfLT["Cst"] == cst_aux][dfLT["Css"] == css_aux] dfLT_aux = dfLT[dfLT["NP"] == np_aux][dfLT["NS"] == ns_aux][dfLT["Cst"] == cst_aux][dfLT["Css"] == css_aux]
dfM_aux = dfM[dfM["NP"] == np_aux][dfM["NS"] == ns_aux][dfM["Css"] == css_aux] dfM_aux = dfM[dfM["NP"] == np_aux][dfM["NS"] == ns_aux][dfM["Css"] == css_aux]
if cst_aux == 1 or cst_aux == 3: if cst_aux == 1 or cst_aux == 3:
dfM_aux2= dfM_aux[dfM_aux["Cst"] == cst_aux-1] dfM_aux2= dfM_aux[dfM_aux["Cst"] == cst_aux-1]
dfM_aux2= dfM_aux2.sort_values(by=['TH']) dfM_aux2= dfM_aux2.sort_values(by=['TH'])
dfM_aux = dfM_aux[dfM_aux["Cst"] == cst_aux] dfM_aux = dfM_aux[dfM_aux["Cst"] == cst_aux]
dfM_aux= dfM_aux.sort_values(by=['TH']) dfM_aux= dfM_aux.sort_values(by=['TH'])
index1_aux = dfM_aux.iloc[4]["index"] index1_aux = dfM_aux.iloc[4]["index"]
index2_aux = dfM_aux.iloc[5]["index"] index2_aux = dfM_aux.iloc[5]["index"]
   
# Comprobar que es un metodo asincrono # Comprobar que es un metodo asincrono
if cst_aux == 1 or cst_aux == 3: if cst_aux == 1 or cst_aux == 3:
value_aux1 = dfM_aux[dfM_aux["index"] == index1_aux]['TC'].values value_aux1 = dfM_aux[dfM_aux["index"] == index1_aux]['TC'].values
value_aux2 = dfM_aux[dfM_aux["index"] == index2_aux]['TC'].values value_aux2 = dfM_aux[dfM_aux["index"] == index2_aux]['TC'].values
valueS_aux1 = dfM_aux2.iloc[4]['TC'] valueS_aux1 = dfM_aux2.iloc[4]['TC']
valueS_aux2 = dfM_aux2.iloc[5]['TC'] valueS_aux2 = dfM_aux2.iloc[5]['TC']
value1_aux = (value_aux1 + value_aux2) / 2 value1_aux = (value_aux1 + value_aux2) / 2
value2_aux = (value_aux1/valueS_aux1 + value_aux2/valueS_aux2) / 2 value2_aux = (value_aux1/valueS_aux1 + value_aux2/valueS_aux2) / 2
else: else:
value1_aux = dfM_aux['TC'].median() value1_aux = dfM_aux['TC'].median()
value2_aux = 1 value2_aux = 1
tc_list.append(float(value1_aux)) tc_list.append(float(value1_aux))
alpha_list.append(float(value2_aux)) alpha_list.append(float(value2_aux))
   
value_aux1 = dfLT_aux[dfLT_aux["index"] == index1_aux]['ItA'].values value_aux1 = dfLT_aux[dfLT_aux["index"] == index1_aux]['ItA'].values
value_aux2 = dfLT_aux[dfLT_aux["index"] == index2_aux]['ItA'].values value_aux2 = dfLT_aux[dfLT_aux["index"] == index2_aux]['ItA'].values
value3_aux = (value_aux1 + value_aux2) / 2 value3_aux = (value_aux1 + value_aux2) / 2
ita_list.append(int(value3_aux)) ita_list.append(int(value3_aux))
   
if cst_aux == 1 or cst_aux == 3: if cst_aux == 1 or cst_aux == 3:
iter_time_aux1 = dfLT_aux[dfLT_aux["index"] == index1_aux]['Time'].values iter_time_aux1 = dfLT_aux[dfLT_aux["index"] == index1_aux]['Time'].values
iter_time_aux2 = dfLT_aux[dfLT_aux["index"] == index2_aux]['Time'].values iter_time_aux2 = dfLT_aux[dfLT_aux["index"] == index2_aux]['Time'].values
if not time_constant: if not time_constant:
iter_time_aux1 = iter_time_aux1 / np_aux iter_time_aux1 = iter_time_aux1 / np_aux
iter_time_aux2 = iter_time_aux2 / np_aux iter_time_aux2 = iter_time_aux2 / np_aux
iter_Atime_aux1 = dfLT_aux[dfLT_aux["index"] == index1_aux]['TiA'].values iter_Atime_aux1 = dfLT_aux[dfLT_aux["index"] == index1_aux]['TiA'].values
iter_Atime_aux2 = dfLT_aux[dfLT_aux["index"] == index2_aux]['TiA'].values iter_Atime_aux2 = dfLT_aux[dfLT_aux["index"] == index2_aux]['TiA'].values
value4_aux = (iter_Atime_aux1/iter_time_aux1 + iter_Atime_aux1/iter_time_aux2) / 2 value4_aux = (iter_Atime_aux1/iter_time_aux1 + iter_Atime_aux1/iter_time_aux2) / 2
else: else:
value4_aux = 1 value4_aux = 1
omega_list.append(float(value4_aux)) omega_list.append(float(value4_aux))
grouped_aggM['TC_A'] = tc_list grouped_aggM['TC_A'] = tc_list
grouped_aggM['ItA'] = ita_list grouped_aggM['ItA'] = ita_list
grouped_aggM['Alpha_A'] = alpha_list grouped_aggM['Alpha_A'] = alpha_list
grouped_aggM['Omega_A'] = omega_list grouped_aggM['Omega_A'] = omega_list
``` ```
   
%%%% Output: stream %%%% Output: stream
   
/tmp/ipykernel_9826/2150887515.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index. /tmp/ipykernel_3823/2150887515.py:12: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
dfLT_aux = dfLT[dfLT["NP"] == np_aux][dfLT["NS"] == ns_aux][dfLT["Cst"] == cst_aux][dfLT["Css"] == css_aux] dfLT_aux = dfLT[dfLT["NP"] == np_aux][dfLT["NS"] == ns_aux][dfLT["Cst"] == cst_aux][dfLT["Css"] == css_aux]
/tmp/ipykernel_9826/2150887515.py:13: UserWarning: Boolean Series key will be reindexed to match DataFrame index. /tmp/ipykernel_3823/2150887515.py:13: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
dfM_aux = dfM[dfM["NP"] == np_aux][dfM["NS"] == ns_aux][dfM["Css"] == css_aux] dfM_aux = dfM[dfM["NP"] == np_aux][dfM["NS"] == ns_aux][dfM["Css"] == css_aux]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
coherent_check_df = grouped_aggL.copy() coherent_check_df = grouped_aggL.copy()
# Añadir suma total de iteraciones # Añadir suma total de iteraciones
coherent_check_df['Sum'] = 0 coherent_check_df['Sum'] = 0
coherent_check_df.loc[(1,slice(None)),'Sum'] = grouped_aggLT[(grouped_aggLT['Sum'] != 0)].loc[(slice(None)),'Sum'].values coherent_check_df.loc[(1,slice(None)),'Sum'] = grouped_aggLT[(grouped_aggLT['Sum'] != 0)].loc[(slice(None)),'Sum'].values
coherent_check_df = coherent_check_df[(coherent_check_df['Sum'] != 0)] coherent_check_df = coherent_check_df[(coherent_check_df['Sum'] != 0)]
# Añadir tiempos TE y TC # Añadir tiempos TE y TC
coherent_check_df['TE'] = 0 coherent_check_df['TE'] = 0
coherent_check_df['TEA'] = 0 coherent_check_df['TEA'] = 0
coherent_check_df['TR'] = 0 coherent_check_df['TR'] = 0
coherent_check_df['TRA'] = 0 coherent_check_df['TRA'] = 0
for cst_aux in [1,3]: for cst_aux in [1,3]:
coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TE'] = grouped_aggG2.loc[('2,2',0,cst_aux-1,slice(None)),'TE'].values coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TE'] = grouped_aggG2.loc[('2,2',0,cst_aux-1,slice(None)),'TE'].values
coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TR'] = grouped_aggM.loc[('2,2',0,cst_aux-1,slice(None)),'TC'].values coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TR'] = grouped_aggM.loc[('2,2',0,cst_aux-1,slice(None)),'TC'].values
coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TEA'] = grouped_aggG2.loc[('2,2',0,cst_aux,slice(None)),'TE'].values coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TEA'] = grouped_aggG2.loc[('2,2',0,cst_aux,slice(None)),'TE'].values
coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TRA'] = grouped_aggM.loc[('2,2',0,cst_aux,slice(None)),'TC'].values coherent_check_df.loc[(1,2,0,cst_aux,slice(None)),'TRA'] = grouped_aggM.loc[('2,2',0,cst_aux,slice(None)),'TC'].values
# Calcular tiempos teoricos # Calcular tiempos teoricos
#coherent_check_df['Teorico-S'] = coherent_check_df['Ti'] * 3 + coherent_check_df['TR'] + TIEMPOITERNS * 97 #coherent_check_df['Teorico-S'] = coherent_check_df['Ti'] * 3 + coherent_check_df['TR'] + TIEMPOITERNS * 97
#coherent_check_df['Rel-S'] = np.round(coherent_check_df['Teorico-S'] / coherent_check_df['TE'],2) #coherent_check_df['Rel-S'] = np.round(coherent_check_df['Teorico-S'] / coherent_check_df['TE'],2)
#coherent_check_df['Teorico-A'] = coherent_check_df['Ti'] * 3 + coherent_check_df['Sum'] + TIEMPOITERNS * (97 - coherent_check_df['Iters']) #coherent_check_df['Teorico-A'] = coherent_check_df['Ti'] * 3 + coherent_check_df['Sum'] + TIEMPOITERNS * (97 - coherent_check_df['Iters'])
#coherent_check_df['Rel-A'] = np.round(coherent_check_df['Teorico-A'] / coherent_check_df['TEA'],2) #coherent_check_df['Rel-A'] = np.round(coherent_check_df['Teorico-A'] / coherent_check_df['TEA'],2)
coherent_check_df=coherent_check_df.droplevel('Tt').droplevel('%Async').droplevel('Dist') coherent_check_df=coherent_check_df.droplevel('Tt').droplevel('%Async').droplevel('Dist')
for cst_aux in [1,3]: for cst_aux in [1,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
aux_df = coherent_check_df.loc[(cst_aux, css_aux, slice(None))] aux_df = coherent_check_df.loc[(cst_aux, css_aux, slice(None))]
aux_df.to_excel("coherent"+str(cst_aux)+"_"+str(css_aux)+".xlsx") aux_df.to_excel("coherent"+str(cst_aux)+"_"+str(css_aux)+".xlsx")
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
grouped_aggL.to_excel("resultL.xlsx") grouped_aggL.to_excel("resultL.xlsx")
grouped_aggLT.to_excel("resultLT.xlsx") grouped_aggLT.to_excel("resultLT.xlsx")
dfLT.to_excel("resultLT_all.xlsx") dfLT.to_excel("resultLT_all.xlsx")
grouped_aggM.to_excel("resultM.xlsx") grouped_aggM.to_excel("resultM.xlsx")
grouped_aggG2.to_excel("resultG.xlsx") grouped_aggG2.to_excel("resultG.xlsx")
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
dfG dfG
dfM dfM
dfL dfL
dfLT dfLT
grouped_aggG grouped_aggG
grouped_aggM grouped_aggM
grouped_aggL grouped_aggL
grouped_aggLT grouped_aggLT
``` ```
   
%%%% Output: execute_result %%%% Output: execute_result
   
Sum ItA Sum ItA
Dist %Async Cst Css NP NS Dist %Async Cst Css NP NS
2 0.0 0 0 1 10 0.000000 0.0 2 0.0 0 0 1 10 0.000000 0.0
20 0.000000 0.0 20 0.000000 0.0
40 0.000000 0.0 40 0.000000 0.0
80 0.000000 0.0 80 0.000000 0.0
120 0.000000 0.0 120 0.000000 0.0
... ... ... ... ... ...
3 1 120 1 0.603147 2.0 3 1 120 1 0.603147 2.0
10 0.576215 2.0 10 0.576215 2.0
20 0.584821 2.0 20 0.584821 2.0
40 0.611443 2.0 40 0.611443 2.0
80 0.604689 2.0 80 0.604689 2.0
[240 rows x 2 columns] [240 rows x 2 columns]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
grouped_aggG.loc[('2,2',0,2,1)] dfL
``` ```
   
%%%% Output: execute_result %%%% Output: execute_result
   
TE N %Async NP N_par NS Dist Compute_tam Comm_tam Cst Css Time \
Groups 0 0 0.0 40 0 10 2 100000 0 3 0 0.2
1,10 6.369967 1 0 0.0 40 0 10 2 100000 0 3 0 0.2
1,120 7.105817 2 0 0.0 40 0 10 2 100000 0 3 0 0.2
1,20 6.795948 3 0 0.0 40 0 10 2 100000 0 3 0 0.2
1,40 6.937367 4 0 0.0 40 0 10 2 100000 0 3 0 0.2
1,80 6.966290 ... .. ... ... ... .. ... ... ... ... ... ...
10,1 6.056520 71995 0 0.0 120 0 10 2 100000 0 3 0 0.2
10,120 6.979421 71996 0 0.0 120 0 10 2 100000 0 3 0 0.2
10,20 6.574471 71997 0 0.0 120 0 10 2 100000 0 3 0 0.2
10,40 6.838011 71998 0 0.0 120 0 10 2 100000 0 3 0 0.2
10,80 6.981027 71999 0 0.0 120 0 10 2 100000 0 3 0 0.2
120,1 6.348445
120,10 6.292254 Iters Ti Tt To omega
120,20 6.327157 0 3 0.199854 0.0 224.0 1
120,40 6.321162 1 3 0.226667 0.0 224.0 1
120,80 6.423317 2 3 0.212055 0.0 224.0 1
20,1 6.072897 3 3 0.374593 1.0 224.0 1
20,10 6.073298 4 3 0.200724 1.0 224.0 1
20,120 7.171862 ... ... ... ... ... ...
20,40 6.991988 71995 3 0.210870 1.0 224.0 1
20,80 7.069774 71996 3 0.200096 0.0 224.0 1
40,1 6.090644 71997 3 0.202437 0.0 224.0 1
40,10 5.739764 71998 3 0.200116 0.0 224.0 1
40,120 7.113592 71999 3 0.324975 1.0 224.0 1
40,20 6.218595
40,80 6.992810 [72000 rows x 16 columns]
80,1 6.305216
80,10 6.259644
80,120 7.032920
80,20 6.302444
80,40 6.434365
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
grouped_aggM.loc[('2,2',0,2,0)] grouped_aggM.loc[('2,2',0,2,0)]
``` ```
   
%%%% Output: execute_result %%%% Output: execute_result
   
TC TH TS TA TR alpha TC_A ItA Alpha_A \ TC TH TS TA TR alpha TC_A ItA Alpha_A \
NP NS NP NS
1 10 0.283736 0.0 0.0 0.0 0.283736 1.0 0.283736 0 1.0 1 10 0.283736 0.0 0.0 0.0 0.283736 1.0 0.283736 0 1.0
20 0.716209 0.0 0.0 0.0 0.716209 1.0 0.716209 0 1.0 20 0.716209 0.0 0.0 0.0 0.716209 1.0 0.716209 0 1.0
40 0.798951 0.0 0.0 0.0 0.798951 1.0 0.798951 0 1.0 40 0.798951 0.0 0.0 0.0 0.798951 1.0 0.798951 0 1.0
80 0.931771 0.0 0.0 0.0 0.931771 1.0 0.931771 0 1.0 80 0.931771 0.0 0.0 0.0 0.931771 1.0 0.931771 0 1.0
120 0.992033 0.0 0.0 0.0 0.992033 1.0 0.992033 0 1.0 120 0.992033 0.0 0.0 0.0 0.992033 1.0 0.992033 0 1.0
10 1 0.000982 0.0 0.0 0.0 0.000982 1.0 0.000982 0 1.0 10 1 0.000982 0.0 0.0 0.0 0.000982 1.0 0.000982 0 1.0
20 0.477040 0.0 0.0 0.0 0.477040 1.0 0.477040 0 1.0 20 0.477040 0.0 0.0 0.0 0.477040 1.0 0.477040 0 1.0
40 0.766185 0.0 0.0 0.0 0.766185 1.0 0.766185 0 1.0 40 0.766185 0.0 0.0 0.0 0.766185 1.0 0.766185 0 1.0
80 0.860920 0.0 0.0 0.0 0.860920 1.0 0.860920 0 1.0 80 0.860920 0.0 0.0 0.0 0.860920 1.0 0.860920 0 1.0
120 0.890894 0.0 0.0 0.0 0.890894 1.0 0.890894 0 1.0 120 0.890894 0.0 0.0 0.0 0.890894 1.0 0.890894 0 1.0
20 1 0.001005 0.0 0.0 0.0 0.001005 1.0 0.001005 0 1.0 20 1 0.001005 0.0 0.0 0.0 0.001005 1.0 0.001005 0 1.0
10 0.001025 0.0 0.0 0.0 0.001025 1.0 0.001025 0 1.0 10 0.001025 0.0 0.0 0.0 0.001025 1.0 0.001025 0 1.0
40 0.790193 0.0 0.0 0.0 0.790193 1.0 0.790193 0 1.0 40 0.790193 0.0 0.0 0.0 0.790193 1.0 0.790193 0 1.0
80 0.864170 0.0 0.0 0.0 0.864170 1.0 0.864170 0 1.0 80 0.864170 0.0 0.0 0.0 0.864170 1.0 0.864170 0 1.0
120 1.088929 0.0 0.0 0.0 1.088929 1.0 1.088929 0 1.0 120 1.088929 0.0 0.0 0.0 1.088929 1.0 1.088929 0 1.0
40 1 0.029802 0.0 0.0 0.0 0.029802 1.0 0.029802 0 1.0 40 1 0.029802 0.0 0.0 0.0 0.029802 1.0 0.029802 0 1.0
10 0.024519 0.0 0.0 0.0 0.024519 1.0 0.024519 0 1.0 10 0.024519 0.0 0.0 0.0 0.024519 1.0 0.024519 0 1.0
20 0.116366 0.0 0.0 0.0 0.116366 1.0 0.116366 0 1.0 20 0.116366 0.0 0.0 0.0 0.116366 1.0 0.116366 0 1.0
80 0.893692 0.0 0.0 0.0 0.893692 1.0 0.893692 0 1.0 80 0.893692 0.0 0.0 0.0 0.893692 1.0 0.893692 0 1.0
120 0.922904 0.0 0.0 0.0 0.922904 1.0 0.922904 0 1.0 120 0.922904 0.0 0.0 0.0 0.922904 1.0 0.922904 0 1.0
80 1 0.217198 0.0 0.0 0.0 0.217198 1.0 0.217198 0 1.0 80 1 0.217198 0.0 0.0 0.0 0.217198 1.0 0.217198 0 1.0
10 0.180846 0.0 0.0 0.0 0.180846 1.0 0.180846 0 1.0 10 0.180846 0.0 0.0 0.0 0.180846 1.0 0.180846 0 1.0
20 0.149038 0.0 0.0 0.0 0.149038 1.0 0.149038 0 1.0 20 0.149038 0.0 0.0 0.0 0.149038 1.0 0.149038 0 1.0
40 0.148336 0.0 0.0 0.0 0.148336 1.0 0.148336 0 1.0 40 0.148336 0.0 0.0 0.0 0.148336 1.0 0.148336 0 1.0
120 0.905912 0.0 0.0 0.0 0.905912 1.0 0.905912 0 1.0 120 0.905912 0.0 0.0 0.0 0.905912 1.0 0.905912 0 1.0
120 1 0.231024 0.0 0.0 0.0 0.231024 1.0 0.231024 0 1.0 120 1 0.231024 0.0 0.0 0.0 0.231024 1.0 0.231024 0 1.0
10 0.148412 0.0 0.0 0.0 0.148412 1.0 0.148412 0 1.0 10 0.148412 0.0 0.0 0.0 0.148412 1.0 0.148412 0 1.0
20 0.177781 0.0 0.0 0.0 0.177781 1.0 0.177781 0 1.0 20 0.177781 0.0 0.0 0.0 0.177781 1.0 0.177781 0 1.0
40 0.350567 0.0 0.0 0.0 0.350567 1.0 0.350567 0 1.0 40 0.350567 0.0 0.0 0.0 0.350567 1.0 0.350567 0 1.0
80 0.156000 0.0 0.0 0.0 0.156000 1.0 0.156000 0 1.0 80 0.156000 0.0 0.0 0.0 0.156000 1.0 0.156000 0 1.0
Omega_A Omega_A
NP NS NP NS
1 10 1.0 1 10 1.0
20 1.0 20 1.0
40 1.0 40 1.0
80 1.0 80 1.0
120 1.0 120 1.0
10 1 1.0 10 1 1.0
20 1.0 20 1.0
40 1.0 40 1.0
80 1.0 80 1.0
120 1.0 120 1.0
20 1 1.0 20 1 1.0
10 1.0 10 1.0
40 1.0 40 1.0
80 1.0 80 1.0
120 1.0 120 1.0
40 1 1.0 40 1 1.0
10 1.0 10 1.0
20 1.0 20 1.0
80 1.0 80 1.0
120 1.0 120 1.0
80 1 1.0 80 1 1.0
10 1.0 10 1.0
20 1.0 20 1.0
40 1.0 40 1.0
120 1.0 120 1.0
120 1 1.0 120 1 1.0
10 1.0 10 1.0
20 1.0 20 1.0
40 1.0 40 1.0
80 1.0 80 1.0
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
grouped_aggL grouped_aggL
``` ```
   
%%%% Output: execute_result %%%% Output: execute_result
   
Ti Iters To Iters2 alpha \ Ti Iters To Iters2 alpha \
Tt Dist %Async Cst Css NP NS Tt Dist %Async Cst Css NP NS
0.0 2 0.0 0 0 1 10 3.999165 3.0 4485.0 3.0 1.000000 0.0 2 0.0 0 0 1 10 3.999165 3.0 4485.0 3.0 1.000000
20 3.999194 3.0 4485.0 3.0 1.000000 20 3.999194 3.0 4485.0 3.0 1.000000
40 3.999186 3.0 4485.0 3.0 1.000000 40 3.999186 3.0 4485.0 3.0 1.000000
80 3.999236 3.0 4485.0 3.0 1.000000 80 3.999236 3.0 4485.0 3.0 1.000000
120 3.999194 3.0 4485.0 3.0 1.000000 120 3.999194 3.0 4485.0 3.0 1.000000
... ... ... ... ... ... ... ... ... ... ... ...
1.0 2 0.0 3 1 120 1 0.070046 3.0 37.0 3.0 2.108073 1.0 2 0.0 3 1 120 1 0.070046 3.0 37.0 3.0 2.108073
10 0.075896 4.0 37.0 4.0 2.292376 10 0.075896 4.0 37.0 4.0 2.292376
20 0.090617 5.0 37.0 5.0 2.733503 20 0.090617 5.0 37.0 5.0 2.733503
40 0.069103 4.0 37.0 4.0 2.089061 40 0.069103 4.0 37.0 4.0 2.089061
80 0.068959 4.0 37.0 4.0 2.083952 80 0.068959 4.0 37.0 4.0 2.083952
alpha2 alpha2
Tt Dist %Async Cst Css NP NS Tt Dist %Async Cst Css NP NS
0.0 2 0.0 0 0 1 10 30 0.0 2 0.0 0 0 1 10 30
20 30 20 30
40 30 40 30
80 30 80 30
120 30 120 30
... ... ... ...
1.0 2 0.0 3 1 120 1 30 1.0 2 0.0 3 1 120 1 30
10 40 10 40
20 54 20 54
40 37 40 37
80 39 80 39
[360 rows x 6 columns] [360 rows x 6 columns]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
auxIter = pd.DataFrame(dfM['Iters'].str.split(',',1).tolist(),columns = ['Iters0','Iters1']) auxIter = pd.DataFrame(dfM['Iters'].str.split(',',1).tolist(),columns = ['Iters0','Iters1'])
auxIter['Iters1'] = pd.to_numeric(auxIter['Iters1'], errors='coerce') auxIter['Iters1'] = pd.to_numeric(auxIter['Iters1'], errors='coerce')
iters = auxIter['Iters1'].mean() iters = auxIter['Iters1'].mean()
print(iters) print(iters)
``` ```
   
%%%% Output: stream %%%% Output: stream
   
97.0 97.0
   
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
   
A partir de aquí se muestran gráficos A partir de aquí se muestran gráficos
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
#Reserva de memoria para las estructuras #Reserva de memoria para las estructuras
TP_data=[0]*2 TP_data=[0]*2
TH_data=[0]*2 TH_data=[0]*2
TM_data=[0]*2 TM_data=[0]*2
   
TP_A_data=[0]*2 TP_A_data=[0]*2
TH_A_data=[0]*2 TH_A_data=[0]*2
TM_A_data=[0]*2 TM_A_data=[0]*2
   
for dist in [1,2]: for dist in [1,2]:
dist_index=dist-1 dist_index=dist-1
   
TP_data[dist_index]=[0]*len(values)*(len(values)) TP_data[dist_index]=[0]*len(values)*(len(values))
TH_data[dist_index]=[0]*len(values)*(len(values)) TH_data[dist_index]=[0]*len(values)*(len(values))
TM_data[dist_index]=[0]*len(values)*(len(values)) TM_data[dist_index]=[0]*len(values)*(len(values))
   
TP_A_data[dist_index]=[0]*len(values)*(len(values)) TP_A_data[dist_index]=[0]*len(values)*(len(values))
TH_A_data[dist_index]=[0]*len(values)*(len(values)) TH_A_data[dist_index]=[0]*len(values)*(len(values))
TM_A_data[dist_index]=[0]*len(values)*(len(values)) TM_A_data[dist_index]=[0]*len(values)*(len(values))
   
# Obtencion de los grupos del dataframe necesarios # Obtencion de los grupos del dataframe necesarios
   
#ACTUALMENTE NO SE DIFERENCIAN LOS TIEMPOS DE ITERACIONES DE PADRES E HIJOS CUANDO COINCIDE EL NUMERO DE PROCESOS #ACTUALMENTE NO SE DIFERENCIAN LOS TIEMPOS DE ITERACIONES DE PADRES E HIJOS CUANDO COINCIDE EL NUMERO DE PROCESOS
if(n_qty == 1): if(n_qty == 1):
groupM_aux = dfM.groupby(['NP', 'NS'])['TC'] groupM_aux = dfM.groupby(['NP', 'NS'])['TC']
groupL_aux = dfL[dfL['Tt'] == 0].groupby(['NP'])['Ti'] groupL_aux = dfL[dfL['Tt'] == 0].groupby(['NP'])['Ti']
else: else:
groupM_aux = dfM.groupby(['NP', 'NS', 'Dist'])['TC'] groupM_aux = dfM.groupby(['NP', 'NS', 'Dist'])['TC']
groupL_aux = dfL[dfL['Tt'] == 0].groupby(['Dist', 'NP'])['Ti'] groupL_aux = dfL[dfL['Tt'] == 0].groupby(['Dist', 'NP'])['Ti']
   
grouped_aggM_aux = groupM_aux.agg(['mean']) grouped_aggM_aux = groupM_aux.agg(['mean'])
grouped_aggM_aux.columns = grouped_aggM_aux.columns.get_level_values(0) grouped_aggM_aux.columns = grouped_aggM_aux.columns.get_level_values(0)
   
grouped_aggL_aux = groupL_aux.agg(['mean']) grouped_aggL_aux = groupL_aux.agg(['mean'])
grouped_aggL_aux.columns = grouped_aggL_aux.columns.get_level_values(0) grouped_aggL_aux.columns = grouped_aggL_aux.columns.get_level_values(0)
grouped_aggL_aux.set_axis(['Ti'], axis='columns') grouped_aggL_aux.set_axis(['Ti'], axis='columns')
   
#Calculo de los valores para las figuras #Calculo de los valores para las figuras
#1=Best Fit #1=Best Fit
#2=Worst Fit #2=Worst Fit
dist=1 dist=1
for dist in [1,2]: for dist in [1,2]:
dist_index=dist-1 dist_index=dist-1
dist_v = str(dist)+","+str(dist) dist_v = str(dist)+","+str(dist)
i=0 i=0
r=0 r=0
for numP in values: for numP in values:
j=0 j=0
for numC in values: for numC in values:
   
tc_real = grouped_aggM_aux.loc[(numP,numC,dist_v)]['mean'] tc_real = grouped_aggM_aux.loc[(numP,numC,dist_v)]['mean']
for tipo in [0]: #TODO Poner a 0,100 for tipo in [0]: #TODO Poner a 0,100
iters_aux=dfM[(dfM["NP"] == numP)][(dfM["NS"] == numC)][(dfM["Dist"] == dist_v)][(dfM["%Async"] == tipo)]['Iters'].head(1).tolist()[0].split(',') iters_aux=dfM[(dfM["NP"] == numP)][(dfM["NS"] == numC)][(dfM["Dist"] == dist_v)][(dfM["%Async"] == tipo)]['Iters'].head(1).tolist()[0].split(',')
itersP_aux = int(iters_aux[0]) itersP_aux = int(iters_aux[0])
itersS_aux = int(iters_aux[1]) itersS_aux = int(iters_aux[1])
iters_mal_aux = 0 iters_mal_aux = 0
if tipo != 0: if tipo != 0:
iters_mal_aux = grouped_aggL['Iters'].loc[(1,dist,tipo,numP,numC)] iters_mal_aux = grouped_aggL['Iters'].loc[(1,dist,tipo,numP,numC)]
   
t_iterP_aux = grouped_aggL_aux['Ti'].loc[(dist,numP)] t_iterP_aux = grouped_aggL_aux['Ti'].loc[(dist,numP)]
t_iterS_aux = grouped_aggL_aux['Ti'].loc[(dist,numC)] t_iterS_aux = grouped_aggL_aux['Ti'].loc[(dist,numC)]
   
   
p1 = t_iterP_aux * itersP_aux p1 = t_iterP_aux * itersP_aux
p2 = t_iterS_aux * max((itersS_aux - iters_mal_aux),0) p2 = t_iterS_aux * max((itersS_aux - iters_mal_aux),0)
   
array_aux = grouped_aggM[['TS', 'TA']].loc[(dist_v,tipo,numP,numC)].tolist() array_aux = grouped_aggM[['TS', 'TA']].loc[(dist_v,tipo,numP,numC)].tolist()
p3 = tc_real + array_aux[0] + array_aux[1] p3 = tc_real + array_aux[0] + array_aux[1]
   
#Guardar datos #Guardar datos
if tipo == 0: if tipo == 0:
TP_data[dist_index][i*len(values) + j] = p1 TP_data[dist_index][i*len(values) + j] = p1
TH_data[dist_index][i*len(values) + j] = p2 TH_data[dist_index][i*len(values) + j] = p2
TM_data[dist_index][i*len(values) + j] = p3 TM_data[dist_index][i*len(values) + j] = p3
else: else:
TP_A_data[dist_index][i*len(values) + j] = p1 TP_A_data[dist_index][i*len(values) + j] = p1
TH_A_data[dist_index][i*len(values) + j] = p2 TH_A_data[dist_index][i*len(values) + j] = p2
TM_A_data[dist_index][i*len(values) + j] = p3 TM_A_data[dist_index][i*len(values) + j] = p3
j+=1 j+=1
i+=1 i+=1
print(TP_data) print(TP_data)
print(TH_data) print(TH_data)
print(TM_data) print(TM_data)
``` ```
   
%%%% Output: stream %%%% Output: stream
   
[[0.21241231578947362, 0.21241231578947362, 0.21241231578947362, 0.21241231578947362, 0.04632109565217393, 0.04632109565217393, 0.04632109565217393, 0.04632109565217393, 0.025296672413793103, 0.025296672413793103, 0.025296672413793103, 0.025296672413793103, 0.0355868547008547, 0.0355868547008547, 0.0355868547008547, 0.0355868547008547], [0.1981199732142857, 0.1981199732142857, 0.1981199732142857, 0.1981199732142857, 0.06233977876106192, 0.06233977876106192, 0.06233977876106192, 0.06233977876106192, 0.026912142857142853, 0.026912142857142853, 0.026912142857142853, 0.026912142857142853, 0.0343439649122807, 0.0343439649122807, 0.0343439649122807, 0.0343439649122807]] [[0.21241231578947362, 0.21241231578947362, 0.21241231578947362, 0.21241231578947362, 0.04632109565217393, 0.04632109565217393, 0.04632109565217393, 0.04632109565217393, 0.025296672413793103, 0.025296672413793103, 0.025296672413793103, 0.025296672413793103, 0.0355868547008547, 0.0355868547008547, 0.0355868547008547, 0.0355868547008547], [0.1981199732142857, 0.1981199732142857, 0.1981199732142857, 0.1981199732142857, 0.06233977876106192, 0.06233977876106192, 0.06233977876106192, 0.06233977876106192, 0.026912142857142853, 0.026912142857142853, 0.026912142857142853, 0.026912142857142853, 0.0343439649122807, 0.0343439649122807, 0.0343439649122807, 0.0343439649122807]]
[[2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703, 2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703, 2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703, 2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703], [1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807, 1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807, 1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807, 1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807]] [[2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703, 2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703, 2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703, 2.1241231578947364, 0.4632109565217393, 0.25296672413793103, 0.35586854700854703], [1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807, 1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807, 1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807, 1.9811997321428572, 0.6233977876106191, 0.2691214285714285, 0.343439649122807]]
[[0.22657399999999997, 0.22961033333333333, 0.37444533333333335, 1.0861523333333334, 0.18071299999999998, 0.2686593333333333, 0.48245, 1.8810366666666667, 0.22639533333333337, 0.31453400000000004, 0.564293, 2.4626886666666667, 0.4612826666666667, 1.0638560000000001, 1.5319243333333334, 2.1236686666666666], [0.21594133333333332, 0.36930899999999994, 1.1269756666666668, 1.1670603333333334, 0.22462733333333332, 0.47068400000000005, 1.5951943333333334, 1.693723, 0.7059706666666666, 1.368441, 1.8698483333333336, 2.2059883333333334, 0.4813296666666667, 1.3010543333333333, 1.8387883333333335, 2.1851773333333333]] [[0.22657399999999997, 0.22961033333333333, 0.37444533333333335, 1.0861523333333334, 0.18071299999999998, 0.2686593333333333, 0.48245, 1.8810366666666667, 0.22639533333333337, 0.31453400000000004, 0.564293, 2.4626886666666667, 0.4612826666666667, 1.0638560000000001, 1.5319243333333334, 2.1236686666666666], [0.21594133333333332, 0.36930899999999994, 1.1269756666666668, 1.1670603333333334, 0.22462733333333332, 0.47068400000000005, 1.5951943333333334, 1.693723, 0.7059706666666666, 1.368441, 1.8698483333333336, 2.2059883333333334, 0.4813296666666667, 1.3010543333333333, 1.8387883333333335, 2.1851773333333333]]
   
%%%% Output: stream %%%% Output: stream
   
/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:36: FutureWarning: set_axis currently defaults to operating inplace. /home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:36: FutureWarning: set_axis currently defaults to operating inplace.
This will change in a future version of pandas, use inplace=True to avoid this warning. This will change in a future version of pandas, use inplace=True to avoid this warning.
/home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:53: UserWarning: Boolean Series key will be reindexed to match DataFrame index. /home/usuario/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:53: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
#TP_A_data=[[0.1997793257575758, 0.1997793257575758, 0.1997793257575758, 0.1997793257575758, 0.040469166666666695, 0.040469166666666695, 0.040469166666666695, 0.040469166666666695, 0.019951386363636366, 0.019951386363636366, 0.019951386363636366, 0.019951386363636366, 0.010227022727272729, 0.010227022727272729, 0.010227022727272729, 0.010227022727272729], [0.20020575000000002, 0.20020575000000002, 0.20020575000000002, 0.20020575000000002, 0.039894712121212116, 0.039894712121212116, 0.039894712121212116, 0.039894712121212116, 0.020662818181818185, 0.020662818181818185, 0.020662818181818185, 0.020662818181818185, 0.010635333333333332, 0.010635333333333332, 0.010635333333333332, 0.010635333333333332]] #TP_A_data=[[0.1997793257575758, 0.1997793257575758, 0.1997793257575758, 0.1997793257575758, 0.040469166666666695, 0.040469166666666695, 0.040469166666666695, 0.040469166666666695, 0.019951386363636366, 0.019951386363636366, 0.019951386363636366, 0.019951386363636366, 0.010227022727272729, 0.010227022727272729, 0.010227022727272729, 0.010227022727272729], [0.20020575000000002, 0.20020575000000002, 0.20020575000000002, 0.20020575000000002, 0.039894712121212116, 0.039894712121212116, 0.039894712121212116, 0.039894712121212116, 0.020662818181818185, 0.020662818181818185, 0.020662818181818185, 0.020662818181818185, 0.010635333333333332, 0.010635333333333332, 0.010635333333333332, 0.010635333333333332]]
#TH_A_data=[[1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729, 1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729, 1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729, 1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729], [2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331, 2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331, 2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331, 2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331]] #TH_A_data=[[1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729, 1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729, 1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729, 1.9977932575757578, 0.40469166666666695, 0.19951386363636364, 0.10227022727272729], [2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331, 2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331, 2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331, 2.0020575000000003, 0.39894712121212117, 0.20662818181818185, 0.10635333333333331]]
#TM_A_data=[[0.2083043333333333, 0.2661843333333333, 0.41778833333333326, 0.9868953333333335, 0.242685, 0.3060793333333333, 0.4986676666666667, 1.2530743333333334, 0.305179, 0.373607, 0.7375183333333334, 1.5113886666666667, 0.501651, 0.8987069999999999, 1.138518666666667, 1.5091376666666665], [0.205789, 0.4116923333333334, 1.0607546666666667, 0.9947066666666666, 0.27494700000000005, 0.669121, 1.2705783333333334, 1.3951336666666665, 0.4765406666666667, 0.9758123333333333, 1.267633, 1.4479673333333334, 0.4905743333333333, 1.0088953333333333, 1.4447113333333332, 1.4516683333333333]] #TM_A_data=[[0.2083043333333333, 0.2661843333333333, 0.41778833333333326, 0.9868953333333335, 0.242685, 0.3060793333333333, 0.4986676666666667, 1.2530743333333334, 0.305179, 0.373607, 0.7375183333333334, 1.5113886666666667, 0.501651, 0.8987069999999999, 1.138518666666667, 1.5091376666666665], [0.205789, 0.4116923333333334, 1.0607546666666667, 0.9947066666666666, 0.27494700000000005, 0.669121, 1.2705783333333334, 1.3951336666666665, 0.4765406666666667, 0.9758123333333333, 1.267633, 1.4479673333333334, 0.4905743333333333, 1.0088953333333333, 1.4447113333333332, 1.4516683333333333]]
   
   
for dist in [1,2]: for dist in [1,2]:
dist_index=dist-1 dist_index=dist-1
f=plt.figure(figsize=(20, 12)) f=plt.figure(figsize=(20, 12))
#for numP in values: #for numP in values:
   
x = np.arange(len(labelsP_J)) x = np.arange(len(labelsP_J))
   
width = 0.35 width = 0.35
sumaTP_TM = np.add(TP_data[dist_index], TM_data[dist_index]).tolist() sumaTP_TM = np.add(TP_data[dist_index], TM_data[dist_index]).tolist()
sumaTP_TM_A = np.add(TP_A_data[dist_index], TM_A_data[dist_index]).tolist() sumaTP_TM_A = np.add(TP_A_data[dist_index], TM_A_data[dist_index]).tolist()
   
ax=f.add_subplot(111) ax=f.add_subplot(111)
   
ax.bar(x+width/2, TP_data[dist_index], width, color='blue') ax.bar(x+width/2, TP_data[dist_index], width, color='blue')
ax.bar(x+width/2, TM_data[dist_index], width, bottom=TP_data[dist_index],color='orange') ax.bar(x+width/2, TM_data[dist_index], width, bottom=TP_data[dist_index],color='orange')
ax.bar(x+width/2, TH_data[dist_index], width, bottom=sumaTP_TM, color='green') ax.bar(x+width/2, TH_data[dist_index], width, bottom=sumaTP_TM, color='green')
   
ax.bar(x-width/2, TP_A_data[dist_index], width, hatch="\\/...", color='blue') ax.bar(x-width/2, TP_A_data[dist_index], width, hatch="\\/...", color='blue')
ax.bar(x-width/2, TM_A_data[dist_index], width, bottom=TP_A_data[dist_index], hatch="\\/...", color='orange') ax.bar(x-width/2, TM_A_data[dist_index], width, bottom=TP_A_data[dist_index], hatch="\\/...", color='orange')
ax.bar(x-width/2, TH_A_data[dist_index], width, bottom=sumaTP_TM_A, hatch="\\/...", color='green') ax.bar(x-width/2, TH_A_data[dist_index], width, bottom=sumaTP_TM_A, hatch="\\/...", color='green')
   
ax.set_ylabel("Time(s)", fontsize=20) ax.set_ylabel("Time(s)", fontsize=20)
ax.set_xlabel("NP, NC", fontsize=20) ax.set_xlabel("NP, NC", fontsize=20)
plt.xticks(x, labelsP_J, rotation=90) plt.xticks(x, labelsP_J, rotation=90)
   
blue_Spatch = mpatches.Patch(color='blue', label='Parents PR') blue_Spatch = mpatches.Patch(color='blue', label='Parents PR')
orange_Spatch = mpatches.Patch(color='orange', label='Resize PR') orange_Spatch = mpatches.Patch(color='orange', label='Resize PR')
green_Spatch = mpatches.Patch(color='green', label='Children PR') green_Spatch = mpatches.Patch(color='green', label='Children PR')
blue_Apatch = mpatches.Patch(hatch='\\/...', facecolor='blue', label='Parents NR') blue_Apatch = mpatches.Patch(hatch='\\/...', facecolor='blue', label='Parents NR')
orange_Apatch = mpatches.Patch(hatch='\\/...', facecolor='orange', label='Resize NR') orange_Apatch = mpatches.Patch(hatch='\\/...', facecolor='orange', label='Resize NR')
green_Apatch = mpatches.Patch(hatch='\\/...', facecolor='green', label='Children NR') green_Apatch = mpatches.Patch(hatch='\\/...', facecolor='green', label='Children NR')
   
   
handles=[blue_Spatch,orange_Spatch,green_Spatch,blue_Apatch,orange_Apatch,green_Apatch] handles=[blue_Spatch,orange_Spatch,green_Spatch,blue_Apatch,orange_Apatch,green_Apatch]
   
plt.legend(handles=handles, loc='upper left', fontsize=21,ncol=2) plt.legend(handles=handles, loc='upper left', fontsize=21,ncol=2)
   
ax.axvline((3.5), color='black') ax.axvline((3.5), color='black')
ax.axvline((7.5), color='black') ax.axvline((7.5), color='black')
ax.axvline((11.5), color='black') ax.axvline((11.5), color='black')
   
ax.tick_params(axis='both', which='major', labelsize=24) ax.tick_params(axis='both', which='major', labelsize=24)
ax.tick_params(axis='both', which='minor', labelsize=22) ax.tick_params(axis='both', which='minor', labelsize=22)
plt.ylim((0, 25.5)) plt.ylim((0, 25.5))
#ax.axvline(4) #ax.axvline(4)
   
f.tight_layout() f.tight_layout()
f.savefig("Images/EX_Partitions_"+dist_names[dist]+".png", format="png") f.savefig("Images/EX_Partitions_"+dist_names[dist]+".png", format="png")
``` ```
   
%%%% Output: display_data %%%% Output: display_data
   
[Hidden Image Output] [Hidden Image Output]
   
%%%% Output: display_data %%%% Output: display_data
   
[Hidden Image Output] [Hidden Image Output]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def get_types_iker(checked_type='tc', used_direction='e', node_type="All", normality='m'): def get_types_iker(checked_type='tc', used_direction='e', node_type="All", normality='m'):
if checked_type=='te': if checked_type=='te':
var_aux='TE' var_aux='TE'
tipo_fig="TE" tipo_fig="TE"
grouped_aux=grouped_aggG2 grouped_aux=grouped_aggG2
elif checked_type=='tc': elif checked_type=='tc':
var_aux='TC' var_aux='TC'
tipo_fig="Mall" tipo_fig="Mall"
grouped_aux=grouped_aggM grouped_aux=grouped_aggM
   
if node_type=='Intra': if node_type=='Intra':
grouped_aux=grouped_aux.query('NP < 21 and NS < 21') grouped_aux=grouped_aux.query('NP < 21 and NS < 21')
elif node_type=='Inter': elif node_type=='Inter':
grouped_aux=grouped_aux.query('NP > 21 or NS > 21') grouped_aux=grouped_aux.query('NP > 21 or NS > 21')
   
if used_direction=='s': if used_direction=='s':
grouped_aux=grouped_aux.query('NP > NS') grouped_aux=grouped_aux.query('NP > NS')
if node_type=='Intra': if node_type=='Intra':
used_labels=labelsShrinkIntra used_labels=labelsShrinkIntra
elif node_type=='Inter': elif node_type=='Inter':
used_labels=labelsShrinkInter used_labels=labelsShrinkInter
elif node_type=='All': elif node_type=='All':
used_labels=labelsShrink used_labels=labelsShrink
name_fig="Shrink" name_fig="Shrink"
   
if normality=='r': if normality=='r':
handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch] handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch]
else: else:
handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch] handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch]
elif used_direction=='e': elif used_direction=='e':
grouped_aux=grouped_aux.query('NP < NS') grouped_aux=grouped_aux.query('NP < NS')
if node_type=='Intra': if node_type=='Intra':
used_labels=labelsExpandIntra used_labels=labelsExpandIntra
elif node_type=='Inter': elif node_type=='Inter':
used_labels=labelsExpandInter used_labels=labelsExpandInter
elif node_type=='All': elif node_type=='All':
used_labels=labelsExpand used_labels=labelsExpand
name_fig="Expand" name_fig="Expand"
if normality=='r': if normality=='r':
handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch] handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch]
else: else:
handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch] handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch]
title=tipo_fig+"_Spawn_"+node_type+"_"+name_fig+"_"+normality title=tipo_fig+"_Spawn_"+node_type+"_"+name_fig+"_"+normality
return var_aux, grouped_aux, handles, used_labels, title return var_aux, grouped_aux, handles, used_labels, title
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def obtain_arrays_iker(grouped_aux, var_aux, used_direction='e', normality='m'): def obtain_arrays_iker(grouped_aux, var_aux, used_direction='e', normality='m'):
vOrMult = list(grouped_aux.query('Cst == 0 and Css == 0')[var_aux]) vOrMult = list(grouped_aux.query('Cst == 0 and Css == 0')[var_aux])
vOrSingle = list(grouped_aux.query('Cst == 0 and Css == 1')[var_aux]) vOrSingle = list(grouped_aux.query('Cst == 0 and Css == 1')[var_aux])
vMergeMult = list(grouped_aux.query('Cst == 2 and Css == 0')[var_aux]) vMergeMult = list(grouped_aux.query('Cst == 2 and Css == 0')[var_aux])
vOrPthMult = list(grouped_aux.query('Cst == 1 and Css == 0')[var_aux]) vOrPthMult = list(grouped_aux.query('Cst == 1 and Css == 0')[var_aux])
vOrPthSingle = list(grouped_aux.query('Cst == 1 and Css == 1')[var_aux]) vOrPthSingle = list(grouped_aux.query('Cst == 1 and Css == 1')[var_aux])
vMergePthMult = list(grouped_aux.query('Cst == 3 and Css == 0')[var_aux]) vMergePthMult = list(grouped_aux.query('Cst == 3 and Css == 0')[var_aux])
h_line = None h_line = None
   
if used_direction=='e': if used_direction=='e':
vMergeSingle = list(grouped_aux.query('Cst == 2 and Css == 1')[var_aux]) vMergeSingle = list(grouped_aux.query('Cst == 2 and Css == 1')[var_aux])
vMergePthSingle = list(grouped_aux.query('Cst == 3 and Css == 1')[var_aux]) vMergePthSingle = list(grouped_aux.query('Cst == 3 and Css == 1')[var_aux])
else: else:
#FIXME Que tenga en cuenta TH al realizar shrink merge #FIXME Que tenga en cuenta TH al realizar shrink merge
vMergePthMult = list(grouped_aux.query('Cst == 3 and Css == 0')[var_aux]) vMergePthMult = list(grouped_aux.query('Cst == 3 and Css == 0')[var_aux])
vMergeSingle = None vMergeSingle = None
vMergePthSingle = None vMergePthSingle = None
title_y = "Total time(s)" title_y = "Total time(s)"
   
if normality == 'r': if normality == 'r':
vOrSingle = np.subtract(vOrMult, vOrSingle) vOrSingle = np.subtract(vOrMult, vOrSingle)
vOrPthMult = np.subtract(vOrMult, vOrPthMult) vOrPthMult = np.subtract(vOrMult, vOrPthMult)
vOrPthSingle = np.subtract(vOrMult, vOrPthSingle) vOrPthSingle = np.subtract(vOrMult, vOrPthSingle)
vMergeMult = np.subtract(vOrMult, vMergeMult) vMergeMult = np.subtract(vOrMult, vMergeMult)
vMergePthMult = np.subtract(vOrMult, vMergePthMult) vMergePthMult = np.subtract(vOrMult, vMergePthMult)
if used_direction=='e': if used_direction=='e':
vMergeSingle = np.subtract(vOrMult, vMergeSingle) vMergeSingle = np.subtract(vOrMult, vMergeSingle)
vMergePthSingle = np.subtract(vOrMult, vMergePthSingle) vMergePthSingle = np.subtract(vOrMult, vMergePthSingle)
vOrMult = None vOrMult = None
h_line = 0 h_line = 0
title_y = "Saved time(s)" title_y = "Saved time(s)"
elif normality == 'n': elif normality == 'n':
vOrSingle = np.divide(vOrSingle, vOrMult) vOrSingle = np.divide(vOrSingle, vOrMult)
vOrPthMult = np.divide(vOrPthMult, vOrMult) vOrPthMult = np.divide(vOrPthMult, vOrMult)
vOrPthSingle = np.divide(vOrPthSingle, vOrMult) vOrPthSingle = np.divide(vOrPthSingle, vOrMult)
vMergeMult = np.divide(vMergeMult, vOrMult) vMergeMult = np.divide(vMergeMult, vOrMult)
vMergePthMult = np.divide(vMergePthMult, vOrMult) vMergePthMult = np.divide(vMergePthMult, vOrMult)
if used_direction=='e': if used_direction=='e':
vMergeSingle = np.divide(vMergeSingle, vOrMult) vMergeSingle = np.divide(vMergeSingle, vOrMult)
vMergePthSingle = np.divide(vMergePthSingle, vOrMult) vMergePthSingle = np.divide(vMergePthSingle, vOrMult)
vOrMult = np.divide(vOrMult, vOrMult) vOrMult = np.divide(vOrMult, vOrMult)
h_line = 1 h_line = 1
title_y = "Relation Config time / Baseline Time" title_y = "Relation Config time / Baseline Time"
   
data_array=[vOrMult,vOrSingle,vOrPthMult,vOrPthSingle,vMergeMult,vMergeSingle,vMergePthMult,vMergePthSingle] data_array=[vOrMult,vOrSingle,vOrPthMult,vOrPthSingle,vMergeMult,vMergeSingle,vMergePthMult,vMergePthSingle]
v_lines=[] v_lines=[]
value_aux = 0.4 value_aux = 0.4
if used_direction == 'e': if used_direction == 'e':
value_aux = 0.5 value_aux = 0.5
for i in range(0, len(vOrSingle)-1): for i in range(0, len(vOrSingle)-1):
v_lines.append(value_aux + i) v_lines.append(value_aux + i)
return data_array, title_y, v_lines, h_line return data_array, title_y, v_lines, h_line
   
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def legend_loc_iker(data_array, len_x, ylim_zero): def legend_loc_iker(data_array, len_x, ylim_zero):
   
max_value = np.nanmax([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos max_value = np.nanmax([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos
min_value = np.nanmin([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos min_value = np.nanmin([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos
if(ylim_zero): if(ylim_zero):
min_value = 0 min_value = 0
middle_value = (max_value + min_value) / 2 middle_value = (max_value + min_value) / 2
offset = (max_value - min_value) * 0.1 offset = (max_value - min_value) * 0.1
   
def array_check_loc(ini, end): def array_check_loc(ini, end):
up = True up = True
lower = True lower = True
for i in range(ini, end): for i in range(ini, end):
for j in range(len(data_array)): for j in range(len(data_array)):
if not (data_array[j] is None): if not (data_array[j] is None):
if data_array[j][i] > (middle_value + offset): if data_array[j][i] > (middle_value + offset):
up = False up = False
elif data_array[j][i] < (middle_value - offset): elif data_array[j][i] < (middle_value - offset):
lower = False lower = False
if not up and not lower: if not up and not lower:
break break
else: else:
continue # Only executed if inner loop did NOT break continue # Only executed if inner loop did NOT break
break # Only executed if inner loop did break break # Only executed if inner loop did break
return up,lower return up,lower
   
up_left, lower_left = array_check_loc(0, math.floor(len_x/2)) up_left, lower_left = array_check_loc(0, math.floor(len_x/2))
up_right, lower_right = array_check_loc(0, math.floor(len_x/2)) up_right, lower_right = array_check_loc(0, math.floor(len_x/2))
   
legend_loc = 'best' legend_loc = 'best'
if up_left: if up_left:
legend_loc = 'upper left' legend_loc = 'upper left'
elif up_right: elif up_right:
legend_loc = 'upper right' legend_loc = 'upper right'
elif lower_left: elif lower_left:
legend_loc = 'lower left' legend_loc = 'lower left'
elif lower_right: elif lower_right:
lower_right = 'lower right' lower_right = 'lower right'
   
return legend_loc return legend_loc
   
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def graphic_iker(data_array, title="None", title_y="None", title_x="None", handles=None, used_labels=None, v_lines=None, h_line=None, ylim_zero=True): def graphic_iker(data_array, title="None", title_y="None", title_x="None", handles=None, used_labels=None, v_lines=None, h_line=None, ylim_zero=True):
f=plt.figure(figsize=(30, 12)) f=plt.figure(figsize=(30, 12))
ax=f.add_subplot(111) ax=f.add_subplot(111)
x = np.arange(len(used_labels)) x = np.arange(len(used_labels))
width = 0.45/4 width = 0.45/4
   
legend_loc = legend_loc_iker(data_array, len(used_labels), ylim_zero) legend_loc = legend_loc_iker(data_array, len(used_labels), ylim_zero)
   
if not (data_array[0] is None): if not (data_array[0] is None):
ax.bar(x-width*3.5, data_array[0], width, color='green') ax.bar(x-width*3.5, data_array[0], width, color='green')
ax.bar(x-width*2.5, data_array[1], width, hatch="", color='springgreen') ax.bar(x-width*2.5, data_array[1], width, hatch="", color='springgreen')
ax.bar(x-width*1.5, data_array[2], width, hatch="//", color='blue') ax.bar(x-width*1.5, data_array[2], width, hatch="//", color='blue')
ax.bar(x-width*0.5, data_array[3], width, hatch="\\",color='darkblue') ax.bar(x-width*0.5, data_array[3], width, hatch="\\",color='darkblue')
   
ax.bar(x+width*0.5, data_array[4], width, hatch="||", color='red') ax.bar(x+width*0.5, data_array[4], width, hatch="||", color='red')
if not (data_array[5] is None): if not (data_array[5] is None):
ax.bar(x+width*1.5, data_array[5], width, hatch="...", color='darkred') ax.bar(x+width*1.5, data_array[5], width, hatch="...", color='darkred')
ax.bar(x+width*2.5, data_array[6], width, hatch="xx", color='yellow') ax.bar(x+width*2.5, data_array[6], width, hatch="xx", color='yellow')
else: else:
ax.bar(x+width*1.5, data_array[6], width, hatch="xx", color='yellow') ax.bar(x+width*1.5, data_array[6], width, hatch="xx", color='yellow')
if not (data_array[7] is None): if not (data_array[7] is None):
ax.bar(x+width*3.5, data_array[7], width, hatch="++",color='olive') ax.bar(x+width*3.5, data_array[7], width, hatch="++",color='olive')
   
ax.axhline((0), color='black', linestyle='dashed') ax.axhline((0), color='black', linestyle='dashed')
ax.set_ylabel(title_y, fontsize=30) ax.set_ylabel(title_y, fontsize=30)
ax.set_xlabel(title_x, fontsize=28) ax.set_xlabel(title_x, fontsize=28)
plt.xticks(x, used_labels, rotation=90) plt.xticks(x, used_labels, rotation=90)
plt.legend(handles=handles, loc=legend_loc, fontsize=26,ncol=2,framealpha=1) plt.legend(handles=handles, loc=legend_loc, fontsize=26,ncol=2,framealpha=1)
   
if not ylim_zero: # Modifica los limites del eje y. No es buena practica que no aparezca el 0 if not ylim_zero: # Modifica los limites del eje y. No es buena practica que no aparezca el 0
max_value = np.nanmax([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos max_value = np.nanmax([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos
max_value += max_value * 0.1 max_value += max_value * 0.1
min_value = np.nanmin([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos min_value = np.nanmin([x for x in data_array if x is not None]) # Los valores None es necesario evitarlos
min_value -= min_value * 0.1 min_value -= min_value * 0.1
if min_value < 0.1: if min_value < 0.1:
min_value = 0 min_value = 0
plt.ylim((min_value, max_value)) plt.ylim((min_value, max_value))
   
for line in v_lines: for line in v_lines:
ax.axvline((line), color='black') ax.axvline((line), color='black')
if h_line != None: if h_line != None:
ax.axhline((h_line), color='black') ax.axhline((h_line), color='black')
   
ax.tick_params(axis='both', which='major', labelsize=30) ax.tick_params(axis='both', which='major', labelsize=30)
ax.tick_params(axis='both', which='minor', labelsize=28) ax.tick_params(axis='both', which='minor', labelsize=28)
   
f.tight_layout() f.tight_layout()
f.savefig("Images/Spawn/"+title+".png", format="png") f.savefig("Images/Spawn/"+title+".png", format="png")
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
checked_type='te' # Valores 'te' y 'tc' checked_type='te' # Valores 'te' y 'tc'
used_direction='e' # Valores 's' y 'e' used_direction='e' # Valores 's' y 'e'
node_type='All' # Valores 'Intra', 'Inter', 'All' node_type='All' # Valores 'Intra', 'Inter', 'All'
normality='n' normality='n'
#Values 'n' (normalizar), 'l' (logaritmico), 'm' (sin modificaciones), 'r' (Comparar respecto al primero) #Values 'n' (normalizar), 'l' (logaritmico), 'm' (sin modificaciones), 'r' (Comparar respecto al primero)
   
ylim_zero = True ylim_zero = True
   
var_aux, grouped_aux, handles, used_labels, title = get_types_iker(checked_type, used_direction, node_type, normality) var_aux, grouped_aux, handles, used_labels, title = get_types_iker(checked_type, used_direction, node_type, normality)
array_aux, title_y, v_lines, h_line = obtain_arrays_iker(grouped_aux, var_aux, used_direction, normality) array_aux, title_y, v_lines, h_line = obtain_arrays_iker(grouped_aux, var_aux, used_direction, normality)
graphic_iker(array_aux, title, title_y, "(NP, NC)", handles, used_labels, v_lines, ylim_zero) graphic_iker(array_aux, title, title_y, "(NP, NC)", handles, used_labels, v_lines, ylim_zero)
``` ```
   
%%%% Output: display_data %%%% Output: display_data
   
[Hidden Image Output] [Hidden Image Output]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
used_direction='e' used_direction='e'
   
if used_direction=='s': if used_direction=='s':
dfM_aux=dfM.query('NP > NS') dfM_aux=dfM.query('NP > NS')
dfG_aux=dfG.query('NP > NS') dfG_aux=dfG.query('NP > NS')
used_labels=labelsShrink used_labels=labelsShrink
name_fig="Shrink" name_fig="Shrink"
handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch] handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch]
elif used_direction=='e': elif used_direction=='e':
dfM_aux=dfM.query('NP < NS') dfM_aux=dfM.query('NP < NS')
dfG_aux=dfG.query('NP < NS') dfG_aux=dfG.query('NP < NS')
used_labels=labelsExpand used_labels=labelsExpand
name_fig="Expand" name_fig="Expand"
handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch] handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch]
# < Expand # < Expand
# > Shrink # > Shrink
   
vOrMult = list(dfG_aux.query('Cst == 0 and Css == 0')['TE']) vOrMult = list(dfG_aux.query('Cst == 0 and Css == 0')['TE'])
vOrSingle = list(dfG_aux.query('Cst == 0 and Css == 1')['TE']) vOrSingle = list(dfG_aux.query('Cst == 0 and Css == 1')['TE'])
vOrPthMult = list(dfG_aux.query('Cst == 1 and Css == 0')['TE']) vOrPthMult = list(dfG_aux.query('Cst == 1 and Css == 0')['TE'])
vOrPthSingle = list(dfG_aux.query('Cst == 1 and Css == 1')['TE']) vOrPthSingle = list(dfG_aux.query('Cst == 1 and Css == 1')['TE'])
   
vMergeMult = list(dfG_aux.query('Cst == 2 and Css == 0')['TE']) vMergeMult = list(dfG_aux.query('Cst == 2 and Css == 0')['TE'])
vMergeSingle = list(dfG_aux.query('Cst == 2 and Css == 1')['TE']) vMergeSingle = list(dfG_aux.query('Cst == 2 and Css == 1')['TE'])
vMergePthMult = list(dfG_aux.query('Cst == 3 and Css == 0')['TE']) vMergePthMult = list(dfG_aux.query('Cst == 3 and Css == 0')['TE'])
vMergePthSingle = list(dfG_aux.query('Cst == 3 and Css == 1')['TE']) vMergePthSingle = list(dfG_aux.query('Cst == 3 and Css == 1')['TE'])
   
vOrMult2 = list(dfM_aux.query('Cst == 0 and Css == 0')['TC']) vOrMult2 = list(dfM_aux.query('Cst == 0 and Css == 0')['TC'])
vOrSingle2 = list(dfM_aux.query('Cst == 0 and Css == 1')['TC']) vOrSingle2 = list(dfM_aux.query('Cst == 0 and Css == 1')['TC'])
vOrPthMult2 = list(dfM_aux.query('Cst == 1 and Css == 0')['TC']) vOrPthMult2 = list(dfM_aux.query('Cst == 1 and Css == 0')['TC'])
vOrPthSingle2 = list(dfM_aux.query('Cst == 1 and Css == 1')['TC']) vOrPthSingle2 = list(dfM_aux.query('Cst == 1 and Css == 1')['TC'])
   
vMergeMult2 = list(dfM_aux.query('Cst == 2 and Css == 0')['TC']) vMergeMult2 = list(dfM_aux.query('Cst == 2 and Css == 0')['TC'])
vMergeSingle2 = list(dfM_aux.query('Cst == 2 and Css == 1')['TC']) vMergeSingle2 = list(dfM_aux.query('Cst == 2 and Css == 1')['TC'])
vMergePthMult2 = list(dfM_aux.query('Cst == 3 and Css == 0')['TC']) vMergePthMult2 = list(dfM_aux.query('Cst == 3 and Css == 0')['TC'])
vMergePthSingle2 = list(dfM_aux.query('Cst == 3 and Css == 1')['TC']) vMergePthSingle2 = list(dfM_aux.query('Cst == 3 and Css == 1')['TC'])
   
f=plt.figure(figsize=(30, 12)) f=plt.figure(figsize=(30, 12))
ax=f.add_subplot(111) ax=f.add_subplot(111)
   
ax.scatter(vOrMult,vOrMult2, color='green') ax.scatter(vOrMult,vOrMult2, color='green')
ax.scatter(vOrSingle,vOrSingle2, color='springgreen') ax.scatter(vOrSingle,vOrSingle2, color='springgreen')
ax.scatter(vOrPthMult,vOrPthMult2, color='blue') ax.scatter(vOrPthMult,vOrPthMult2, color='blue')
ax.scatter(vOrPthSingle,vOrPthSingle2,color='darkblue') ax.scatter(vOrPthSingle,vOrPthSingle2,color='darkblue')
   
ax.scatter(vMergeMult,vMergeMult2, color='red') ax.scatter(vMergeMult,vMergeMult2, color='red')
if used_direction=='e': if used_direction=='e':
ax.scatter(vMergeSingle,vMergeSingle2,color='darkred') ax.scatter(vMergeSingle,vMergeSingle2,color='darkred')
ax.scatter(vMergePthMult,vMergePthMult2, color='yellow') ax.scatter(vMergePthMult,vMergePthMult2, color='yellow')
if used_direction=='e': if used_direction=='e':
ax.scatter(vMergePthSingle,vMergePthSingle2,color='olive') ax.scatter(vMergePthSingle,vMergePthSingle2,color='olive')
   
ax.set_ylabel("Time TC(s)", fontsize=20) ax.set_ylabel("Time TC(s)", fontsize=20)
ax.set_xlabel("Time EX (s)", fontsize=20) ax.set_xlabel("Time EX (s)", fontsize=20)
#plt.xticks(x, used_labels, rotation=90) #plt.xticks(x, used_labels, rotation=90)
plt.legend(handles=handles, loc='upper right', fontsize=21,ncol=2) plt.legend(handles=handles, loc='upper right', fontsize=21,ncol=2)
   
ax.tick_params(axis='both', which='major', labelsize=24) ax.tick_params(axis='both', which='major', labelsize=24)
ax.tick_params(axis='both', which='minor', labelsize=22) ax.tick_params(axis='both', which='minor', labelsize=22)
   
f.tight_layout() f.tight_layout()
f.savefig("Images/Spawn/Dispersion_Spawn_"+name_fig+".png", format="png") f.savefig("Images/Spawn/Dispersion_Spawn_"+name_fig+".png", format="png")
``` ```
   
%%%% Output: display_data %%%% Output: display_data
   
[Hidden Image Output] [Hidden Image Output]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
valores1 = [0]*10 valores1 = [0]*10
valores2 = [0.2]*10 valores2 = [0.2]*10
valores3 = [0.4]*10 valores3 = [0.4]*10
valores4 = [0.6]*10 valores4 = [0.6]*10
valores5 = [0.8]*10 valores5 = [0.8]*10
valores6 = [1]*10 valores6 = [1]*10
valores7 = [1.2]*10 valores7 = [1.2]*10
valores8 = [1.4]*10 valores8 = [1.4]*10
   
for np_aux in processes: for np_aux in processes:
for ns_aux in processes: for ns_aux in processes:
if np_aux != ns_aux: if np_aux != ns_aux:
if np_aux > ns_aux: if np_aux > ns_aux:
used_labels=labelsShrink used_labels=labelsShrink
name_fig="Shrink" name_fig="Shrink"
handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch] handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch]
else: else:
used_labels=labelsExpand used_labels=labelsExpand
name_fig="Expand" name_fig="Expand"
handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch] handles=[OrMult_patch,OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch]
   
dfM_aux = dfM.query('NP == @np_aux and NS == @ns_aux') dfM_aux = dfM.query('NP == @np_aux and NS == @ns_aux')
vOrMult2 = list(dfM_aux.query('Cst == 0 and Css == 0')['TC']) vOrMult2 = list(dfM_aux.query('Cst == 0 and Css == 0')['TC'])
vOrSingle2 = list(dfM_aux.query('Cst == 0 and Css == 1')['TC']) vOrSingle2 = list(dfM_aux.query('Cst == 0 and Css == 1')['TC'])
vOrPthMult2 = list(dfM_aux.query('Cst == 1 and Css == 0')['TC']) vOrPthMult2 = list(dfM_aux.query('Cst == 1 and Css == 0')['TC'])
vOrPthSingle2 = list(dfM_aux.query('Cst == 1 and Css == 1')['TC']) vOrPthSingle2 = list(dfM_aux.query('Cst == 1 and Css == 1')['TC'])
   
vMergeMult2 = list(dfM_aux.query('Cst == 2 and Css == 0')['TC']) vMergeMult2 = list(dfM_aux.query('Cst == 2 and Css == 0')['TC'])
vMergeSingle2 = list(dfM_aux.query('Cst == 2 and Css == 1')['TC']) vMergeSingle2 = list(dfM_aux.query('Cst == 2 and Css == 1')['TC'])
vMergePthMult2 = list(dfM_aux.query('Cst == 3 and Css == 0')['TC']) vMergePthMult2 = list(dfM_aux.query('Cst == 3 and Css == 0')['TC'])
vMergePthSingle2 = list(dfM_aux.query('Cst == 3 and Css == 1')['TC']) vMergePthSingle2 = list(dfM_aux.query('Cst == 3 and Css == 1')['TC'])
   
f=plt.figure(figsize=(16, 8)) f=plt.figure(figsize=(16, 8))
ax=f.add_subplot(111) ax=f.add_subplot(111)
   
ax.scatter(vOrMult2,valores1, color='green') ax.scatter(vOrMult2,valores1, color='green')
ax.scatter(vOrSingle2,valores2, color='springgreen') ax.scatter(vOrSingle2,valores2, color='springgreen')
ax.scatter(vOrPthMult2,valores3, color='blue') ax.scatter(vOrPthMult2,valores3, color='blue')
ax.scatter(vOrPthSingle2,valores4,color='darkblue') ax.scatter(vOrPthSingle2,valores4,color='darkblue')
   
ax.scatter(vMergeMult2,valores5, color='red') ax.scatter(vMergeMult2,valores5, color='red')
if np_aux < ns_aux: if np_aux < ns_aux:
ax.scatter(vMergeSingle2,valores6,color='darkred') ax.scatter(vMergeSingle2,valores6,color='darkred')
ax.scatter(vMergePthMult2,valores7, color='yellow') ax.scatter(vMergePthMult2,valores7, color='yellow')
if np_aux < ns_aux: if np_aux < ns_aux:
ax.scatter(vMergePthSingle2,valores8,color='olive') ax.scatter(vMergePthSingle2,valores8,color='olive')
   
ax.set_xlabel("Time TC(s)", fontsize=16) ax.set_xlabel("Time TC(s)", fontsize=16)
ax.set_ylabel("-", fontsize=16) ax.set_ylabel("-", fontsize=16)
#plt.xticks(x, used_labels, rotation=90) #plt.xticks(x, used_labels, rotation=90)
plt.legend(handles=handles, loc='upper right', fontsize=14,ncol=2) plt.legend(handles=handles, loc='upper right', fontsize=14,ncol=2)
   
ax.tick_params(axis='both', which='major', labelsize=20) ax.tick_params(axis='both', which='major', labelsize=20)
ax.tick_params(axis='both', which='minor', labelsize=18) ax.tick_params(axis='both', which='minor', labelsize=18)
   
f.tight_layout() f.tight_layout()
f.savefig("Images/Spawn/Dispersion/Dispersion_Spawn_"+name_fig+"_"+str(np_aux)+"_"+str(ns_aux)+".png", format="png") f.savefig("Images/Spawn/Dispersion/Dispersion_Spawn_"+name_fig+"_"+str(np_aux)+"_"+str(ns_aux)+".png", format="png")
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
used_direction='e' used_direction='e'
test_parameter='TA' test_parameter='TA'
#TS es merge y TA connect para tests solo spawn #TS es merge y TA connect para tests solo spawn
   
if used_direction=='s': if used_direction=='s':
dfM_aux=dfM.query('NP > NS') dfM_aux=dfM.query('NP > NS')
used_labels=labelsShrink used_labels=labelsShrink
name_fig="Shrink" name_fig="Shrink"
handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch] handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergePthMult_patch]
elif used_direction=='e': elif used_direction=='e':
dfM_aux=dfM.query('NP < NS') dfM_aux=dfM.query('NP < NS')
used_labels=labelsExpand used_labels=labelsExpand
name_fig="Expand" name_fig="Expand"
handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch] handles=[OrSing_patch,OrPthMult_patch,OrPthSing_patch,MergeMult_patch,MergeSing_patch,MergePthMult_patch,MergePthSing_patch]
# < Expand # < Expand
# > Shrink # > Shrink
   
dfM_aux = dfM_aux.copy() dfM_aux = dfM_aux.copy()
#dfM_aux['NTotal'] = dfM_aux['NP'] + dfM_aux['NS'] #dfM_aux['NTotal'] = dfM_aux['NP'] + dfM_aux['NS']
dfM_aux['NTotal'] = dfM_aux['NS'] dfM_aux['NTotal'] = dfM_aux['NS']
   
#x = np.arange(len(used_labels)) #x = np.arange(len(used_labels))
for cst_aux in [0,1,2,3]: for cst_aux in [0,1,2,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
f=plt.figure(figsize=(20, 12)) f=plt.figure(figsize=(20, 12))
ax=f.add_subplot(111) ax=f.add_subplot(111)
   
#sns.boxplot(y=test_parameter, x="NS", hue="NP", data = dfM_aux[(dfM_aux.Cst == cst_aux)][(dfM_aux.Css == css_aux)], orient="v", ax=ax) #sns.boxplot(y=test_parameter, x="NS", hue="NP", data = dfM_aux[(dfM_aux.Cst == cst_aux)][(dfM_aux.Css == css_aux)], orient="v", ax=ax)
sns.boxplot(y=test_parameter, x="NTotal", data = dfM_aux[(dfM_aux.Cst == cst_aux)][(dfM_aux.Css == css_aux)], orient="v", ax=ax) sns.boxplot(y=test_parameter, x="NTotal", data = dfM_aux[(dfM_aux.Cst == cst_aux)][(dfM_aux.Css == css_aux)], orient="v", ax=ax)
   
# Anyade en el plot el numero de iteraciones - Por hacer TODO # Anyade en el plot el numero de iteraciones - Por hacer TODO
# https://stackoverflow.com/questions/45475962/labeling-boxplot-with-median-values # https://stackoverflow.com/questions/45475962/labeling-boxplot-with-median-values
#medians_aux = dfM[(dfM.Cst == cst_aux)][(dfM.Css == css_aux)].groupby(['NS','NP'])['TC'].median() #medians_aux = dfM[(dfM.Cst == cst_aux)][(dfM.Css == css_aux)].groupby(['NS','NP'])['TC'].median()
#m1 = dfM[(dfM.Cst == cst_aux)][(dfM.Css == css_aux)].groupby(['NS','NP'])['TC'].median().values #m1 = dfM[(dfM.Cst == cst_aux)][(dfM.Css == css_aux)].groupby(['NS','NP'])['TC'].median().values
#mL1 = [str(np.ceil(s)) for s in m1] #mL1 = [str(np.ceil(s)) for s in m1]
   
#ind = 0 #ind = 0
#for tick in range(len(ax.get_xticklabels())): #for tick in range(len(ax.get_xticklabels())):
# ax.text(tick-.2, m1[ind+1]+1, mL1[ind+1], horizontalalignment='center', color='w', weight='semibold') # ax.text(tick-.2, m1[ind+1]+1, mL1[ind+1], horizontalalignment='center', color='w', weight='semibold')
# ax.text(tick+.2, m1[ind]+1, mL1[ind], horizontalalignment='center', color='w', weight='semibold') # ax.text(tick+.2, m1[ind]+1, mL1[ind], horizontalalignment='center', color='w', weight='semibold')
# ind += 2 # ind += 2
   
ax.set_ylabel("Time TC(s)", fontsize=20) ax.set_ylabel("Time TC(s)", fontsize=20)
ax.set_xlabel("NC", fontsize=20) ax.set_xlabel("NC", fontsize=20)
plt.legend(loc='upper left', fontsize=21, title = "NP") plt.legend(loc='upper left', fontsize=21, title = "NP")
ax.tick_params(axis='both', which='major', labelsize=24) ax.tick_params(axis='both', which='major', labelsize=24)
ax.tick_params(axis='both', which='minor', labelsize=22) ax.tick_params(axis='both', which='minor', labelsize=22)
   
ax.axvline((.5), color='black') ax.axvline((.5), color='black')
ax.axvline((1.5), color='black') ax.axvline((1.5), color='black')
ax.axvline((2.5), color='black') ax.axvline((2.5), color='black')
ax.axvline((3.5), color='black') ax.axvline((3.5), color='black')
ax.axvline((4.5), color='black') ax.axvline((4.5), color='black')
   
f.tight_layout() f.tight_layout()
f.savefig("Images/Spawn/Boxplot_"+name_fig+"_"+test_parameter+"_"+labelsMethods[cst_aux*2 + css_aux]+".png", format="png") f.savefig("Images/Spawn/Boxplot_"+name_fig+"_"+test_parameter+"_"+labelsMethods[cst_aux*2 + css_aux]+".png", format="png")
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
used_direction='e' used_direction='e'
test_parameter='alpha' #Valores son "alpha" o "omega" test_parameter='alpha' #Valores son "alpha" o "omega"
   
if test_parameter == 'alpha': if test_parameter == 'alpha':
name_fig="Alpha_" name_fig="Alpha_"
real_parameter='Alpha_A' real_parameter='Alpha_A'
elif test_parameter == 'omega': elif test_parameter == 'omega':
name_fig="Omega_" name_fig="Omega_"
real_parameter='Omega_A' real_parameter='Omega_A'
   
df_aux=grouped_aggM df_aux=grouped_aggM
if used_direction=='s': if used_direction=='s':
df_aux=df_aux.query('NP > NS') df_aux=df_aux.query('NP > NS')
used_labels=labelsShrinkOrdered used_labels=labelsShrinkOrdered
name_fig= name_fig+"Shrink" name_fig= name_fig+"Shrink"
elif used_direction=='e': elif used_direction=='e':
df_aux=df_aux.query('NP < NS') df_aux=df_aux.query('NP < NS')
used_labels=labelsExpand used_labels=labelsExpand
name_fig= name_fig+"Expand" name_fig= name_fig+"Expand"
elif used_direction=='a': elif used_direction=='a':
df_aux=df_aux df_aux=df_aux
used_labels=labels used_labels=labels
name_fig= name_fig+"All" name_fig= name_fig+"All"
   
x = np.arange(len(used_labels)) x = np.arange(len(used_labels))
   
f=plt.figure(figsize=(22, 14)) f=plt.figure(figsize=(22, 14))
ax=f.add_subplot(111) ax=f.add_subplot(111)
ax.set_xlabel("(NP,NC)", fontsize=36) ax.set_xlabel("(NP,NC)", fontsize=36)
ax.set_ylabel(test_parameter.capitalize(), fontsize=36) ax.set_ylabel(test_parameter.capitalize(), fontsize=36)
plt.xticks(x, used_labels,rotation=90) plt.xticks(x, used_labels,rotation=90)
ax.tick_params(axis='both', which='major', labelsize=36) ax.tick_params(axis='both', which='major', labelsize=36)
ax.tick_params(axis='both', which='minor', labelsize=36) ax.tick_params(axis='both', which='minor', labelsize=36)
   
for cst_aux in [1,3]: for cst_aux in [1,3]:
df_aux2 = df_aux.query('Cst == @cst_aux') df_aux2 = df_aux.query('Cst == @cst_aux')
for css_aux in [0,1]: for css_aux in [0,1]:
if cst_aux == 3 and css_aux == 1 and used_direction == 's': if cst_aux == 3 and css_aux == 1 and used_direction == 's':
continue continue
array_aux = df_aux2.query('Css == @css_aux') array_aux = df_aux2.query('Css == @css_aux')
if used_direction=='s': if used_direction=='s':
array_aux = array_aux.sort_values(by=['NS']) array_aux = array_aux.sort_values(by=['NS'])
array_aux = array_aux[real_parameter].values array_aux = array_aux[real_parameter].values
style_aux = cst_aux*2 + css_aux style_aux = cst_aux*2 + css_aux
ax.plot(x, array_aux, color=colors_spawn[style_aux], linestyle=linestyle_spawn[style_aux%4], \ ax.plot(x, array_aux, color=colors_spawn[style_aux], linestyle=linestyle_spawn[style_aux%4], \
marker=markers_spawn[style_aux], markersize=18, label=labelsMethods[style_aux]) marker=markers_spawn[style_aux], markersize=18, label=labelsMethods[style_aux])
   
ax.set_ylim(0,3.2) ax.set_ylim(0,3.2)
plt.legend(loc='best', fontsize=30,ncol=2,framealpha=1) plt.legend(loc='best', fontsize=30,ncol=2,framealpha=1)
   
f.tight_layout() f.tight_layout()
f.savefig("Images/Spawn/LinePlot_"+name_fig+".png", format="png") f.savefig("Images/Spawn/LinePlot_"+name_fig+".png", format="png")
``` ```
   
%%%% Output: display_data %%%% Output: display_data
   
[Hidden Image Output] [Hidden Image Output]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
used_direction='s' used_direction='s'
test_parameter='alpha' #Valores son "alpha" o "omega" test_parameter='alpha' #Valores son "alpha" o "omega"
   
if used_direction=='s': if used_direction=='s':
df_aux=grouped_aggM.query('NP > NS') df_aux=grouped_aggM.query('NP > NS')
used_labels=labelsShrink used_labels=labelsShrink
name_fig="Shrink" name_fig="Shrink"
np_aux = [10, 20,20, 40,40,40, 80,80,80,80, 120,120,120,120,120] np_aux = [10, 20,20, 40,40,40, 80,80,80,80, 120,120,120,120,120]
nc_aux = [1, 1,10, 1,10,20, 1,10,20,40, 1,10,20,40,80] nc_aux = [1, 1,10, 1,10,20, 1,10,20,40, 1,10,20,40,80]
elif used_direction=='e': elif used_direction=='e':
df_aux=grouped_aggM.query('NP < NS') df_aux=grouped_aggM.query('NP < NS')
used_labels=labelsExpand used_labels=labelsExpand
name_fig="Expand" name_fig="Expand"
np_aux = [1,1,1,1,1, 10,10,10,10, 20,20,20, 40,40, 80 ] np_aux = [1,1,1,1,1, 10,10,10,10, 20,20,20, 40,40, 80 ]
nc_aux = [10,20,40,80,120, 20,40,80,120, 40,80,120, 80,120, 120] nc_aux = [10,20,40,80,120, 20,40,80,120, 40,80,120, 80,120, 120]
elif used_direction=='a': elif used_direction=='a':
df_aux=grouped_aggM df_aux=grouped_aggM
used_labels=labels used_labels=labels
name_fig="All" name_fig="All"
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] 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]
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] 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]
   
x = np.arange(len(used_labels)) x = np.arange(len(used_labels))
handles = [] handles = []
   
f=plt.figure(figsize=(20, 12)) f=plt.figure(figsize=(20, 12))
#ax=f.add_subplot(111) #ax=f.add_subplot(111)
ax = plt.axes(projection='3d') ax = plt.axes(projection='3d')
ax.azim = -60 ax.azim = -60
ax.dist = 10 ax.dist = 10
ax.elev = 10 ax.elev = 10
ax.set_xlabel("NP", fontsize=20) ax.set_xlabel("NP", fontsize=20)
ax.set_ylabel("NC", fontsize=20) ax.set_ylabel("NC", fontsize=20)
ax.set_zlabel("Alpha", fontsize=20) ax.set_zlabel("Alpha", fontsize=20)
ax.tick_params(axis='both', which='major', labelsize=24) ax.tick_params(axis='both', which='major', labelsize=24)
ax.tick_params(axis='both', which='minor', labelsize=22) ax.tick_params(axis='both', which='minor', labelsize=22)
   
for cst_aux in [1,3]: for cst_aux in [1,3]:
df_aux2 = df_aux.query('Cst == @cst_aux') df_aux2 = df_aux.query('Cst == @cst_aux')
for css_aux in [0,1]: for css_aux in [0,1]:
array_aux = df_aux2.query('Css == @css_aux')['alpha'].values array_aux = df_aux2.query('Css == @css_aux')['alpha'].values
ax.plot3D(np_aux, nc_aux, array_aux, colors_spawn[cst_aux*2 + css_aux]) ax.plot3D(np_aux, nc_aux, array_aux, colors_spawn[cst_aux*2 + css_aux])
   
handles.append(handles_spawn[cst_aux*2 + css_aux]) handles.append(handles_spawn[cst_aux*2 + css_aux])
   
#ax.set_zlim(0,4) #ax.set_zlim(0,4)
plt.legend(handles=handles, loc='best', fontsize=20,ncol=2,framealpha=1) plt.legend(handles=handles, loc='best', fontsize=20,ncol=2,framealpha=1)
   
f.tight_layout() f.tight_layout()
f.savefig("Images/Spawn/3dPlot_"+name_fig+'_'+test_parameter+".png", format="png") f.savefig("Images/Spawn/3dPlot_"+name_fig+'_'+test_parameter+".png", format="png")
``` ```
   
%%%% Output: display_data %%%% Output: display_data
   
[Hidden Image Output] [Hidden Image Output]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def check_normality(df, tipo): def check_normality(df, tipo):
normality=[True] * (len(processes) * (len(processes)-1)) normality=[True] * (len(processes) * (len(processes)-1))
total=0 total=0
i=-1 i=-1
#Comprobar para cada configuración si se sigue una distribución normal/gaussiana #Comprobar para cada configuración si se sigue una distribución normal/gaussiana
for np_aux in processes: for np_aux in processes:
for ns_aux in processes: for ns_aux in processes:
if np_aux != ns_aux: if np_aux != ns_aux:
i+=1 i+=1
for cst_aux in [0,1,2,3]: for cst_aux in [0,1,2,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
df_aux = df.query('NP == @np_aux and NS == @ns_aux and Cst == @cst_aux and Css == @css_aux') df_aux = df.query('NP == @np_aux and NS == @ns_aux and Cst == @cst_aux and Css == @css_aux')
dataList = list(df_aux[tipo]) dataList = list(df_aux[tipo])
st,p = stats.shapiro(dataList) # Tendrían que ser al menos 20 datos y menos de 50 st,p = stats.shapiro(dataList) # Tendrían que ser al menos 20 datos y menos de 50
if p < p_value: if p < p_value:
normality[i]=False normality[i]=False
total+=1 total+=1
   
   
print("Se sigue una distribución guassiana: " + str(normality) + "\nUn total de: " + str(total) + " no siguen una gaussiana") print("Se sigue una distribución guassiana: " + str(normality) + "\nUn total de: " + str(total) + " no siguen una gaussiana")
return normality return normality
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def compute_global_stat_difference(dataLists, parametric): def compute_global_stat_difference(dataLists, parametric):
if parametric: if parametric:
st,p=stats.f_oneway(dataLists[0],dataLists[1],dataLists[2],dataLists[3],dataLists[4],dataLists[5],dataLists[6],dataLists[7]) st,p=stats.f_oneway(dataLists[0],dataLists[1],dataLists[2],dataLists[3],dataLists[4],dataLists[5],dataLists[6],dataLists[7])
else: else:
st,p=stats.kruskal(dataLists[0],dataLists[1],dataLists[2],dataLists[3],dataLists[4],dataLists[5],dataLists[6],dataLists[7]) st,p=stats.kruskal(dataLists[0],dataLists[1],dataLists[2],dataLists[3],dataLists[4],dataLists[5],dataLists[6],dataLists[7])
if p > p_value: # Si son iguales, no hay que hacer nada más if p > p_value: # Si son iguales, no hay que hacer nada más
return False return False
return True return True
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def compute_global_posthoc(dataLists, parametric): def compute_global_posthoc(dataLists, parametric):
data_stats=[] data_stats=[]
ini=0 ini=0
end=len(labelsMethods) end=len(labelsMethods)
if parametric: if parametric:
df_aux = sp.posthoc_ttest(dataLists) df_aux = sp.posthoc_ttest(dataLists)
df_Res = df_aux.copy() df_Res = df_aux.copy()
for i in range(ini,end): for i in range(ini,end):
data_stats.append(np.mean(dataLists[i])) data_stats.append(np.mean(dataLists[i]))
for j in range(ini,end): for j in range(ini,end):
if df_Res.iat[i,j] < p_value: # Medias diferentes if df_Res.iat[i,j] < p_value: # Medias diferentes
df_Res.iat[i, j] = True df_Res.iat[i, j] = True
else: else:
df_Res.iat[i, j] = False df_Res.iat[i, j] = False
else: else:
df_aux = sp.posthoc_conover(dataLists) df_aux = sp.posthoc_conover(dataLists)
df_Res = df_aux.copy() df_Res = df_aux.copy()
for i in range(ini,end): for i in range(ini,end):
data_stats.append(np.median(dataLists[i])) data_stats.append(np.median(dataLists[i]))
for j in range(ini,end): for j in range(ini,end):
if df_Res.iat[i,j] < p_value: # Medianas diferentes if df_Res.iat[i,j] < p_value: # Medianas diferentes
df_Res.iat[i, j] = True df_Res.iat[i, j] = True
else: else:
df_Res.iat[i, j] = False df_Res.iat[i, j] = False
#print(df_Res) #print(df_Res)
#print(df_aux) #print(df_aux)
#print(data_stats) #print(data_stats)
return df_Res, data_stats return df_Res, data_stats
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
# Aquellos grupos que tengán valores por encima del límite no se considerarán # Aquellos grupos que tengán valores por encima del límite no se considerarán
# Con sumar a si mismos su valor actual estarán fuera # Con sumar a si mismos su valor actual estarán fuera
def check_groups_boundaries(data_stats, np_aux, ns_aux, tc_boundary): def check_groups_boundaries(data_stats, np_aux, ns_aux, tc_boundary):
index_aux = 0 index_aux = 0
for cst_aux in [0,2]: # Primero los grupos síncronos for cst_aux in [0,2]: # Primero los grupos síncronos
for css_aux in [0,1]: for css_aux in [0,1]:
if cst_aux == 2 and css_aux == 1 and np_aux > ns_aux: # Arreglo para coger bien el tiempo en Merge Single Shrink if cst_aux == 2 and css_aux == 1 and np_aux > ns_aux: # Arreglo para coger bien el tiempo en Merge Single Shrink
index_aux = 1 index_aux = 1
tc_val = grouped_aggM.loc[('2,2',0, cst_aux, css_aux - index_aux, np_aux,ns_aux), 'TC_A'] tc_val = grouped_aggM.loc[('2,2',0, cst_aux, css_aux - index_aux, np_aux,ns_aux), 'TC_A']
if tc_val > tc_boundary: if tc_val > tc_boundary:
data_stats[cst_aux*2 + css_aux]+=data_stats[cst_aux*2 + css_aux] data_stats[cst_aux*2 + css_aux]+=data_stats[cst_aux*2 + css_aux]
index_aux = 0 index_aux = 0
for cst_aux in [1,3]: # Segundo se comprueban los asíncronos for cst_aux in [1,3]: # Segundo se comprueban los asíncronos
for css_aux in [0,1]: for css_aux in [0,1]:
if cst_aux == 3 and css_aux == 1 and np_aux > ns_aux: # Arreglo para coger bien el tiempo en Merge Single Shrink if cst_aux == 3 and css_aux == 1 and np_aux > ns_aux: # Arreglo para coger bien el tiempo en Merge Single Shrink
index_aux = 1 index_aux = 1
tc_val = grouped_aggM.loc[('2,2',0, cst_aux, css_aux - index_aux, np_aux,ns_aux), 'TH'] tc_val = grouped_aggM.loc[('2,2',0, cst_aux, css_aux - index_aux, np_aux,ns_aux), 'TH']
if tc_val > tc_boundary: if tc_val > tc_boundary:
data_stats[cst_aux*2 + css_aux]+=data_stats[cst_aux*2 + css_aux] data_stats[cst_aux*2 + css_aux]+=data_stats[cst_aux*2 + css_aux]
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def get_stat_differences(df_Res, data_stats, np_aux, ns_aux, shrink, parametric): def get_stat_differences(df_Res, data_stats, np_aux, ns_aux, shrink, parametric):
best = 0 best = 0
otherBest=[] otherBest=[]
   
# TODO Descomentar tras anyadir RMS perspective en results_with_st # TODO Descomentar tras anyadir RMS perspective en results_with_st
#if rms_boundary != 0: # Si se usa perspectiva de RMS, se desconsideran valores muy altos #if rms_boundary != 0: # Si se usa perspectiva de RMS, se desconsideran valores muy altos
# check_groups_boundaries(data_stats, np_aux, ns_aux, tc_boundary) # check_groups_boundaries(data_stats, np_aux, ns_aux, tc_boundary)
   
indexes = np.argsort(data_stats) indexes = np.argsort(data_stats)
best = -1 best = -1
i = 0 i = 0
while best == -1: while best == -1:
index = indexes[i] index = indexes[i]
if not (shrink and (index == 5 or index == 7)): # Las opciones Merge single(5) y Merge single - Pthreads(7) no se utilizan al reducir if not (shrink and (index == 5 or index == 7)): # Las opciones Merge single(5) y Merge single - Pthreads(7) no se utilizan al reducir
#if rms_boundary == 0 or data_stats[index] <= tc_boundary: #if rms_boundary == 0 or data_stats[index] <= tc_boundary:
best = index best = index
i+=1 i+=1
otherBest=[] otherBest=[]
for index in range(len(labelsMethods)): # Para cada metodo exceptuando best for index in range(len(labelsMethods)): # Para cada metodo exceptuando best
if not (shrink and (index == 5 or index == 7)): # Las opciones Merge single(5) y Merge single - Pthreads(7) no se utilizan al reducir if not (shrink and (index == 5 or index == 7)): # Las opciones Merge single(5) y Merge single - Pthreads(7) no se utilizan al reducir
if index != best and not df_Res.iat[best,index]: #Medias/Medianas iguales if index != best and not df_Res.iat[best,index]: #Medias/Medianas iguales
#if data_stats[index] <= tc_boundary: #if data_stats[index] <= tc_boundary:
otherBest.append(index) otherBest.append(index)
stringV="" stringV=""
for i in otherBest: for i in otherBest:
stringV+=labelsMethods[i]+", " stringV+=labelsMethods[i]+", "
print("Redimensión " + str(np_aux) + "/" + str(ns_aux) +" "+ str(parametric)+" Mejores: " + labelsMethods[best]+", " + stringV) print("Redimensión " + str(np_aux) + "/" + str(ns_aux) +" "+ str(parametric)+" Mejores: " + labelsMethods[best]+", " + stringV)
otherBest.insert(0,best) otherBest.insert(0,best)
   
return otherBest return otherBest
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def get_perc_differences(dataLists, np_aux, ns_aux, shrink, rms_boundary, tc_boundary): def get_perc_differences(dataLists, np_aux, ns_aux, shrink, rms_boundary, tc_boundary):
data_stats = [] data_stats = []
ini=0 ini=0
end=len(labelsMethods) end=len(labelsMethods)
for i in range(ini,end): for i in range(ini,end):
data_stats.append(np.median(dataLists[i])) data_stats.append(np.median(dataLists[i]))
   
if rms_boundary != 0: # Si se usa perspectiva de RMS, se desconsideran valores muy altos if rms_boundary != 0: # Si se usa perspectiva de RMS, se desconsideran valores muy altos
check_groups_boundaries(data_stats, np_aux, ns_aux, tc_boundary) check_groups_boundaries(data_stats, np_aux, ns_aux, tc_boundary)
indexes = np.argsort(data_stats) indexes = np.argsort(data_stats)
   
best = -1 best = -1
bestMax = -1 bestMax = -1
otherBest=[] otherBest=[]
for index in indexes: # Para cada metodo -- Empezando por el más bajo en media/mediana for index in indexes: # Para cada metodo -- Empezando por el más bajo en media/mediana
if shrink and (index == 5 or index == 7): # Las opciones Merge single(5) y Merge single - Pthreads(7) no se utilizan al reducir if shrink and (index == 5 or index == 7): # Las opciones Merge single(5) y Merge single - Pthreads(7) no se utilizan al reducir
continue continue
   
if best == -1: if best == -1:
best = index best = index
bestMax = data_stats[best] * 0.05 + data_stats[best] bestMax = data_stats[best] * 0.05 + data_stats[best]
elif data_stats[index] <= bestMax: # Medias/Medianas diferentes && Media/Medianas i < Media/Mediana best elif data_stats[index] <= bestMax: # Medias/Medianas diferentes && Media/Medianas i < Media/Mediana best
otherBest.append(index) otherBest.append(index)
   
   
stringV="" stringV=""
for i in otherBest: for i in otherBest:
stringV+=labelsMethods[i]+", " stringV+=labelsMethods[i]+", "
print("Redimensión " + str(np_aux) + "/" + str(ns_aux)+" Mejores: " + labelsMethods[best]+", " + stringV) print("Redimensión " + str(np_aux) + "/" + str(ns_aux)+" Mejores: " + labelsMethods[best]+", " + stringV)
otherBest.insert(0,best) otherBest.insert(0,best)
   
return otherBest return otherBest
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
#Obtiene #Obtiene
def check_groups_stats(dataLists, np_aux, ns_aux, shrink, parametric): def check_groups_stats(dataLists, np_aux, ns_aux, shrink, parametric):
global_difference=compute_global_stat_difference(dataLists, parametric) global_difference=compute_global_stat_difference(dataLists, parametric)
if not global_difference: if not global_difference:
print("Configuración: " + str(np_aux) + "/" + str(ns_aux) + " tiene valores iguales") print("Configuración: " + str(np_aux) + "/" + str(ns_aux) + " tiene valores iguales")
return return
   
df_Res,data_stats=compute_global_posthoc(dataLists,parametric) df_Res,data_stats=compute_global_posthoc(dataLists,parametric)
return get_stat_differences(df_Res, data_stats, np_aux, ns_aux, shrink, parametric) return get_stat_differences(df_Res, data_stats, np_aux, ns_aux, shrink, parametric)
   
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def results_with_st(tipo, data_aux): def results_with_st(tipo, data_aux):
normality=check_normality(data_aux,tipo) normality=check_normality(data_aux,tipo)
if False in normality: if False in normality:
normality = False normality = False
else: else:
normality = True normality = True
   
   
results = [] results = []
shrink = False shrink = False
for np_aux in processes: for np_aux in processes:
for ns_aux in processes: for ns_aux in processes:
if np_aux != ns_aux: if np_aux != ns_aux:
dataSet = data_aux.query('NP == @np_aux and NS == @ns_aux') dataSet = data_aux.query('NP == @np_aux and NS == @ns_aux')
dataLists=[] dataLists=[]
if np_aux > ns_aux: if np_aux > ns_aux:
shrink = True shrink = True
else: else:
shrink = False shrink = False
#normality=True #normality=True
for cst_aux in [0,1,2,3]: for cst_aux in [0,1,2,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
dataSet_aux = dataSet.query('Cst == @cst_aux and Css == @css_aux') dataSet_aux = dataSet.query('Cst == @cst_aux and Css == @css_aux')
lista_aux = list(dataSet_aux[tipo]) lista_aux = list(dataSet_aux[tipo])
dataLists.append(lista_aux) dataLists.append(lista_aux)
#Si permito el shaphiro, acabare comparando manzanas y naranjas #Si permito el shaphiro, acabare comparando manzanas y naranjas
# si hay distribuciones normales y no normales # si hay distribuciones normales y no normales
#st,p = stats.shapiro(lista_aux) # Tendrían que ser al menos 20 datos y menos de 50 #st,p = stats.shapiro(lista_aux) # Tendrían que ser al menos 20 datos y menos de 50
#if p < p_value: #if p < p_value:
#normality=False #normality=False
   
aux_data = check_groups_stats(dataLists, np_aux, ns_aux, shrink, normality) aux_data = check_groups_stats(dataLists, np_aux, ns_aux, shrink, normality)
results.append(aux_data) results.append(aux_data)
return results return results
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
def results_with_perc(tipo, data_aux, rms_boundary=0): def results_with_perc(tipo, data_aux, rms_boundary=0):
results = [] results = []
shrink = False shrink = False
for np_aux in processes: for np_aux in processes:
for ns_aux in processes: for ns_aux in processes:
if np_aux != ns_aux: if np_aux != ns_aux:
dataSet = data_aux.query('NP == @np_aux and NS == @ns_aux') dataSet = data_aux.query('NP == @np_aux and NS == @ns_aux')
dataLists=[] dataLists=[]
if np_aux > ns_aux: if np_aux > ns_aux:
shrink = True shrink = True
else: else:
shrink = False shrink = False
   
tc_boundary = dfM.query('NP == @np_aux and NS == @ns_aux')['TC'].max() tc_boundary = dfM.query('NP == @np_aux and NS == @ns_aux')['TC'].max()
if rms_boundary == 0: if rms_boundary == 0:
for cst_aux in [0,1,2,3]: for cst_aux in [0,1,2,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
dataSet_aux = dataSet.query('Cst == @cst_aux and Css == @css_aux') dataSet_aux = dataSet.query('Cst == @cst_aux and Css == @css_aux')
lista_aux = list(dataSet_aux[tipo]) lista_aux = list(dataSet_aux[tipo])
dataLists.append(lista_aux) dataLists.append(lista_aux)
else: else:
boundaries = [] boundaries = []
for cst_aux in [0,1,2,3]: for cst_aux in [0,1,2,3]:
for css_aux in [0,1]: for css_aux in [0,1]:
dataSet_aux = dataSet.query('Cst == @cst_aux and Css == @css_aux') dataSet_aux = dataSet.query('Cst == @cst_aux and Css == @css_aux')
lista_aux = list(dataSet_aux[tipo]) lista_aux = list(dataSet_aux[tipo])
dataLists.append(lista_aux) dataLists.append(lista_aux)
   
if cst_aux == 0 or cst_aux == 2: if cst_aux == 0 or cst_aux == 2:
if cst_aux == 2 and css_aux == 1 and (np_aux > ns_aux): if cst_aux == 2 and css_aux == 1 and (np_aux > ns_aux):
new_boundary = tc_boundary new_boundary = tc_boundary
else: else:
new_boundary = grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux), 'TC_A'] new_boundary = grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux), 'TC_A']
else: else:
if cst_aux == 3 and css_aux == 1 and (np_aux > ns_aux): if cst_aux == 3 and css_aux == 1 and (np_aux > ns_aux):
new_boundary = tc_boundary new_boundary = tc_boundary
else: else:
new_boundary = grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux), 'TH'] new_boundary = grouped_aggM.loc[('2,2',0, cst_aux, css_aux, np_aux,ns_aux), 'TH']
boundaries.append(new_boundary) boundaries.append(new_boundary)
tc_boundary = min(boundaries) tc_boundary = min(boundaries)
tc_boundary = tc_boundary + tc_boundary*rms_boundary tc_boundary = tc_boundary + tc_boundary*rms_boundary
   
aux_data = get_perc_differences(dataLists, np_aux, ns_aux, shrink, rms_boundary, tc_boundary) aux_data = get_perc_differences(dataLists, np_aux, ns_aux, shrink, rms_boundary, tc_boundary)
results.append(aux_data) results.append(aux_data)
return results return results
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
checked_type='tc' checked_type='tc'
use_perc = False use_perc = False
rms_boundary=0 # Poner a 0 para perspectiva de app. Valor >0 y <1 para perspectiva de RMS rms_boundary=0 # Poner a 0 para perspectiva de app. Valor >0 y <1 para perspectiva de RMS
if checked_type=='te': if checked_type=='te':
tipo="TE" tipo="TE"
data_aux=dfG data_aux=dfG
elif checked_type=='tc': elif checked_type=='tc':
tipo="TC" tipo="TC"
data_aux=dfM data_aux=dfM
   
if use_perc: if use_perc:
results = results_with_perc(tipo, data_aux, rms_boundary) results = results_with_perc(tipo, data_aux, rms_boundary)
else: else:
results = results_with_st(tipo, data_aux) results = results_with_st(tipo, data_aux)
   
print(results) print(results)
``` ```
   
%%%% Output: stream
Se sigue una distribución guassiana: [False, True, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Un total de: 107 no siguen una gaussiana
1 2 3 4 5 6 7 8
1 False False True True True True True False
2 False False True True True True True False
3 True True False False True True True True
4 True True False False True True True True
5 True True True True False False True True
6 True True True True False False False True
7 True True True True True False False False
8 False False True True True True False False
Redimensión 1/10 False Mejores: Merge single, Merge, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 1/20 False Mejores: Merge single, Merge,
1 2 3 4 5 6 7 8
1 False True False True False False False True
2 True False True False True True True False
3 False True False True True False False False
4 True False True False True True True False
5 False True True True False False False True
6 False True False True False False False True
7 False True False True False False False True
8 True False False False True True True False
Redimensión 1/40 False Mejores: Merge, Baseline, Merge single, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True False False False True
2 True False True True True True True False
3 True True False True True True True True
4 True True True False True True True False
5 False True True True False False False True
6 False True True True False False False True
7 False True True True False False False True
8 True False True False True True True False
Redimensión 1/80 False Mejores: Baseline, Merge, Merge single, Merge - Asynchronous,
Configuración: 1/120 tiene valores iguales
1 2 3 4 5 6 7 8
1 False False True True True True True False
2 False False True True True True True False
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 False False True True True True True False
Redimensión 10/1 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True False True True True True True
2 True False True True True True True True
3 False True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 10/20 False Mejores: Merge single, Merge,
1 2 3 4 5 6 7 8
1 False True False True True True True True
2 True False True True True True True True
3 False True False True True True True True
4 True True True False True True True True
5 True True True True False True True True
6 True True True True True False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 10/40 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True False True True True True False
2 True False False True True True True True
3 False False False True True True True True
4 True True True False True True True True
5 True True True True False True False True
6 True True True True True False False True
7 True True True True False False False True
8 False True True True True True True False
Redimensión 10/80 False Mejores: Merge single, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True False True True True True True
2 True False True True True True True False
3 False True False True True True True False
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True False False True True True True False
Redimensión 10/120 False Mejores: Merge, Merge single,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 20/1 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False True True True
6 True True True True True False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 20/10 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True False True True True True False
2 True False True True True True True True
3 False True False True True True True False
4 True True True False True True True True
5 True True True True False False False True
6 True True True True False False False True
7 True True True True False False False True
8 False True False True True True True False
Redimensión 20/40 False Mejores: Merge, Merge single, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True False True True True True False
2 True False True True True True True True
3 False True False True True True True False
4 True True True False True True True True
5 True True True True False False False True
6 True True True True False False False True
7 True True True True False False False True
8 False True False True True True True False
Redimensión 20/80 False Mejores: Merge, Merge single, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True False True True True True False
2 True False True True True True True False
3 False True False True True True True False
4 True True True False True True True True
5 True True True True False False False True
6 True True True True False False False True
7 True True True True False False False True
8 False False False True True True True False
Redimensión 20/120 False Mejores: Merge, Merge single, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 40/1 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 40/10 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 40/20 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True False True True True True True
2 True False True True True True True True
3 False True False True True True True True
4 True True True False True True True True
5 True True True True False False False True
6 True True True True False False True True
7 True True True True False True False True
8 True True True True True True True False
Redimensión 40/80 False Mejores: Merge single, Merge,
1 2 3 4 5 6 7 8
1 False True False True True True True False
2 True False True True True True True True
3 False True False True True True True True
4 True True True False True True True True
5 True True True True False True True True
6 True True True True True False False True
7 True True True True True False False True
8 False True True True True True True False
Redimensión 40/120 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False False True True True True False True
2 False False True True True True True False
3 True True False False True True True False
4 True True False False True True True True
5 True True True True False False False True
6 True True True True False False False True
7 False True True True False False False True
8 True False False True True True True False
Redimensión 80/1 False Mejores: Merge, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True True True True False
2 True False False True True True True True
3 True False False True True True True True
4 True True True False True True True True
5 True True True True False False False True
6 True True True True False False False True
7 True True True True False False False False
8 False True True True True True False False
Redimensión 80/10 False Mejores: Merge, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False True True
7 True True True True True True False True
8 True True True True True True True False
Redimensión 80/20 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True False True True True True True
2 True False True True True True True True
3 False True False True True True True True
4 True True True False True True True True
5 True True True True False False False True
6 True True True True False False False True
7 True True True True False False False True
8 True True True True True True True False
Redimensión 80/40 False Mejores: Merge, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False False True
7 True True True True True False False True
8 True True True True True True True False
Redimensión 80/120 False Mejores: Merge, Merge single,
1 2 3 4 5 6 7 8
1 False False True True False False False True
2 False False False True False False False True
3 True False False False True True True False
4 True True False False True True True False
5 False False True True False False False True
6 False False True True False False False True
7 False False True True False False False True
8 True True False False True True True False
Redimensión 120/1 False Mejores: Merge, Baseline, Baseline single, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True True True True False
2 True False False True True True True True
3 True False False True True True True True
4 True True True False True True True True
5 True True True True False False False True
6 True True True True False False False False
7 True True True True False False False False
8 False True True True True False False False
Redimensión 120/10 False Mejores: Merge, Merge - Asynchronous,
1 2 3 4 5 6 7 8
1 False True True True True True True False
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False False True
7 True True True True True False False True
8 False True True True True True True False
Redimensión 120/20 False Mejores: Merge,
1 2 3 4 5 6 7 8
1 False True True True True True True True
2 True False True True True True True True
3 True True False True True True True True
4 True True True False True True True True
5 True True True True False True False False
6 True True True True True False True True
7 True True True True False True False False
8 True True True True False True False False
Redimensión 120/40 False Mejores: Merge - Asynchronous, Merge,
1 2 3 4 5 6 7 8
1 False False False True True True True True
2 False False True True True True True True
3 False True False True True True True True
4 True True True False True True True True
5 True True True True False False True True
6 True True True True False False False True
7 True True True True True False False True
8 True True True True True True True False
Redimensión 120/80 False Mejores: Merge,
[[5, 4, 6], [5, 4], [4, 0, 5, 6], [0, 4, 5, 6], None, [4], [5, 4], [4], [5, 6], [4, 5], [4], [4], [4, 5, 6], [4, 5, 6], [4, 5, 6], [4], [4], [4], [5, 4], [4], [4, 6], [4, 6], [4], [4, 6], [4, 5], [4, 0, 1, 6], [4, 6], [4], [6, 4], [4]]
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
#Lista de indices de mayor a menor de los valores #Lista de indices de mayor a menor de los valores
aux_array = [] aux_array = []
for data in results: for data in results:
aux_array+=data aux_array+=data
unique, counts = np.unique(aux_array, return_counts=True) unique, counts = np.unique(aux_array, return_counts=True)
aux_dict = dict(zip(unique, counts)) aux_dict = dict(zip(unique, counts))
aux_keys=list(aux_dict.keys()) aux_keys=list(aux_dict.keys())
aux_values=list(aux_dict.values()) aux_values=list(aux_dict.values())
aux_ordered_index=list(reversed(list(np.argsort(aux_values)))) aux_ordered_index=list(reversed(list(np.argsort(aux_values))))
   
i=0 i=0
j=0 j=0
used_aux=0 used_aux=0
heatmap=np.zeros((len(processes),len(processes))).astype(int) heatmap=np.zeros((len(processes),len(processes))).astype(int)
   
if use_perc: if use_perc:
for i in range(len(processes)): for i in range(len(processes)):
for j in range(len(processes)): for j in range(len(processes)):
if i==j: if i==j:
heatmap[i][j]=-1 heatmap[i][j]=-1
used_aux+=1 used_aux+=1
else: else:
results_index = i*len(processes) +j-used_aux results_index = i*len(processes) +j-used_aux
heatmap[i][j] = results[results_index][0] heatmap[i][j] = results[results_index][0]
else: else:
for i in range(len(processes)): for i in range(len(processes)):
for j in range(len(processes)): for j in range(len(processes)):
if i==j: if i==j:
heatmap[i][j]=-1 heatmap[i][j]=-1
used_aux+=1 used_aux+=1
else: else:
results_index = i*len(processes) +j-used_aux results_index = i*len(processes) +j-used_aux
for index in aux_ordered_index: for index in aux_ordered_index:
if aux_keys[index] in results[results_index]: if aux_keys[index] in results[results_index]:
heatmap[i][j]=aux_keys[index] heatmap[i][j]=aux_keys[index]
break break
heatmap[len(processes)-1][len(processes)-1]=8 heatmap[len(processes)-1][len(processes)-1]=8
print(heatmap) print(heatmap)
``` ```
   
%%%% Output: stream %%%% Output: stream
   
[[-1 2 7 7 6 2] [[-1 2 7 7 6 2]
[ 2 -1 7 7 6 6] [ 2 -1 7 7 6 6]
[ 4 6 -1 6 6 6] [ 4 6 -1 6 6 6]
[ 4 4 6 -1 6 6] [ 4 4 6 -1 6 6]
[ 6 6 6 6 -1 6] [ 6 6 6 6 -1 6]
[ 6 6 6 6 6 8]] [ 6 6 6 6 6 8]]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
#Adapta results a una cadena asegurando que cada cadena no se sale de su celda #Adapta results a una cadena asegurando que cada cadena no se sale de su celda
results_str = [] results_str = []
max_counts = 1 max_counts = 1
for i in range(len(results)): for i in range(len(results)):
results_str.append(list()) results_str.append(list())
count = len(results[i]) count = len(results[i])
new_data = str(results[i]).replace('[','').replace(']','') new_data = str(results[i]).replace('[','').replace(']','')
remainder = count%3 remainder = count%3
   
if count <= 3: if count <= 3:
results_str[i].append(new_data) results_str[i].append(new_data)
else: else:
if remainder == 0: if remainder == 0:
results_str[i].append(new_data[0:8]) results_str[i].append(new_data[0:8])
results_str[i].append(new_data[9:]) results_str[i].append(new_data[9:])
else: else:
index = 1 + (remainder -1)*3 index = 1 + (remainder -1)*3
results_str[i].append(new_data[0:index+1]) results_str[i].append(new_data[0:index+1])
results_str[i].append(new_data[index+2:]) results_str[i].append(new_data[index+2:])
   
if count > max_counts: if count > max_counts:
if count > 3: if count > 3:
aux_value = results_str[i].pop()[0:1] aux_value = results_str[i].pop()[0:1]
results_str[i][0] = results_str[i][0][0:max_counts*3-2] results_str[i][0] = results_str[i][0][0:max_counts*3-2]
if remainder == 1 and max_counts > 1: if remainder == 1 and max_counts > 1:
results_str[i][0] = results_str[i][0] + ' ' + aux_value results_str[i][0] = results_str[i][0] + ' ' + aux_value
#print(results_str) #print(results_str)
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
#Crea un heatmap teniendo en cuenta los colores anteriores #Crea un heatmap teniendo en cuenta los colores anteriores
f=plt.figure(figsize=(24, 12)) f=plt.figure(figsize=(24, 12))
ax=f.add_subplot(111) ax=f.add_subplot(111)
   
myColors = (colors.to_rgba("white"),colors.to_rgba("green"), colors.to_rgba("springgreen"),colors.to_rgba("blue"),colors.to_rgba("darkblue"), myColors = (colors.to_rgba("white"),colors.to_rgba("green"), colors.to_rgba("springgreen"),colors.to_rgba("blue"),colors.to_rgba("darkblue"),
colors.to_rgba("red"),colors.to_rgba("darkred"),colors.to_rgba("darkgoldenrod"),colors.to_rgba("olive"),colors.to_rgba("white")) colors.to_rgba("red"),colors.to_rgba("darkred"),colors.to_rgba("darkgoldenrod"),colors.to_rgba("olive"),colors.to_rgba("white"))
cmap = LinearSegmentedColormap.from_list('Custom', myColors, len(myColors)) cmap = LinearSegmentedColormap.from_list('Custom', myColors, len(myColors))
   
im = ax.imshow(heatmap,cmap=cmap,interpolation='nearest') im = ax.imshow(heatmap,cmap=cmap,interpolation='nearest')
   
# Loop over data dimensions and create text annotations. # Loop over data dimensions and create text annotations.
used_aux=0 used_aux=0
for i in range(len(processes)): for i in range(len(processes)):
for j in range(len(processes)): for j in range(len(processes)):
if i!=j: if i!=j:
aux_color="white" aux_color="white"
if heatmap[i, j] == 1: # El 1 puede necesitar texto en negro if heatmap[i, j] == 1: # El 1 puede necesitar texto en negro
aux_color="black" aux_color="black"
results_index = i*len(processes) +j-used_aux results_index = i*len(processes) +j-used_aux
if len(results_str[results_index]) == 1: if len(results_str[results_index]) == 1:
text = results_str[results_index][0] text = results_str[results_index][0]
ax.text(j, i, text, ha="center", va="center", color=aux_color, fontsize=36) ax.text(j, i, text, ha="center", va="center", color=aux_color, fontsize=36)
else: else:
add_aux = 0.33 add_aux = 0.33
for line in range(len(results_str[results_index])): for line in range(len(results_str[results_index])):
i_range = i - 0.5 + add_aux i_range = i - 0.5 + add_aux
ax.text(j, i_range, results_str[results_index][line], ax.text(j, i_range, results_str[results_index][line],
ha="center", va="center", color=aux_color, fontsize=36) ha="center", va="center", color=aux_color, fontsize=36)
add_aux+=0.33 add_aux+=0.33
else: else:
used_aux+=1 used_aux+=1
   
ax.set_ylabel("NP", fontsize=36) ax.set_ylabel("NP", fontsize=36)
ax.set_xlabel("NC", fontsize=36) ax.set_xlabel("NC", fontsize=36)
   
ax.set_xticklabels(['']+processes, fontsize=36) ax.set_xticklabels(['']+processes, fontsize=36)
ax.set_yticklabels(['']+processes, fontsize=36) ax.set_yticklabels(['']+processes, fontsize=36)
   
# #
labelsMethods_aux = ['Baseline (0)', 'Baseline single (1)','Baseline - Asynchronous (2)','Baseline single - Asynchronous (3)', labelsMethods_aux = ['Baseline (0)', 'Baseline single (1)','Baseline - Asynchronous (2)','Baseline single - Asynchronous (3)',
'Merge (4)','Merge single (5)','Merge - Asynchronous (6)','Merge single - Asynchronous (7)'] 'Merge (4)','Merge single (5)','Merge - Asynchronous (6)','Merge single - Asynchronous (7)']
colorbar=f.colorbar(im, ax=ax) colorbar=f.colorbar(im, ax=ax)
colorbar.set_ticks([0.35, 1.25, 2.15, 3.05, 3.95, 4.85, 5.75, 6.65]) #TE colorbar.set_ticks([0.35, 1.25, 2.15, 3.05, 3.95, 4.85, 5.75, 6.65]) #TE
#colorbar.set_ticks([-2.55, 0.35, 1.25, 2.15, 3.05, 3.95, 4.85, 5.75, 6.65]) #TC #colorbar.set_ticks([-2.55, 0.35, 1.25, 2.15, 3.05, 3.95, 4.85, 5.75, 6.65]) #TC
colorbar.set_ticklabels(labelsMethods_aux) colorbar.set_ticklabels(labelsMethods_aux)
colorbar.ax.tick_params(labelsize=32) colorbar.ax.tick_params(labelsize=32)
# #
   
f.tight_layout() f.tight_layout()
f.savefig("Images/Spawn/Heatmap_"+tipo+".png", format="png") f.savefig("Images/Spawn/Heatmap_"+tipo+".png", format="png")
``` ```
   
%%%% Output: stream %%%% Output: stream
   
/tmp/ipykernel_8791/2593541567.py:36: UserWarning: FixedFormatter should only be used together with FixedLocator /tmp/ipykernel_8791/2593541567.py:36: UserWarning: FixedFormatter should only be used together with FixedLocator
ax.set_xticklabels(['']+processes, fontsize=36) ax.set_xticklabels(['']+processes, fontsize=36)
/tmp/ipykernel_8791/2593541567.py:37: UserWarning: FixedFormatter should only be used together with FixedLocator /tmp/ipykernel_8791/2593541567.py:37: UserWarning: FixedFormatter should only be used together with FixedLocator
ax.set_yticklabels(['']+processes, fontsize=36) ax.set_yticklabels(['']+processes, fontsize=36)
   
%%%% Output: display_data %%%% Output: display_data
   
[Hidden Image Output] [Hidden Image Output]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
tipo="bcast" tipo="bcast"
if tipo == "bcast": if tipo == "bcast":
#bcast #bcast
x = [0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000001, 0.000001, 0.000000, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000001, 0.000000, 0.000000, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000003, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000018, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000008, 0.000003, 0.000003, 0.000008, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000020, 0.000009, 0.000011, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000011, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000011, 0.000004, 0.000004, 0.000004, 0.000005, 0.000092, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000018, 0.000018, 0.000019, 0.000024, 0.000019, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000019, 0.000018, 0.000018, 0.000018, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000018, 0.000018, 0.000019, 0.000019, 0.000018, 0.000019, 0.000130, 0.000028, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000028, 0.000026, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000026, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000028, 0.000027, 0.000026, 0.000030, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000283, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000107, 0.000107, 0.000108, 0.000107, 0.000106, 0.000107, 0.000106, 0.000106, 0.000108, 0.000107, 0.000106, 0.000106, 0.000106, 0.000107, 0.000107, 0.000107, 0.000107, 0.000107, 0.000110, 0.000107, 0.000107, 0.000107, 0.000108, 0.000106, 0.000107, 0.000106, 0.000106, 0.000107, 0.000107, 0.000106, 0.000107, 0.000107, 0.000106, 0.000107, 0.000107, 0.000106, 0.000106, 0.000106, 0.000107, 0.000106, 0.000106, 0.000107, 0.000106, 0.000106, 0.000106, 0.000107, 0.000107, 0.000107, 0.000107, 0.000107, 0.000106, 0.000106, 0.000107, 0.000107, 0.000107, 0.000110, 0.000107, 0.000107, 0.000107, 0.000106, 0.000106, 0.000107, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000107, 0.000106, 0.000107, 0.000106, 0.000106, 0.000107, 0.000106, 0.000107, 0.000106, 0.000107, 0.000107, 0.000106, 0.000106, 0.000107, 0.000107, 0.000106, 0.000107, 0.000106, 0.000524, 0.000207, 0.000204, 0.000207, 0.000206, 0.000206, 0.000205, 0.000206, 0.000205, 0.000206, 0.000205, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000205, 0.000205, 0.000210, 0.000205, 0.000205, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000206, 0.000205, 0.000206, 0.000206, 0.000205, 0.000205, 0.000205, 0.000205, 0.000208, 0.000205, 0.000207, 0.000211, 0.000206, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000205, 0.000206, 0.000207, 0.000205, 0.000206, 0.000207, 0.000207, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000206, 0.000209, 0.000205, 0.000205, 0.000206, 0.000205, 0.000205, 0.000206, 0.000205, 0.000205, 0.000206, 0.000206, 0.000206, 0.000205, 0.000206, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000210, 0.000204, 0.000206, 0.000206, 0.000206, 0.000205, 0.000205, 0.000205, 0.000206, 0.000205, 0.000206, 0.000205, 0.000206, 0.000206, 0.000205, 0.000207, 0.000205, 0.000207, 0.000206, 0.000209, 0.000205, 0.000205, 0.000206, 0.000205, 0.005969, 0.002010, 0.002004, 0.002009, 0.002005, 0.002008, 0.002003, 0.002006, 0.002007, 0.002007, 0.002003, 0.002008, 0.002003, 0.002009, 0.002004, 0.002009, 0.002003, 0.002008, 0.002005, 0.002007, 0.002003, 0.002008, 0.002005, 0.002008, 0.002005, 0.002005, 0.002003, 0.002007, 0.002002, 0.002007, 0.002003, 0.002007, 0.002004, 0.002006, 0.002002, 0.002007, 0.002003, 0.002006, 0.002004, 0.002005, 0.002002, 0.002004, 0.002002, 0.002005, 0.002002, 0.002005, 0.002002, 0.002007, 0.002003, 0.002007, 0.002002, 0.002009, 0.002002, 0.002005, 0.002004, 0.002008, 0.002003, 0.002007, 0.002003, 0.002003, 0.002003, 0.002010, 0.002003, 0.002005, 0.002000, 0.002007, 0.002002, 0.002009, 0.002001, 0.002006, 0.002002, 0.002006, 0.002001, 0.001998, 0.002001, 0.002010, 0.002002, 0.002003, 0.002000, 0.002007, 0.002004, 0.002008, 0.002001, 0.002004, 0.002005, 0.002006, 0.002001, 0.002007, 0.002002, 0.002009, 0.002001, 0.002005, 0.002003, 0.002008, 0.001999, 0.002004, 0.002002, 0.002005, 0.002003, 0.002006, \ x = [0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000001, 0.000001, 0.000000, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000, 0.000001, 0.000001, 0.000000, 0.000000, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000003, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000018, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000008, 0.000003, 0.000003, 0.000008, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000020, 0.000009, 0.000011, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000011, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000011, 0.000004, 0.000004, 0.000004, 0.000005, 0.000092, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000018, 0.000018, 0.000019, 0.000024, 0.000019, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000018, 0.000019, 0.000018, 0.000018, 0.000018, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000019, 0.000019, 0.000019, 0.000019, 0.000018, 0.000019, 0.000018, 0.000018, 0.000019, 0.000019, 0.000018, 0.000019, 0.000130, 0.000028, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000028, 0.000026, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000026, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000026, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000028, 0.000027, 0.000026, 0.000030, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000026, 0.000026, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000027, 0.000283, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000107, 0.000107, 0.000108, 0.000107, 0.000106, 0.000107, 0.000106, 0.000106, 0.000108, 0.000107, 0.000106, 0.000106, 0.000106, 0.000107, 0.000107, 0.000107, 0.000107, 0.000107, 0.000110, 0.000107, 0.000107, 0.000107, 0.000108, 0.000106, 0.000107, 0.000106, 0.000106, 0.000107, 0.000107, 0.000106, 0.000107, 0.000107, 0.000106, 0.000107, 0.000107, 0.000106, 0.000106, 0.000106, 0.000107, 0.000106, 0.000106, 0.000107, 0.000106, 0.000106, 0.000106, 0.000107, 0.000107, 0.000107, 0.000107, 0.000107, 0.000106, 0.000106, 0.000107, 0.000107, 0.000107, 0.000110, 0.000107, 0.000107, 0.000107, 0.000106, 0.000106, 0.000107, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000106, 0.000107, 0.000106, 0.000107, 0.000106, 0.000106, 0.000107, 0.000106, 0.000107, 0.000106, 0.000107, 0.000107, 0.000106, 0.000106, 0.000107, 0.000107, 0.000106, 0.000107, 0.000106, 0.000524, 0.000207, 0.000204, 0.000207, 0.000206, 0.000206, 0.000205, 0.000206, 0.000205, 0.000206, 0.000205, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000205, 0.000205, 0.000210, 0.000205, 0.000205, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000206, 0.000205, 0.000206, 0.000206, 0.000205, 0.000205, 0.000205, 0.000205, 0.000208, 0.000205, 0.000207, 0.000211, 0.000206, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000205, 0.000206, 0.000207, 0.000205, 0.000206, 0.000207, 0.000207, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000206, 0.000209, 0.000205, 0.000205, 0.000206, 0.000205, 0.000205, 0.000206, 0.000205, 0.000205, 0.000206, 0.000206, 0.000206, 0.000205, 0.000206, 0.000205, 0.000206, 0.000206, 0.000206, 0.000206, 0.000210, 0.000204, 0.000206, 0.000206, 0.000206, 0.000205, 0.000205, 0.000205, 0.000206, 0.000205, 0.000206, 0.000205, 0.000206, 0.000206, 0.000205, 0.000207, 0.000205, 0.000207, 0.000206, 0.000209, 0.000205, 0.000205, 0.000206, 0.000205, 0.005969, 0.002010, 0.002004, 0.002009, 0.002005, 0.002008, 0.002003, 0.002006, 0.002007, 0.002007, 0.002003, 0.002008, 0.002003, 0.002009, 0.002004, 0.002009, 0.002003, 0.002008, 0.002005, 0.002007, 0.002003, 0.002008, 0.002005, 0.002008, 0.002005, 0.002005, 0.002003, 0.002007, 0.002002, 0.002007, 0.002003, 0.002007, 0.002004, 0.002006, 0.002002, 0.002007, 0.002003, 0.002006, 0.002004, 0.002005, 0.002002, 0.002004, 0.002002, 0.002005, 0.002002, 0.002005, 0.002002, 0.002007, 0.002003, 0.002007, 0.002002, 0.002009, 0.002002, 0.002005, 0.002004, 0.002008, 0.002003, 0.002007, 0.002003, 0.002003, 0.002003, 0.002010, 0.002003, 0.002005, 0.002000, 0.002007, 0.002002, 0.002009, 0.002001, 0.002006, 0.002002, 0.002006, 0.002001, 0.001998, 0.002001, 0.002010, 0.002002, 0.002003, 0.002000, 0.002007, 0.002004, 0.002008, 0.002001, 0.002004, 0.002005, 0.002006, 0.002001, 0.002007, 0.002002, 0.002009, 0.002001, 0.002005, 0.002003, 0.002008, 0.001999, 0.002004, 0.002002, 0.002005, 0.002003, 0.002006, \
0.059939, 0.024504, 0.022647, 0.022617, 0.021730, 0.024531, 0.024927, 0.024392, 0.024493, 0.024490, 0.024438, 0.021964, 0.021842, 0.024483, 0.021804, 0.024507, 0.024354, 0.024353, 0.024456, 0.022079, 0.024322, 0.024579, 0.022457, 0.024401, 0.024604, 0.024532, 0.023252, 0.023547, 0.023316, 0.021491, 0.024583, 0.024424, 0.024541, 0.022293, 0.024417, 0.023698, 0.024408, 0.021841, 0.023707, 0.023017, 0.024536, 0.024420, 0.021870, 0.021531, 0.022964, 0.023716, 0.024605, 0.024343, 0.024588, 0.022115, 0.021860, 0.023939, 0.021542, 0.024609, 0.024339, 0.022058, 0.024504, 0.024357, 0.024535, 0.021893, 0.024482, 0.022914, 0.022199, 0.024370, 0.024429, 0.024554, 0.023071, 0.023255, 0.023273, 0.024601, 0.022383, 0.024586, 0.022459, 0.024462, 0.022297, 0.024515, 0.021501, 0.023307, 0.023315, 0.021560, 0.024507, 0.023080, 0.022861, 0.022383, 0.024513, 0.022016, 0.022958, 0.022520, 0.021587, 0.024413, 0.022460, 0.023133, 0.021825, 0.023516, 0.022206, 0.023532, 0.024548, 0.022841, 0.024491, 0.023761] 0.059939, 0.024504, 0.022647, 0.022617, 0.021730, 0.024531, 0.024927, 0.024392, 0.024493, 0.024490, 0.024438, 0.021964, 0.021842, 0.024483, 0.021804, 0.024507, 0.024354, 0.024353, 0.024456, 0.022079, 0.024322, 0.024579, 0.022457, 0.024401, 0.024604, 0.024532, 0.023252, 0.023547, 0.023316, 0.021491, 0.024583, 0.024424, 0.024541, 0.022293, 0.024417, 0.023698, 0.024408, 0.021841, 0.023707, 0.023017, 0.024536, 0.024420, 0.021870, 0.021531, 0.022964, 0.023716, 0.024605, 0.024343, 0.024588, 0.022115, 0.021860, 0.023939, 0.021542, 0.024609, 0.024339, 0.022058, 0.024504, 0.024357, 0.024535, 0.021893, 0.024482, 0.022914, 0.022199, 0.024370, 0.024429, 0.024554, 0.023071, 0.023255, 0.023273, 0.024601, 0.022383, 0.024586, 0.022459, 0.024462, 0.022297, 0.024515, 0.021501, 0.023307, 0.023315, 0.021560, 0.024507, 0.023080, 0.022861, 0.022383, 0.024513, 0.022016, 0.022958, 0.022520, 0.021587, 0.024413, 0.022460, 0.023133, 0.021825, 0.023516, 0.022206, 0.023532, 0.024548, 0.022841, 0.024491, 0.023761]
slope = 4082094463.008053 slope = 4082094463.008053
intercept = 417444.446452 intercept = 417444.446452
elif tipo == "allgather": elif tipo == "allgather":
x = [0.000005, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000009, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000004, 0.000003, 0.000002, 0.000004, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000004, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000004, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000004, 0.000002, 0.000003, 0.000003, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000004, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000004, 0.000003, 0.000004, 0.000004, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000040, 0.000014, 0.000013, 0.000014, 0.000013, 0.000013, 0.000014, 0.000018, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000013, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000153, 0.000026, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000030, 0.000025, 0.000025, 0.000025, 0.000025, 0.000026, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000782, 0.000138, 0.000137, 0.000135, 0.000135, 0.000135, 0.000139, 0.000133, 0.000136, 0.000137, 0.000136, 0.000132, 0.000134, 0.000136, 0.000134, 0.000134, 0.000134, 0.000136, 0.000137, 0.000133, 0.000135, 0.000135, 0.000145, 0.000137, 0.000132, 0.000133, 0.000134, 0.000135, 0.000136, 0.000133, 0.000134, 0.000134, 0.000135, 0.000138, 0.000138, 0.000135, 0.000135, 0.000134, 0.000134, 0.000134, 0.000137, 0.000130, 0.000149, 0.000127, 0.000129, 0.000146, 0.000131, 0.000146, 0.000146, 0.000131, 0.000128, 0.000156, 0.000147, 0.000131, 0.000147, 0.000129, 0.000128, 0.000128, 0.000129, 0.000129, 0.000148, 0.000128, 0.000131, 0.000147, 0.000146, 0.000130, 0.000131, 0.000130, 0.000130, 0.000149, 0.000127, 0.000127, 0.000147, 0.000129, 0.000128, 0.000131, 0.000128, 0.000130, 0.000131, 0.000132, 0.000137, 0.000149, 0.000147, 0.000130, 0.000128, 0.000131, 0.000130, 0.000129, 0.000130, 0.000131, 0.000131, 0.000131, 0.000132, 0.000131, 0.000133, 0.000131, 0.000147, 0.000127, 0.000130, 0.000130, 0.000587, 0.000360, 0.000360, 0.000346, 0.000325, 0.000384, 0.000363, 0.000362, 0.000356, 0.000357, 0.000374, 0.000360, 0.000249, 0.000228, 0.000300, 0.000298, 0.000231, 0.000232, 0.000231, 0.000246, 0.000317, 0.000229, 0.000228, 0.000230, 0.000271, 0.000227, 0.000291, 0.000230, 0.000230, 0.000275, 0.000289, 0.000229, 0.000234, 0.000229, 0.000272, 0.000234, 0.000265, 0.000289, 0.000224, 0.000230, 0.000230, 0.000282, 0.000230, 0.000270, 0.000229, 0.000270, 0.000265, 0.000272, 0.000226, 0.000277, 0.000233, 0.000272, 0.000269, 0.000250, 0.000267, 0.000231, 0.000230, 0.000273, 0.000228, 0.000251, 0.000230, 0.000270, 0.000237, 0.000229, 0.000231, 0.000228, 0.000229, 0.000232, 0.000226, 0.000228, 0.000229, 0.000227, 0.000232, 0.000231, 0.000235, 0.000232, 0.000231, 0.000229, 0.000229, 0.000235, 0.000229, 0.000229, 0.000228, 0.000230, 0.000227, 0.000231, 0.000232, 0.000230, 0.000232, 0.000230, 0.000228, 0.000227, 0.000230, 0.000230, 0.000228, 0.000229, 0.000230, 0.000239, 0.000226, 0.000232, 0.008453, 0.002773, 0.002651, 0.002620, 0.002595, 0.002599, 0.002608, 0.002590, 0.002587, 0.002611, 0.002604, 0.002601, 0.002602, 0.002620, 0.002609, 0.002605, 0.002601, 0.002596, 0.002605, 0.002584, 0.002611, 0.002620, 0.002576, 0.002608, 0.002603, 0.002595, 0.002594, 0.002603, 0.002583, 0.002613, 0.002596, 0.002595, 0.002603, 0.002591, 0.002610, 0.002594, 0.002589, 0.002610, 0.002610, 0.002601, 0.002610, 0.002603, 0.002598, 0.002608, 0.002585, 0.002601, 0.002619, 0.002608, 0.002604, 0.002599, 0.002587, 0.002600, 0.002607, 0.002604, 0.002603, 0.002596, 0.002588, 0.002595, 0.002612, 0.002595, 0.002600, 0.002629, 0.002603, 0.002607, 0.002600, 0.002606, 0.002601, 0.002594, 0.002586, 0.002604, 0.002613, 0.002591, 0.002603, 0.002574, 0.002598, 0.002601, 0.002602, 0.002602, 0.002603, 0.002605, 0.002606, 0.002607, 0.002597, 0.002594, 0.002636, 0.002610, 0.002588, 0.002592, 0.002596, 0.002610, 0.002588, 0.002610, 0.002603, 0.002589, 0.002605, 0.002591, 0.002592, 0.002603, 0.002600, 0.002587, 0.095241, 0.035323, 0.035436, 0.035495, 0.035372, 0.035416, 0.035370, 0.035460, 0.035349, 0.035391, 0.035311, 0.035361, 0.035788, 0.035438, 0.035445, 0.035413, 0.035373, 0.035374, 0.035439, 0.035290, 0.035410, 0.035385, 0.035388, 0.035343, 0.035442, 0.035397, 0.035465, 0.036605, 0.035349, 0.035452, 0.035376, 0.035346, 0.035300, 0.035460, 0.035489, 0.035378, 0.035386, 0.035411, 0.035286, 0.035385, 0.035861, 0.035421, 0.035394, 0.035460, 0.035376, 0.035440, 0.035376, 0.035399, 0.035340, 0.035370, 0.035394, 0.035392, 0.035422, 0.035355, 0.035430, 0.035359, 0.036654, 0.035536, 0.035551, 0.035610, 0.035458, 0.035432, 0.035474, 0.035417, 0.035408, 0.035440, 0.035370, 0.035402, 0.035862, 0.035428, 0.035367, 0.035472, 0.035410, 0.035424, 0.035393, 0.035441, 0.035400, 0.035416, 0.035470, 0.035439, 0.035349, 0.035427, 0.035453, 0.035450, 0.036583, 0.035463, 0.035498, 0.035426, 0.035356, 0.035369, 0.035412, 0.035461, 0.035339, 0.035395, 0.035427, 0.035445, 0.035902, 0.035391, 0.035375, 0.035333] x = [0.000005, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000009, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000004, 0.000003, 0.000002, 0.000004, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000004, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000004, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000003, 0.000003, 0.000004, 0.000002, 0.000003, 0.000003, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000004, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000004, 0.000003, 0.000004, 0.000004, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000040, 0.000014, 0.000013, 0.000014, 0.000013, 0.000013, 0.000014, 0.000018, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000013, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000014, 0.000153, 0.000026, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000030, 0.000025, 0.000025, 0.000025, 0.000025, 0.000026, 0.000025, 0.000025, 0.000025, 0.000025, 0.000025, 0.000782, 0.000138, 0.000137, 0.000135, 0.000135, 0.000135, 0.000139, 0.000133, 0.000136, 0.000137, 0.000136, 0.000132, 0.000134, 0.000136, 0.000134, 0.000134, 0.000134, 0.000136, 0.000137, 0.000133, 0.000135, 0.000135, 0.000145, 0.000137, 0.000132, 0.000133, 0.000134, 0.000135, 0.000136, 0.000133, 0.000134, 0.000134, 0.000135, 0.000138, 0.000138, 0.000135, 0.000135, 0.000134, 0.000134, 0.000134, 0.000137, 0.000130, 0.000149, 0.000127, 0.000129, 0.000146, 0.000131, 0.000146, 0.000146, 0.000131, 0.000128, 0.000156, 0.000147, 0.000131, 0.000147, 0.000129, 0.000128, 0.000128, 0.000129, 0.000129, 0.000148, 0.000128, 0.000131, 0.000147, 0.000146, 0.000130, 0.000131, 0.000130, 0.000130, 0.000149, 0.000127, 0.000127, 0.000147, 0.000129, 0.000128, 0.000131, 0.000128, 0.000130, 0.000131, 0.000132, 0.000137, 0.000149, 0.000147, 0.000130, 0.000128, 0.000131, 0.000130, 0.000129, 0.000130, 0.000131, 0.000131, 0.000131, 0.000132, 0.000131, 0.000133, 0.000131, 0.000147, 0.000127, 0.000130, 0.000130, 0.000587, 0.000360, 0.000360, 0.000346, 0.000325, 0.000384, 0.000363, 0.000362, 0.000356, 0.000357, 0.000374, 0.000360, 0.000249, 0.000228, 0.000300, 0.000298, 0.000231, 0.000232, 0.000231, 0.000246, 0.000317, 0.000229, 0.000228, 0.000230, 0.000271, 0.000227, 0.000291, 0.000230, 0.000230, 0.000275, 0.000289, 0.000229, 0.000234, 0.000229, 0.000272, 0.000234, 0.000265, 0.000289, 0.000224, 0.000230, 0.000230, 0.000282, 0.000230, 0.000270, 0.000229, 0.000270, 0.000265, 0.000272, 0.000226, 0.000277, 0.000233, 0.000272, 0.000269, 0.000250, 0.000267, 0.000231, 0.000230, 0.000273, 0.000228, 0.000251, 0.000230, 0.000270, 0.000237, 0.000229, 0.000231, 0.000228, 0.000229, 0.000232, 0.000226, 0.000228, 0.000229, 0.000227, 0.000232, 0.000231, 0.000235, 0.000232, 0.000231, 0.000229, 0.000229, 0.000235, 0.000229, 0.000229, 0.000228, 0.000230, 0.000227, 0.000231, 0.000232, 0.000230, 0.000232, 0.000230, 0.000228, 0.000227, 0.000230, 0.000230, 0.000228, 0.000229, 0.000230, 0.000239, 0.000226, 0.000232, 0.008453, 0.002773, 0.002651, 0.002620, 0.002595, 0.002599, 0.002608, 0.002590, 0.002587, 0.002611, 0.002604, 0.002601, 0.002602, 0.002620, 0.002609, 0.002605, 0.002601, 0.002596, 0.002605, 0.002584, 0.002611, 0.002620, 0.002576, 0.002608, 0.002603, 0.002595, 0.002594, 0.002603, 0.002583, 0.002613, 0.002596, 0.002595, 0.002603, 0.002591, 0.002610, 0.002594, 0.002589, 0.002610, 0.002610, 0.002601, 0.002610, 0.002603, 0.002598, 0.002608, 0.002585, 0.002601, 0.002619, 0.002608, 0.002604, 0.002599, 0.002587, 0.002600, 0.002607, 0.002604, 0.002603, 0.002596, 0.002588, 0.002595, 0.002612, 0.002595, 0.002600, 0.002629, 0.002603, 0.002607, 0.002600, 0.002606, 0.002601, 0.002594, 0.002586, 0.002604, 0.002613, 0.002591, 0.002603, 0.002574, 0.002598, 0.002601, 0.002602, 0.002602, 0.002603, 0.002605, 0.002606, 0.002607, 0.002597, 0.002594, 0.002636, 0.002610, 0.002588, 0.002592, 0.002596, 0.002610, 0.002588, 0.002610, 0.002603, 0.002589, 0.002605, 0.002591, 0.002592, 0.002603, 0.002600, 0.002587, 0.095241, 0.035323, 0.035436, 0.035495, 0.035372, 0.035416, 0.035370, 0.035460, 0.035349, 0.035391, 0.035311, 0.035361, 0.035788, 0.035438, 0.035445, 0.035413, 0.035373, 0.035374, 0.035439, 0.035290, 0.035410, 0.035385, 0.035388, 0.035343, 0.035442, 0.035397, 0.035465, 0.036605, 0.035349, 0.035452, 0.035376, 0.035346, 0.035300, 0.035460, 0.035489, 0.035378, 0.035386, 0.035411, 0.035286, 0.035385, 0.035861, 0.035421, 0.035394, 0.035460, 0.035376, 0.035440, 0.035376, 0.035399, 0.035340, 0.035370, 0.035394, 0.035392, 0.035422, 0.035355, 0.035430, 0.035359, 0.036654, 0.035536, 0.035551, 0.035610, 0.035458, 0.035432, 0.035474, 0.035417, 0.035408, 0.035440, 0.035370, 0.035402, 0.035862, 0.035428, 0.035367, 0.035472, 0.035410, 0.035424, 0.035393, 0.035441, 0.035400, 0.035416, 0.035470, 0.035439, 0.035349, 0.035427, 0.035453, 0.035450, 0.036583, 0.035463, 0.035498, 0.035426, 0.035356, 0.035369, 0.035412, 0.035461, 0.035339, 0.035395, 0.035427, 0.035445, 0.035902, 0.035391, 0.035375, 0.035333]
slope = 2687592726.595444 slope = 2687592726.595444
intercept = 580231.389302 intercept = 580231.389302
elif tipo == "reduce": elif tipo == "reduce":
x = [0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000008, 0.000008, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000006, 0.000031, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000015, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000052, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000039, 0.000040, 0.000039, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000039, 0.000039, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000039, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000040, 0.000039, 0.000039, 0.000040, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000038, 0.000039, 0.000040, 0.000039, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000137, 0.000076, 0.000077, 0.000077, 0.000075, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000077, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000076, 0.000077, 0.000076, 0.000077, 0.000077, 0.000076, 0.000076, 0.000076, 0.000081, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000076, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000076, 0.000077, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000077, 0.000076, 0.000076, 0.000076, 0.000076, 0.000075, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000075, 0.000076, 0.000076, 0.000080, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000696, 0.000410, 0.000402, 0.000388, 0.000401, 0.000386, 0.000387, 0.000385, 0.000391, 0.000397, 0.000384, 0.000393, 0.000383, 0.000386, 0.000390, 0.000382, 0.000396, 0.000379, 0.000388, 0.000379, 0.000393, 0.000382, 0.000381, 0.000376, 0.000392, 0.000395, 0.000382, 0.000396, 0.000412, 0.000386, 0.000384, 0.000383, 0.000380, 0.000392, 0.000394, 0.000393, 0.000382, 0.000395, 0.000393, 0.000382, 0.000380, 0.000383, 0.000381, 0.000390, 0.000396, 0.000382, 0.000382, 0.000395, 0.000393, 0.000408, 0.000385, 0.000383, 0.000380, 0.000389, 0.000380, 0.000393, 0.000384, 0.000380, 0.000391, 0.000398, 0.000399, 0.000397, 0.000383, 0.000379, 0.000379, 0.000394, 0.000384, 0.000394, 0.000380, 0.000391, 0.000381, 0.000392, 0.000392, 0.000381, 0.000392, 0.000392, 0.000381, 0.000392, 0.000383, 0.000399, 0.000383, 0.000378, 0.000392, 0.000382, 0.000394, 0.000384, 0.000392, 0.000380, 0.000395, 0.000394, 0.000389, 0.000390, 0.000396, 0.000382, 0.000389, 0.000384, 0.000391, 0.000381, 0.000391, 0.000381, 0.001741, 0.000802, 0.000788, 0.000788, 0.000793, 0.000785, 0.000793, 0.000786, 0.000787, 0.000793, 0.000799, 0.000794, 0.000794, 0.000794, 0.000791, 0.000791, 0.000788, 0.000800, 0.000786, 0.000799, 0.000797, 0.000788, 0.000788, 0.000784, 0.000797, 0.000789, 0.000795, 0.000784, 0.000793, 0.000793, 0.000790, 0.000787, 0.000791, 0.000784, 0.000800, 0.000785, 0.000793, 0.000781, 0.000792, 0.000801, 0.000798, 0.000784, 0.000785, 0.000794, 0.000792, 0.000787, 0.000790, 0.000785, 0.000790, 0.000797, 0.000784, 0.000788, 0.000784, 0.000789, 0.000799, 0.000790, 0.000787, 0.000787, 0.000782, 0.000793, 0.000787, 0.000795, 0.000794, 0.000789, 0.000788, 0.000787, 0.000785, 0.000796, 0.000789, 0.000793, 0.000797, 0.000789, 0.000786, 0.000792, 0.000791, 0.000793, 0.000785, 0.000787, 0.000799, 0.000797, 0.000797, 0.000790, 0.000787, 0.000786, 0.000791, 0.000783, 0.000796, 0.000788, 0.000789, 0.000796, 0.000794, 0.000789, 0.000790, 0.000794, 0.000797, 0.000797, 0.000790, 0.000795, 0.000787, 0.000802, 0.018145, 0.015328, 0.015118, 0.015063, 0.015098, 0.014784, 0.014776, 0.014997, 0.015058, 0.015074, 0.014742, 0.014988, 0.015080, 0.014913, 0.015067, 0.015086, 0.015057, 0.015063, 0.015127, 0.015055, 0.015269, 0.015070, 0.015052, 0.015068, 0.015094, 0.015046, 0.015077, 0.015047, 0.014995, 0.015023, 0.014766, 0.014991, 0.014748, 0.014705, 0.014712, 0.015055, 0.015042, 0.014935, 0.015047, 0.014909, 0.014964, 0.015038, 0.015081, 0.015029, 0.015014, 0.015061, 0.015025, 0.015004, 0.015084, 0.015372, 0.015042, 0.014760, 0.015019, 0.014912, 0.015069, 0.015075, 0.014784, 0.015031, 0.015057, 0.015081, 0.015076, 0.015090, 0.015131, 0.015033, 0.015100, 0.015033, 0.015083, 0.014949, 0.015067, 0.015039, 0.014914, 0.015097, 0.014904, 0.015104, 0.014794, 0.015049, 0.015035, 0.015092, 0.015045, 0.014772, 0.015035, 0.015043, 0.015054, 0.015038, 0.015079, 0.015073, 0.015019, 0.015157, 0.015047, 0.014749, 0.014993, 0.015041, 0.015041, 0.015040, 0.015067, 0.015038, 0.015028, 0.015061, 0.015046, 0.015078, 0.212262, 0.185519, 0.186501, 0.185577, 0.184211, 0.186465, 0.186450, 0.184698, 0.186418, 0.187905, 0.184845, 0.186531, 0.186257, 0.185822, 0.186243, 0.186422, 0.186409, 0.185711, 0.183737, 0.185731, 0.186490, 0.186310, 0.185192, 0.184908, 0.186227, 0.185352, 0.186196, 0.186155, 0.186595, 0.186488, 0.185232, 0.186730, 0.185376, 0.185484, 0.183967, 0.186260, 0.187787, 0.186347, 0.186786, 0.186759, 0.186337, 0.186301, 0.183724, 0.183987, 0.184885, 0.183833, 0.186412, 0.188206, 0.185502, 0.184851, 0.186307, 0.185276, 0.184040, 0.184446, 0.186701, 0.186171, 0.185102, 0.186611, 0.187794, 0.185968, 0.186484, 0.183984, 0.186410, 0.187853, 0.186458, 0.186824, 0.184836, 0.186633, 0.187585, 0.185583, 0.183682, 0.186466, 0.183998, 0.185895, 0.185598, 0.186250, 0.186450, 0.184682, 0.186286, 0.185970, 0.186335, 0.184139, 0.183826, 0.186421, 0.186308, 0.188077, 0.185633, 0.184551, 0.186465, 0.186632, 0.186535, 0.186291, 0.186495, 0.186824, 0.186735, 0.185877, 0.187918, 0.186703, 0.186134, 0.186532] x = [0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000002, 0.000001, 0.000001, 0.000001, 0.000002, 0.000001, 0.000002, 0.000002, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000001, 0.000001, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000008, 0.000008, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000006, 0.000031, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000015, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000052, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000039, 0.000040, 0.000039, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000039, 0.000039, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000039, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000040, 0.000039, 0.000039, 0.000040, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000040, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000039, 0.000038, 0.000039, 0.000040, 0.000039, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000137, 0.000076, 0.000077, 0.000077, 0.000075, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000077, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000076, 0.000077, 0.000076, 0.000077, 0.000077, 0.000076, 0.000076, 0.000076, 0.000081, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000076, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000076, 0.000077, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000077, 0.000076, 0.000076, 0.000076, 0.000076, 0.000075, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000075, 0.000076, 0.000076, 0.000080, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000696, 0.000410, 0.000402, 0.000388, 0.000401, 0.000386, 0.000387, 0.000385, 0.000391, 0.000397, 0.000384, 0.000393, 0.000383, 0.000386, 0.000390, 0.000382, 0.000396, 0.000379, 0.000388, 0.000379, 0.000393, 0.000382, 0.000381, 0.000376, 0.000392, 0.000395, 0.000382, 0.000396, 0.000412, 0.000386, 0.000384, 0.000383, 0.000380, 0.000392, 0.000394, 0.000393, 0.000382, 0.000395, 0.000393, 0.000382, 0.000380, 0.000383, 0.000381, 0.000390, 0.000396, 0.000382, 0.000382, 0.000395, 0.000393, 0.000408, 0.000385, 0.000383, 0.000380, 0.000389, 0.000380, 0.000393, 0.000384, 0.000380, 0.000391, 0.000398, 0.000399, 0.000397, 0.000383, 0.000379, 0.000379, 0.000394, 0.000384, 0.000394, 0.000380, 0.000391, 0.000381, 0.000392, 0.000392, 0.000381, 0.000392, 0.000392, 0.000381, 0.000392, 0.000383, 0.000399, 0.000383, 0.000378, 0.000392, 0.000382, 0.000394, 0.000384, 0.000392, 0.000380, 0.000395, 0.000394, 0.000389, 0.000390, 0.000396, 0.000382, 0.000389, 0.000384, 0.000391, 0.000381, 0.000391, 0.000381, 0.001741, 0.000802, 0.000788, 0.000788, 0.000793, 0.000785, 0.000793, 0.000786, 0.000787, 0.000793, 0.000799, 0.000794, 0.000794, 0.000794, 0.000791, 0.000791, 0.000788, 0.000800, 0.000786, 0.000799, 0.000797, 0.000788, 0.000788, 0.000784, 0.000797, 0.000789, 0.000795, 0.000784, 0.000793, 0.000793, 0.000790, 0.000787, 0.000791, 0.000784, 0.000800, 0.000785, 0.000793, 0.000781, 0.000792, 0.000801, 0.000798, 0.000784, 0.000785, 0.000794, 0.000792, 0.000787, 0.000790, 0.000785, 0.000790, 0.000797, 0.000784, 0.000788, 0.000784, 0.000789, 0.000799, 0.000790, 0.000787, 0.000787, 0.000782, 0.000793, 0.000787, 0.000795, 0.000794, 0.000789, 0.000788, 0.000787, 0.000785, 0.000796, 0.000789, 0.000793, 0.000797, 0.000789, 0.000786, 0.000792, 0.000791, 0.000793, 0.000785, 0.000787, 0.000799, 0.000797, 0.000797, 0.000790, 0.000787, 0.000786, 0.000791, 0.000783, 0.000796, 0.000788, 0.000789, 0.000796, 0.000794, 0.000789, 0.000790, 0.000794, 0.000797, 0.000797, 0.000790, 0.000795, 0.000787, 0.000802, 0.018145, 0.015328, 0.015118, 0.015063, 0.015098, 0.014784, 0.014776, 0.014997, 0.015058, 0.015074, 0.014742, 0.014988, 0.015080, 0.014913, 0.015067, 0.015086, 0.015057, 0.015063, 0.015127, 0.015055, 0.015269, 0.015070, 0.015052, 0.015068, 0.015094, 0.015046, 0.015077, 0.015047, 0.014995, 0.015023, 0.014766, 0.014991, 0.014748, 0.014705, 0.014712, 0.015055, 0.015042, 0.014935, 0.015047, 0.014909, 0.014964, 0.015038, 0.015081, 0.015029, 0.015014, 0.015061, 0.015025, 0.015004, 0.015084, 0.015372, 0.015042, 0.014760, 0.015019, 0.014912, 0.015069, 0.015075, 0.014784, 0.015031, 0.015057, 0.015081, 0.015076, 0.015090, 0.015131, 0.015033, 0.015100, 0.015033, 0.015083, 0.014949, 0.015067, 0.015039, 0.014914, 0.015097, 0.014904, 0.015104, 0.014794, 0.015049, 0.015035, 0.015092, 0.015045, 0.014772, 0.015035, 0.015043, 0.015054, 0.015038, 0.015079, 0.015073, 0.015019, 0.015157, 0.015047, 0.014749, 0.014993, 0.015041, 0.015041, 0.015040, 0.015067, 0.015038, 0.015028, 0.015061, 0.015046, 0.015078, 0.212262, 0.185519, 0.186501, 0.185577, 0.184211, 0.186465, 0.186450, 0.184698, 0.186418, 0.187905, 0.184845, 0.186531, 0.186257, 0.185822, 0.186243, 0.186422, 0.186409, 0.185711, 0.183737, 0.185731, 0.186490, 0.186310, 0.185192, 0.184908, 0.186227, 0.185352, 0.186196, 0.186155, 0.186595, 0.186488, 0.185232, 0.186730, 0.185376, 0.185484, 0.183967, 0.186260, 0.187787, 0.186347, 0.186786, 0.186759, 0.186337, 0.186301, 0.183724, 0.183987, 0.184885, 0.183833, 0.186412, 0.188206, 0.185502, 0.184851, 0.186307, 0.185276, 0.184040, 0.184446, 0.186701, 0.186171, 0.185102, 0.186611, 0.187794, 0.185968, 0.186484, 0.183984, 0.186410, 0.187853, 0.186458, 0.186824, 0.184836, 0.186633, 0.187585, 0.185583, 0.183682, 0.186466, 0.183998, 0.185895, 0.185598, 0.186250, 0.186450, 0.184682, 0.186286, 0.185970, 0.186335, 0.184139, 0.183826, 0.186421, 0.186308, 0.188077, 0.185633, 0.184551, 0.186465, 0.186632, 0.186535, 0.186291, 0.186495, 0.186824, 0.186735, 0.185877, 0.187918, 0.186703, 0.186134, 0.186532]
slope = 536190943.875754 slope = 536190943.875754
intercept = 277159.974610 intercept = 277159.974610
elif tipo == "allreduce": elif tipo == "allreduce":
x = [0.000007, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000004, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000005, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000004, 0.000005, 0.000005, 0.000005, 0.000005, 0.000005, 0.000004, 0.000005, 0.000003, 0.000005, 0.000004, 0.000005, 0.000004, 0.000006, 0.000006, 0.000006, 0.000005, 0.000005, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000005, 0.000003, 0.000004, 0.000003, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000003, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000003, 0.000005, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000005, 0.000006, 0.000006, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000003, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000006, 0.000007, 0.000005, 0.000005, 0.000005, 0.000005, 0.000005, 0.000004, 0.000004, 0.000005, 0.000005, 0.000004, 0.000008, 0.000007, 0.000008, 0.000007, 0.000007, 0.000007, 0.000007, 0.000008, 0.000007, 0.000008, 0.000007, 0.000008, 0.000007, 0.000006, 0.000008, 0.000007, 0.000008, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000006, 0.000008, 0.000006, 0.000007, 0.000007, 0.000007, 0.000014, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000008, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000008, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000008, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000011, 0.000011, 0.000010, 0.000011, 0.000011, 0.000011, 0.000010, 0.000010, 0.000011, 0.000011, 0.000011, 0.000011, 0.000010, 0.000011, 0.000010, 0.000011, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000011, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000011, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000012, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000012, 0.000011, 0.000010, 0.000012, 0.000010, 0.000010, 0.000010, 0.000011, 0.000011, 0.000010, 0.000012, 0.000055, 0.000041, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000039, 0.000044, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000039, 0.000117, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000076, 0.000076, 0.000077, 0.000077, 0.000076, 0.000077, 0.000076, 0.000077, 0.000077, 0.000077, 0.000076, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000079, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000079, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000077, 0.000076, 0.000076, 0.000076, 0.000075, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000950, 0.000437, 0.000394, 0.000413, 0.000402, 0.000388, 0.000417, 0.000434, 0.000407, 0.000433, 0.000413, 0.000432, 0.000410, 0.000400, 0.000418, 0.000431, 0.000408, 0.000410, 0.000432, 0.000430, 0.000411, 0.000417, 0.000428, 0.000406, 0.000414, 0.000412, 0.000395, 0.000396, 0.000390, 0.000429, 0.000391, 0.000388, 0.000438, 0.000432, 0.000409, 0.000425, 0.000386, 0.000390, 0.000389, 0.000391, 0.000415, 0.000410, 0.000430, 0.000410, 0.000412, 0.000388, 0.000433, 0.000390, 0.000389, 0.000385, 0.000412, 0.000407, 0.000395, 0.000438, 0.000414, 0.000409, 0.000431, 0.000385, 0.000413, 0.000429, 0.000430, 0.000409, 0.000424, 0.000434, 0.000406, 0.000390, 0.000394, 0.000433, 0.000429, 0.000389, 0.000415, 0.000437, 0.000417, 0.000408, 0.000416, 0.000392, 0.000391, 0.000390, 0.000411, 0.000413, 0.000429, 0.000412, 0.000429, 0.000416, 0.000431, 0.000408, 0.000430, 0.000426, 0.000410, 0.000431, 0.000438, 0.000410, 0.000423, 0.000410, 0.000414, 0.000413, 0.000408, 0.000388, 0.000391, 0.000389, 0.001616, 0.000859, 0.000829, 0.000874, 0.000840, 0.000832, 0.000856, 0.000860, 0.000865, 0.000841, 0.000861, 0.000871, 0.000852, 0.000868, 0.000833, 0.000872, 0.000832, 0.000871, 0.000838, 0.000831, 0.000852, 0.000861, 0.000846, 0.000835, 0.000830, 0.000857, 0.000839, 0.000866, 0.000856, 0.000863, 0.000874, 0.000854, 0.000890, 0.000854, 0.000836, 0.000827, 0.000846, 0.000830, 0.000853, 0.000858, 0.000852, 0.000866, 0.000857, 0.000866, 0.000830, 0.000832, 0.000879, 0.000850, 0.000863, 0.000874, 0.000842, 0.000860, 0.000863, 0.000877, 0.000836, 0.000839, 0.000836, 0.000858, 0.000860, 0.000828, 0.000879, 0.000830, 0.000856, 0.000861, 0.000852, 0.000874, 0.000834, 0.000856, 0.000860, 0.000877, 0.000854, 0.000865, 0.000830, 0.000867, 0.000881, 0.000829, 0.000849, 0.000865, 0.000864, 0.000863, 0.000874, 0.000834, 0.000873, 0.000839, 0.000833, 0.000871, 0.000856, 0.000863, 0.000876, 0.000828, 0.000855, 0.000868, 0.000872, 0.000885, 0.000839, 0.000860, 0.000851, 0.000867, 0.000840, 0.000854, 0.020114, 0.010118, 0.010131, 0.010137, 0.010162, 0.010159, 0.010018, 0.010076, 0.009923, 0.010031, 0.010130, 0.010074, 0.010124, 0.010190, 0.010074, 0.010173, 0.010067, 0.010135, 0.010270, 0.010170, 0.010085, 0.010120, 0.010162, 0.010006, 0.010092, 0.010121, 0.010045, 0.010120, 0.009966, 0.010169, 0.010031, 0.010044, 0.010059, 0.010120, 0.010132, 0.010078, 0.010055, 0.009942, 0.010009, 0.010152, 0.010126, 0.010046, 0.010080, 0.010130, 0.009936, 0.010412, 0.009871, 0.010109, 0.010099, 0.010099, 0.010007, 0.010095, 0.010114, 0.010107, 0.010143, 0.010149, 0.010146, 0.010030, 0.010105, 0.010117, 0.009967, 0.010056, 0.010149, 0.010118, 0.010156, 0.010055, 0.009937, 0.009966, 0.009931, 0.010186, 0.010130, 0.010088, 0.010184, 0.010098, 0.010175, 0.010120, 0.010091, 0.010139, 0.010005, 0.010093, 0.010123, 0.010055, 0.010098, 0.010133, 0.010072, 0.010134, 0.010018, 0.009968, 0.010030, 0.010155, 0.010152, 0.010180, 0.010159, 0.010002, 0.009920, 0.010056, 0.010075, 0.010052, 0.009879, 0.010003, 0.223613, 0.148744, 0.152401, 0.151833, 0.152222, 0.148994, 0.153251, 0.150396, 0.152508, 0.150248, 0.151124, 0.149438, 0.150057, 0.151779, 0.150073, 0.152658, 0.148883, 0.152434, 0.152254, 0.149600, 0.153596, 0.149332, 0.150336, 0.151257, 0.149584, 0.149302, 0.149555, 0.150916, 0.151489, 0.149315, 0.149144, 0.149346, 0.152488, 0.152130, 0.151796, 0.152395, 0.151557, 0.151864, 0.149048, 0.149158, 0.153600, 0.149456, 0.152524, 0.151187, 0.152076, 0.152173, 0.151782, 0.151161, 0.152365, 0.150226, 0.149354, 0.149796, 0.149165, 0.150970, 0.150145, 0.150309, 0.151621, 0.151543, 0.149100, 0.153671, 0.153856, 0.150674, 0.152317, 0.149891, 0.149949, 0.152256, 0.150707, 0.152146, 0.152653, 0.150065, 0.149882, 0.149509, 0.152183, 0.149265, 0.150935, 0.152536, 0.152076, 0.149294, 0.149268, 0.152232, 0.153218, 0.151175, 0.152072, 0.149226, 0.149075, 0.150858, 0.149481, 0.153983, 0.150955, 0.152286, 0.152336, 0.149034, 0.152280, 0.150416, 0.152882, 0.151258, 0.149603, 0.151599, 0.149312, 0.150316] x = [0.000007, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000004, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000005, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000002, 0.000004, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000003, 0.000002, 0.000003, 0.000003, 0.000004, 0.000005, 0.000005, 0.000005, 0.000005, 0.000005, 0.000004, 0.000005, 0.000003, 0.000005, 0.000004, 0.000005, 0.000004, 0.000006, 0.000006, 0.000006, 0.000005, 0.000005, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000005, 0.000003, 0.000004, 0.000003, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000003, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000003, 0.000005, 0.000005, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000005, 0.000006, 0.000006, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000003, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000004, 0.000005, 0.000004, 0.000004, 0.000005, 0.000006, 0.000007, 0.000005, 0.000005, 0.000005, 0.000005, 0.000005, 0.000004, 0.000004, 0.000005, 0.000005, 0.000004, 0.000008, 0.000007, 0.000008, 0.000007, 0.000007, 0.000007, 0.000007, 0.000008, 0.000007, 0.000008, 0.000007, 0.000008, 0.000007, 0.000006, 0.000008, 0.000007, 0.000008, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000006, 0.000007, 0.000006, 0.000006, 0.000006, 0.000006, 0.000007, 0.000007, 0.000006, 0.000008, 0.000006, 0.000007, 0.000007, 0.000007, 0.000014, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000008, 0.000006, 0.000007, 0.000007, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000008, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000007, 0.000006, 0.000006, 0.000006, 0.000008, 0.000006, 0.000006, 0.000007, 0.000007, 0.000007, 0.000007, 0.000011, 0.000011, 0.000010, 0.000011, 0.000011, 0.000011, 0.000010, 0.000010, 0.000011, 0.000011, 0.000011, 0.000011, 0.000010, 0.000011, 0.000010, 0.000011, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000011, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000011, 0.000011, 0.000011, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000012, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000011, 0.000012, 0.000011, 0.000010, 0.000012, 0.000010, 0.000010, 0.000010, 0.000011, 0.000011, 0.000010, 0.000012, 0.000055, 0.000041, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000039, 0.000044, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000041, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000040, 0.000039, 0.000040, 0.000040, 0.000039, 0.000117, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000077, 0.000076, 0.000076, 0.000077, 0.000077, 0.000076, 0.000077, 0.000076, 0.000077, 0.000077, 0.000077, 0.000076, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000079, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000076, 0.000076, 0.000075, 0.000075, 0.000075, 0.000075, 0.000079, 0.000075, 0.000075, 0.000075, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000075, 0.000075, 0.000076, 0.000077, 0.000076, 0.000076, 0.000076, 0.000075, 0.000076, 0.000076, 0.000076, 0.000076, 0.000076, 0.000950, 0.000437, 0.000394, 0.000413, 0.000402, 0.000388, 0.000417, 0.000434, 0.000407, 0.000433, 0.000413, 0.000432, 0.000410, 0.000400, 0.000418, 0.000431, 0.000408, 0.000410, 0.000432, 0.000430, 0.000411, 0.000417, 0.000428, 0.000406, 0.000414, 0.000412, 0.000395, 0.000396, 0.000390, 0.000429, 0.000391, 0.000388, 0.000438, 0.000432, 0.000409, 0.000425, 0.000386, 0.000390, 0.000389, 0.000391, 0.000415, 0.000410, 0.000430, 0.000410, 0.000412, 0.000388, 0.000433, 0.000390, 0.000389, 0.000385, 0.000412, 0.000407, 0.000395, 0.000438, 0.000414, 0.000409, 0.000431, 0.000385, 0.000413, 0.000429, 0.000430, 0.000409, 0.000424, 0.000434, 0.000406, 0.000390, 0.000394, 0.000433, 0.000429, 0.000389, 0.000415, 0.000437, 0.000417, 0.000408, 0.000416, 0.000392, 0.000391, 0.000390, 0.000411, 0.000413, 0.000429, 0.000412, 0.000429, 0.000416, 0.000431, 0.000408, 0.000430, 0.000426, 0.000410, 0.000431, 0.000438, 0.000410, 0.000423, 0.000410, 0.000414, 0.000413, 0.000408, 0.000388, 0.000391, 0.000389, 0.001616, 0.000859, 0.000829, 0.000874, 0.000840, 0.000832, 0.000856, 0.000860, 0.000865, 0.000841, 0.000861, 0.000871, 0.000852, 0.000868, 0.000833, 0.000872, 0.000832, 0.000871, 0.000838, 0.000831, 0.000852, 0.000861, 0.000846, 0.000835, 0.000830, 0.000857, 0.000839, 0.000866, 0.000856, 0.000863, 0.000874, 0.000854, 0.000890, 0.000854, 0.000836, 0.000827, 0.000846, 0.000830, 0.000853, 0.000858, 0.000852, 0.000866, 0.000857, 0.000866, 0.000830, 0.000832, 0.000879, 0.000850, 0.000863, 0.000874, 0.000842, 0.000860, 0.000863, 0.000877, 0.000836, 0.000839, 0.000836, 0.000858, 0.000860, 0.000828, 0.000879, 0.000830, 0.000856, 0.000861, 0.000852, 0.000874, 0.000834, 0.000856, 0.000860, 0.000877, 0.000854, 0.000865, 0.000830, 0.000867, 0.000881, 0.000829, 0.000849, 0.000865, 0.000864, 0.000863, 0.000874, 0.000834, 0.000873, 0.000839, 0.000833, 0.000871, 0.000856, 0.000863, 0.000876, 0.000828, 0.000855, 0.000868, 0.000872, 0.000885, 0.000839, 0.000860, 0.000851, 0.000867, 0.000840, 0.000854, 0.020114, 0.010118, 0.010131, 0.010137, 0.010162, 0.010159, 0.010018, 0.010076, 0.009923, 0.010031, 0.010130, 0.010074, 0.010124, 0.010190, 0.010074, 0.010173, 0.010067, 0.010135, 0.010270, 0.010170, 0.010085, 0.010120, 0.010162, 0.010006, 0.010092, 0.010121, 0.010045, 0.010120, 0.009966, 0.010169, 0.010031, 0.010044, 0.010059, 0.010120, 0.010132, 0.010078, 0.010055, 0.009942, 0.010009, 0.010152, 0.010126, 0.010046, 0.010080, 0.010130, 0.009936, 0.010412, 0.009871, 0.010109, 0.010099, 0.010099, 0.010007, 0.010095, 0.010114, 0.010107, 0.010143, 0.010149, 0.010146, 0.010030, 0.010105, 0.010117, 0.009967, 0.010056, 0.010149, 0.010118, 0.010156, 0.010055, 0.009937, 0.009966, 0.009931, 0.010186, 0.010130, 0.010088, 0.010184, 0.010098, 0.010175, 0.010120, 0.010091, 0.010139, 0.010005, 0.010093, 0.010123, 0.010055, 0.010098, 0.010133, 0.010072, 0.010134, 0.010018, 0.009968, 0.010030, 0.010155, 0.010152, 0.010180, 0.010159, 0.010002, 0.009920, 0.010056, 0.010075, 0.010052, 0.009879, 0.010003, 0.223613, 0.148744, 0.152401, 0.151833, 0.152222, 0.148994, 0.153251, 0.150396, 0.152508, 0.150248, 0.151124, 0.149438, 0.150057, 0.151779, 0.150073, 0.152658, 0.148883, 0.152434, 0.152254, 0.149600, 0.153596, 0.149332, 0.150336, 0.151257, 0.149584, 0.149302, 0.149555, 0.150916, 0.151489, 0.149315, 0.149144, 0.149346, 0.152488, 0.152130, 0.151796, 0.152395, 0.151557, 0.151864, 0.149048, 0.149158, 0.153600, 0.149456, 0.152524, 0.151187, 0.152076, 0.152173, 0.151782, 0.151161, 0.152365, 0.150226, 0.149354, 0.149796, 0.149165, 0.150970, 0.150145, 0.150309, 0.151621, 0.151543, 0.149100, 0.153671, 0.153856, 0.150674, 0.152317, 0.149891, 0.149949, 0.152256, 0.150707, 0.152146, 0.152653, 0.150065, 0.149882, 0.149509, 0.152183, 0.149265, 0.150935, 0.152536, 0.152076, 0.149294, 0.149268, 0.152232, 0.153218, 0.151175, 0.152072, 0.149226, 0.149075, 0.150858, 0.149481, 0.153983, 0.150955, 0.152286, 0.152336, 0.149034, 0.152280, 0.150416, 0.152882, 0.151258, 0.149603, 0.151599, 0.149312, 0.150316]
slope = 656145059.536116 slope = 656145059.536116
intercept = 409351.405089 intercept = 409351.405089
y = [10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, \ y = [10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 10.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 100.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 1000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 5000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 10000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 50000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 100000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, \
500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000] 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 500000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 1000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 10000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000, 100000000.000000]
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
#f, (ax1, ax2) = plt.subplots(nrows=2, sharex=True, gridspec_kw={'height_ratios': (1,3)}, figsize=(10,4)) x2 = np.array(x) * 1000
f=plt.figure(figsize=(16, 8)) y_array = [y]
ax=f.add_subplot(111) aux_labels = ["Expected"]
thresh = 100000000 - 1
x_low = []
x_high = []
y_low = []
y_high = []
y2_low = []
y2_high = []
#Bucle de bajas prestaciones...
for i in range(len(x)):
if y[i] < thresh:
x_low.append(x[i])
y_low.append(y[i])
y2_low.append(intercept + slope*x[i])
else:
x_high.append(x[i])
y_high.append(y[i])
y2_high.append(intercept + slope*x[i])
ax1.scatter(x_low,y_low, color='red')
ax1.plot(x_low,y2_low)
ax2.scatter(x_high,y_low, color='red')
ax2.plot(x_high,y2_low)
ax1.set_ylabel("Tamaño", fontsize=36)
ax1.set_xlabel("Tiempo", fontsize=36)
#ax.set_ylim(0,110000000)
``` ```
   
%%%% Output: execute_result
Text(0.5, 0, 'Tiempo')
%%%% Output: display_data
[Hidden Image Output]
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
dfLinear_Reg = pd.DataFrame(y) dfLinear_Reg = pd.DataFrame(y)
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
dfLinear_Reg[tipo] = x dfLinear_Reg[tipo] = x
``` ```
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
gruped_Linear = dfLinear_Reg.groupby([0])['bcast', 'allgather', 'reduce', 'allreduce'].agg(['mean','min','max']) gruped_Linear = dfLinear_Reg.groupby([0])['bcast', 'allgather', 'reduce', 'allreduce'].agg(['mean','min','max'])
gruped_Linear.to_excel("Linear_reg.xlsx") gruped_Linear.to_excel("Linear_reg.xlsx")
``` ```
   
%%%% Output: stream %%%% Output: stream
   
/tmp/ipykernel_6968/2732890191.py:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead. /tmp/ipykernel_6968/2732890191.py:1: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
gruped_Linear = dfLinear_Reg.groupby([0])['bcast', 'allgather', 'reduce', 'allreduce'].agg(['mean','min','max']) gruped_Linear = dfLinear_Reg.groupby([0])['bcast', 'allgather', 'reduce', 'allreduce'].agg(['mean','min','max'])
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
from sklearn.linear_model import LinearRegression from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
x = np.array(x).reshape((-1, 1)) x = np.array(x).reshape((-1, 1))
y = np.array(y) y = np.array(y)
```
%% Cell type:code id: tags:
   
``` python
reg = LinearRegression().fit(x, y) reg = LinearRegression().fit(x, y)
print(reg.score(x, y)) print(reg.score(x, y))
print(reg.intercept_) print(reg.intercept_)
print(reg.coef_) print(reg.coef_)
   
print(reg.predict(x)) reg_array = reg.predict(x)
print(reg_array)
y_array.append(reg_array)
aux_labels.append("LinearReg")
```
%%%% Output: stream
0.9720444025507028
417555.74204228446
[4.08208613e+09]
[4.25719914e+05 4.21637828e+05 4.21637828e+05 ... 9.36564851e+07
1.00391927e+08 9.74120044e+07]
%% Cell type:code id: tags:
``` python
degrees = 4
poly = PolynomialFeatures(degree=degrees, include_bias=False)
poly_features = poly.fit_transform(x)
poly_reg = LinearRegression()
poly_reg.fit(poly_features, y)
print(poly_reg.score(poly_features, y))
print(poly_reg.intercept_)
print(poly_reg.coef_)
poly_array = poly_reg.predict(poly_features)
print(poly_array)
y_array.append(poly_array)
aux_labels.append("PolyReg-"+str(degrees))
``` ```
   
%%%% Output: stream %%%% Output: stream
   
0.9962787972985218 0.9994154481836294
409360.65712023154 27900.7721101176
[6.56144796e+08] [ 4.29146862e+09 2.70526901e+11 -1.56299343e+13 1.73278870e+14]
[ 413953.67068972 411329.09150716 410672.94671151 ... [3.64847913e+04 3.21925112e+04 3.21925112e+04 ... 1.00097111e+08
99880255.53157426 98379652.38394217 99038421.75876622] 1.00132901e+08 1.00289449e+08]
%% Cell type:code id: tags:
``` python
f=plt.figure(figsize=(16, 8))
ax=f.add_subplot(111)
for i in range(len(y_array)):
ax.scatter(x2,y_array[i], color=colors_spawn[i])
#ax.plot(x2,y, color=colors_spawn[0])
ax.set_ylabel("Tamaño (Bytes)", fontsize=36)
ax.set_xlabel("Tiempo (ms)", fontsize=36)
ax.axhline(7549560)
plt.legend(labels=aux_labels, loc='best', fontsize=20,ncol=2,framealpha=1)
plt.xscale("log")
plt.yscale("log")
f.savefig("Images/Regresion.png", format="png")
```
%%%% Output: display_data
[Hidden Image Output]
   
%% Cell type:code id: tags: %% Cell type:code id: tags:
   
``` python ``` python
``` ```
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment