2025-03-22 19:46:27 -04:00
|
|
|
{
|
|
|
|
"cells": [
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 1,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"import os\n",
|
|
|
|
"import json\n",
|
|
|
|
"\n",
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
"from dataclasses import dataclass\n",
|
|
|
|
"import numpy as np"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 2,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"this_dir = os.path.dirname(os.path.abspath(''))\n",
|
|
|
|
"# results is in \"../results\"\n",
|
|
|
|
"results_dir = os.path.join(this_dir, \"results\")"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 3,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"experiment_folder = \"casestudy_example\"\n",
|
|
|
|
"experiment_name = \"cs_example_edf\"\n",
|
|
|
|
"\n",
|
|
|
|
"experiment_file = os.path.join(results_dir, experiment_folder, experiment_name + \".json\")\n",
|
|
|
|
"if not os.path.exists(experiment_file):\n",
|
|
|
|
" print(\"Experiment file not found: \", experiment_file)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 4,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"with open(experiment_file) as f:\n",
|
|
|
|
" experiment_data_raw = json.load(f)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 5,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2025-04-01 16:04:19 +02:00
|
|
|
"Number of records: 12118\n",
|
|
|
|
"First record: {'entry': {'operation': 'start_work', 'chain': 0, 'node': 'node_0', 'count': 500, 'next_release_us': 99886}, 'time': 0.0001}\n",
|
|
|
|
"Operation types: ['get_next_executable', 'next_deadline', 'wait_for_work', 'end_work', 'start_work']\n"
|
2025-03-22 19:46:27 -04:00
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"def pre_process_data(data):\n",
|
|
|
|
" for record in data:\n",
|
|
|
|
" record[\"time\"] = int(record[\"time\"])\n",
|
|
|
|
"\n",
|
|
|
|
" min_time = min([record[\"time\"] for record in data])\n",
|
|
|
|
" for record in data:\n",
|
|
|
|
" record[\"time\"] -= min_time\n",
|
|
|
|
" record[\"time\"] /= (1000 * 1000)\n",
|
|
|
|
"\n",
|
|
|
|
" if record[\"entry\"][\"operation\"] == \"next_deadline\":\n",
|
2025-03-25 12:24:12 +01:00
|
|
|
" #print(\"Record: \", record)\n",
|
2025-03-22 19:46:27 -04:00
|
|
|
" record[\"entry\"][\"deadline\"] = int(record[\"entry\"][\"deadline\"])\n",
|
|
|
|
" record[\"entry\"][\"deadline\"] -= min_time\n",
|
|
|
|
" record[\"entry\"][\"deadline\"] /= (1000 * 1000)\n",
|
|
|
|
"\n",
|
|
|
|
" # data = sorted(data, key=lambda x: x[\"time\"])\n",
|
|
|
|
" return data\n",
|
|
|
|
"\n",
|
|
|
|
"experiment_data = pre_process_data(experiment_data_raw)\n",
|
|
|
|
"\n",
|
|
|
|
"print(\"Number of records: \", len(experiment_data))\n",
|
|
|
|
"print(\"First record: \", experiment_data[0])\n",
|
|
|
|
"operation_types = list(set([record[\"entry\"][\"operation\"] for record in experiment_data]))\n",
|
|
|
|
"print(\"Operation types: \", operation_types)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 6,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"@dataclass\n",
|
|
|
|
"class Record:\n",
|
|
|
|
" start_time: float\n",
|
|
|
|
" end_time: float\n",
|
|
|
|
" node_name: str\n",
|
|
|
|
"\n",
|
|
|
|
"@dataclass\n",
|
|
|
|
"class RecordLine:\n",
|
|
|
|
" node_name: str\n",
|
|
|
|
" count: int\n",
|
|
|
|
"\n",
|
|
|
|
" def __eq__(self, other):\n",
|
|
|
|
" return self.node_name == other.node_name and self.count == other.count\n",
|
|
|
|
"\n",
|
|
|
|
" def __hash__(self):\n",
|
|
|
|
" return hash((self.node_name, self.count))\n",
|
|
|
|
"\n",
|
|
|
|
"def get_records(data) -> list[Record]:\n",
|
|
|
|
" # used to match start_work and end_work records\n",
|
|
|
|
" current_records: dict[RecordLine, Record] = {}\n",
|
|
|
|
" records = []\n",
|
|
|
|
" for record in data:\n",
|
|
|
|
" if record[\"entry\"][\"operation\"] == \"start_work\":\n",
|
|
|
|
" current_record = Record(start_time=record[\"time\"], node_name=record[\"entry\"][\"node\"], end_time=None)\n",
|
|
|
|
" current_record_line = RecordLine(node_name=record[\"entry\"][\"node\"], count=record[\"entry\"][\"count\"])\n",
|
|
|
|
" if current_record_line in current_records:\n",
|
|
|
|
" raise Exception(\"Overlapping records\")\n",
|
|
|
|
" current_records[current_record_line] = current_record\n",
|
|
|
|
" elif record[\"entry\"][\"operation\"] == \"end_work\":\n",
|
|
|
|
" current_record_line = RecordLine(node_name=record[\"entry\"][\"node\"], count=record[\"entry\"][\"count\"])\n",
|
|
|
|
" if current_record_line not in current_records:\n",
|
|
|
|
" raise Exception(\"No start record\")\n",
|
|
|
|
" current_record = current_records[current_record_line]\n",
|
|
|
|
" current_record.end_time = record[\"time\"]\n",
|
|
|
|
" records.append(current_record)\n",
|
|
|
|
" del current_records[current_record_line]\n",
|
|
|
|
" return records\n",
|
|
|
|
"\n",
|
|
|
|
"records = get_records(experiment_data)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 7,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"Number of nodes: 4\n"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"num_nodes = len(set([record.node_name for record in records]))\n",
|
|
|
|
"print(\"Number of nodes: \", num_nodes)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 8,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"application/vnd.jupyter.widget-view+json": {
|
2025-04-01 16:04:19 +02:00
|
|
|
"model_id": "3c172c35015c4ffd92a176ce80ffd18d",
|
2025-03-22 19:46:27 -04:00
|
|
|
"version_major": 2,
|
|
|
|
"version_minor": 0
|
|
|
|
},
|
2025-04-01 16:04:19 +02:00
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJHtJREFUeJzt3X+M1/V9wPHXlx8eCNzh6YS7eVoQW37kqA4UQSNYLu7YEsnaFWqIP5bTTtyKratYkwGHxdOqTVn8sSl0igmZsszMxJq507XMtHCKk1Xh2tSDCpUCqwintpzKffZH4zdeBT30+/3e9+79eCTfcD8+38/7x31zPPM5Pkcuy7IsAABIxqC+ngAAAKUlAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEjOkryfQn3V3d8eePXti1KhRkcvl+no6AEAvZFkWb775ZtTW1sagQWleCxOAn8KePXuirq6ur6cBAHwCu3fvjtNOO62vp9EnBOCnMGrUqIj4/QuosrKyj2cDAPRGZ2dn1NXV5f8eT5EA/BTe/7FvZWWlAASAfiblf76V5g++AQASJgABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwDLWC5XmGMKea5Sj9db1jfwXwu5XOnn3hvluleF0p/H66+v9d4qx7mXen18cgIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAg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
|
2025-03-22 19:46:27 -04:00
|
|
|
"text/html": [
|
|
|
|
"\n",
|
|
|
|
" <div style=\"display: inline-block;\">\n",
|
|
|
|
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
|
|
|
|
" Figure\n",
|
|
|
|
" </div>\n",
|
2025-04-01 16:04:19 +02:00
|
|
|
" <img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJHtJREFUeJzt3X+M1/V9wPHXlx8eCNzh6YS7eVoQW37kqA4UQSNYLu7YEsnaFWqIP5bTTtyKratYkwGHxdOqTVn8sSl0igmZsszMxJq507XMtHCKk1Xh2tSDCpUCqwintpzKffZH4zdeBT30+/3e9+79eCTfcD8+38/7x31zPPM5Pkcuy7IsAABIxqC+ngAAAKUlAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEjOkryfQn3V3d8eePXti1KhRkcvl+no6AEAvZFkWb775ZtTW1sagQWleCxOAn8KePXuirq6ur6cBAHwCu3fvjtNOO62vp9EnBOCnMGrUqIj4/QuosrKyj2cDAPRGZ2dn1NXV5f8eT5EA/BTe/7FvZWWlAASAfiblf76V5g++AQASJgABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwDLWC5XmGMKea5Sj9db1jfwXwu5XOnn3hvluleF0p/H66+v9d4qx7mXen18cgIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAg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
|
2025-03-22 19:46:27 -04:00
|
|
|
" </div>\n",
|
|
|
|
" "
|
|
|
|
],
|
|
|
|
"text/plain": [
|
|
|
|
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"%matplotlib widget\n",
|
|
|
|
"\n",
|
|
|
|
"# swimlane plot\n",
|
|
|
|
"name_to_id = {name: i for i, name in enumerate(set([record.node_name for record in records]))}\n",
|
|
|
|
"fig, ax = plt.subplots()\n",
|
|
|
|
"for i, record in enumerate(records):\n",
|
|
|
|
" # ax.plot([record.start_time, record.end_time], [name_to_id[record.node_name], name_to_id[record.node_name]], label=record.node_name)\n",
|
|
|
|
" ax.broken_barh([(record.start_time, record.end_time - record.start_time)], (name_to_id[record.node_name] - 0.4, 0.8), facecolors='blue')\n",
|
|
|
|
"ax.set_yticks(range(num_nodes))\n",
|
|
|
|
"ax.set_yticklabels(name_to_id.keys())\n",
|
|
|
|
"plt.show()"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 9,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
2025-04-01 16:04:19 +02:00
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"[Deadline(chain_id=1, deadline=0.0003, on_time=1), Deadline(chain_id=0, deadline=0.0003, on_time=0), Deadline(chain_id=0, deadline=0.0004, on_time=1), Deadline(chain_id=1, deadline=0.0004, on_time=0), Deadline(chain_id=1, deadline=0.0005, on_time=1), Deadline(chain_id=0, deadline=0.0005, on_time=1), Deadline(chain_id=0, deadline=0.0006, on_time=1), Deadline(chain_id=1, deadline=0.0006, on_time=1), Deadline(chain_id=0, deadline=0.0007, on_time=1), Deadline(chain_id=1, deadline=0.0007, on_time=1), Deadline(chain_id=1, deadline=0.0008, on_time=1), Deadline(chain_id=0, deadline=0.0008, on_time=1), Deadline(chain_id=0, deadline=0.0009, on_time=1), Deadline(chain_id=1, deadline=0.0009, on_time=1), Deadline(chain_id=1, deadline=0.001, on_time=1), Deadline(chain_id=0, deadline=0.001, on_time=1), Deadline(chain_id=0, deadline=0.0011, on_time=1), Deadline(chain_id=1, deadline=0.0011, on_time=1), Deadline(chain_id=1, deadline=0.0012, on_time=1), Deadline(chain_id=0, deadline=0.0012, on_time=1), Deadline(chain_id=0, deadline=0.0013, on_time=1), Deadline(chain_id=1, deadline=0.0013, on_time=1), Deadline(chain_id=1, deadline=0.0014, on_time=1), Deadline(chain_id=0, deadline=0.0014, on_time=1), Deadline(chain_id=1, deadline=0.0015, on_time=1), Deadline(chain_id=0, deadline=0.0015, on_time=1), Deadline(chain_id=1, deadline=0.0016, on_time=1), Deadline(chain_id=0, deadline=0.0016, on_time=1), Deadline(chain_id=0, deadline=0.0017, on_time=1), Deadline(chain_id=1, deadline=0.0017, on_time=1), Deadline(chain_id=1, deadline=0.0018, on_time=1), Deadline(chain_id=0, deadline=0.0018, on_time=1), Deadline(chain_id=0, deadline=0.0019, on_time=1), Deadline(chain_id=1, deadline=0.0019, on_time=1), Deadline(chain_id=1, deadline=0.002, on_time=1), Deadline(chain_id=0, deadline=0.002, on_time=1), Deadline(chain_id=0, deadline=0.0021, on_time=1), Deadline(chain_id=1, deadline=0.0021, on_time=0), Deadline(chain_id=1, deadline=0.0022, on_time=1), Deadline(chain_id=0, deadline=0.0022, on_time=1), Deadline(chain_id=1, deadline=0.0023, on_time=1), Deadline(chain_id=0, deadline=0.0023, on_time=1), Deadline(chain_id=0, deadline=0.0024, on_time=1), Deadline(chain_id=1, deadline=0.0024, on_time=1), Deadline(chain_id=0, deadline=0.0025, on_time=1), Deadline(chain_id=1, deadline=0.0025, on_time=1), Deadline(chain_id=1, deadline=0.0026, on_time=1), Deadline(chain_id=0, deadline=0.0026, on_time=1), Deadline(chain_id=0, deadline=0.0027, on_time=1), Deadline(chain_id=1, deadline=0.0027, on_time=1), Deadline(chain_id=1, deadline=0.0028, on_time=1), Deadline(chain_id=0, deadline=0.0028, on_time=1), Deadline(chain_id=0, deadline=0.0029, on_time=1), Deadline(chain_id=1, deadline=0.0029, on_time=1), Deadline(chain_id=1, deadline=0.003, on_time=1), Deadline(chain_id=0, deadline=0.003, on_time=1), Deadline(chain_id=0, deadline=0.0031, on_time=1), Deadline(chain_id=1, deadline=0.0031, on_time=0), Deadline(chain_id=1, deadline=0.0032, on_time=1), Deadline(chain_id=0, deadline=0.0032, on_time=0), Deadline(chain_id=1, deadline=0.0033, on_time=1), Deadline(chain_id=0, deadline=0.0033, on_time=0), Deadline(chain_id=1, deadline=0.0034, on_time=1), Deadline(chain_id=0, deadline=0.0034, on_time=1), Deadline(chain_id=0, deadline=0.0035, on_time=1), Deadline(chain_id=1, deadline=0.0035, on_time=0), Deadline(chain_id=0, deadline=0.0036, on_time=1), Deadline(chain_id=1, deadline=0.0036, on_time=1), Deadline(chain_id=0, deadline=0.0037, on_time=1), Deadline(chain_id=1, deadline=0.0037, on_time=0), Deadline(chain_id=1, deadline=0.0038, on_time=1), Deadline(chain_id=0, deadline=0.0038, on_time=0), Deadline(chain_id=0, deadline=0.0039, on_time=1), Deadline(chain_id=1, deadline=0.0039, on_time=0), Deadline(chain_id=1, deadline=0.004, on_time=1), Deadline(chain_id=0, deadline=0.004, on_time=0), Deadline(chain_id=0, deadline=0.0041, on_time=1), Deadline(chain_id=1, deadline=0.0041, on_time=0), Deadline(chain_id=0, deadline=0.0042, on_time=1), Deadline(chain_id=1, deadline=0.0042, on_time=0), Deadline(chain_id=1, deadline=0.0043, on_time=1), Deadline(chain_id=0, deadline=0.0043, on_time
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
2025-03-22 19:46:27 -04:00
|
|
|
"source": [
|
|
|
|
"@dataclass\n",
|
|
|
|
"class Deadline:\n",
|
|
|
|
" chain_id: int\n",
|
|
|
|
" deadline: float\n",
|
|
|
|
" on_time: bool\n",
|
|
|
|
"\n",
|
|
|
|
"def get_deadlines(data) -> list[Deadline]:\n",
|
|
|
|
" deadlines = []\n",
|
|
|
|
" for record in data:\n",
|
|
|
|
" if record[\"entry\"][\"operation\"] == \"next_deadline\" and \"on_time\" in record[\"entry\"]:\n",
|
|
|
|
" deadlines.append(Deadline(chain_id=record[\"entry\"][\"chain_id\"], deadline=record[\"entry\"][\"deadline\"], on_time=record[\"entry\"][\"on_time\"]))\n",
|
|
|
|
" return deadlines\n",
|
|
|
|
"\n",
|
|
|
|
"deadlines = get_deadlines(experiment_data)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2025-03-25 12:24:12 +01:00
|
|
|
"execution_count": 10,
|
2025-03-22 19:46:27 -04:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"application/vnd.jupyter.widget-view+json": {
|
2025-04-01 16:04:19 +02:00
|
|
|
"model_id": "4b5ad85d09334daea239c16327571d7f",
|
2025-03-22 19:46:27 -04:00
|
|
|
"version_major": 2,
|
|
|
|
"version_minor": 0
|
|
|
|
},
|
2025-04-01 16:04:19 +02:00
|
|
|
"image/png": "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
|
2025-03-22 19:46:27 -04:00
|
|
|
"text/html": [
|
|
|
|
"\n",
|
|
|
|
" <div style=\"display: inline-block;\">\n",
|
|
|
|
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
|
|
|
|
" Figure\n",
|
|
|
|
" </div>\n",
|
2025-04-01 16:04:19 +02:00
|
|
|
" <img src='data:image/png;base64,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
|
2025-03-22 19:46:27 -04:00
|
|
|
" </div>\n",
|
|
|
|
" "
|
|
|
|
],
|
|
|
|
"text/plain": [
|
|
|
|
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"# plot with lines for deadlines\n",
|
|
|
|
"fig, ax = plt.subplots()\n",
|
|
|
|
"for i, record in enumerate(records):\n",
|
|
|
|
" ax.broken_barh([(record.start_time, record.end_time - record.start_time)], (name_to_id[record.node_name] - 0.4, 0.8), facecolors='blue')\n",
|
|
|
|
"\n",
|
|
|
|
"# draw a vertical line for each deadline\n",
|
|
|
|
"for deadline in deadlines:\n",
|
|
|
|
" # may have to adjust the y value depending on your chain layout\n",
|
|
|
|
" ax.plot([deadline.deadline, deadline.deadline], [0, num_nodes], color='red')\n",
|
|
|
|
"\n",
|
|
|
|
"ax.set_yticks(range(num_nodes))\n",
|
|
|
|
"ax.set_yticklabels(name_to_id.keys())\n",
|
2025-03-25 12:24:12 +01:00
|
|
|
"plt.show()"
|
2025-03-22 19:46:27 -04:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": []
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"metadata": {
|
|
|
|
"kernelspec": {
|
2025-03-29 14:11:51 +01:00
|
|
|
"display_name": "Python 3 (ipykernel)",
|
2025-03-22 19:46:27 -04:00
|
|
|
"language": "python",
|
2025-03-29 14:11:51 +01:00
|
|
|
"name": "python3"
|
2025-03-22 19:46:27 -04:00
|
|
|
},
|
|
|
|
"language_info": {
|
|
|
|
"codemirror_mode": {
|
|
|
|
"name": "ipython",
|
|
|
|
"version": 3
|
|
|
|
},
|
|
|
|
"file_extension": ".py",
|
|
|
|
"mimetype": "text/x-python",
|
|
|
|
"name": "python",
|
|
|
|
"nbconvert_exporter": "python",
|
|
|
|
"pygments_lexer": "ipython3",
|
2025-03-25 12:24:12 +01:00
|
|
|
"version": "3.10.16"
|
2025-03-22 19:46:27 -04:00
|
|
|
}
|
|
|
|
},
|
|
|
|
"nbformat": 4,
|
2025-03-25 12:24:12 +01:00
|
|
|
"nbformat_minor": 4
|
2025-03-22 19:46:27 -04:00
|
|
|
}
|