|
10 | 10 | },
|
11 | 11 | {
|
12 | 12 | "cell_type": "code",
|
13 |
| - "execution_count": 4, |
| 13 | + "execution_count": 1, |
14 | 14 | "id": "d3aa7606-0f50-4f05-b104-ad4521c80406",
|
15 | 15 | "metadata": {
|
16 | 16 | "editable": true,
|
|
89 | 89 | },
|
90 | 90 | {
|
91 | 91 | "cell_type": "code",
|
92 |
| - "execution_count": 6, |
| 92 | + "execution_count": 3, |
93 | 93 | "id": "0a814add-f545-4663-8b06-39c40b636509",
|
94 | 94 | "metadata": {
|
95 | 95 | "editable": true,
|
|
102 | 102 | },
|
103 | 103 | "outputs": [
|
104 | 104 | {
|
105 |
| - "ename": "KeyError", |
106 |
| - "evalue": "'Course Developers'", |
107 |
| - "output_type": "error", |
108 |
| - "traceback": [ |
109 |
| - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
110 |
| - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", |
111 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/indexes/base.py:3805\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3804\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3805\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3806\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", |
112 |
| - "File \u001b[0;32mindex.pyx:167\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", |
113 |
| - "File \u001b[0;32mindex.pyx:196\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", |
114 |
| - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7081\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", |
115 |
| - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7089\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", |
116 |
| - "\u001b[0;31mKeyError\u001b[0m: 'Course Developers'", |
117 |
| - "\nThe above exception was the direct cause of the following exception:\n", |
118 |
| - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", |
119 |
| - "Cell \u001b[0;32mIn[6], line 29\u001b[0m\n\u001b[1;32m 17\u001b[0m html_table_header \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m<table style=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwidth: 100\u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124m; text-align: center; border: 1px solid black; border-collapse: collapse;\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m>\u001b[39m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;124m<tr>\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[38;5;124m</tr>\u001b[39m\n\u001b[1;32m 26\u001b[0m \u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 28\u001b[0m \u001b[38;5;66;03m# Apply the function and create the HTML table rows\u001b[39;00m\n\u001b[0;32m---> 29\u001b[0m table_rows \u001b[38;5;241m=\u001b[39m \u001b[43mprevious_courses_df\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgenerate_html_row\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mtolist()\n\u001b[1;32m 31\u001b[0m \u001b[38;5;66;03m# Join the table rows into a single block\u001b[39;00m\n\u001b[1;32m 32\u001b[0m html_table \u001b[38;5;241m=\u001b[39m html_table_header \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(table_rows) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m</table>\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", |
120 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/frame.py:10374\u001b[0m, in \u001b[0;36mDataFrame.apply\u001b[0;34m(self, func, axis, raw, result_type, args, by_row, engine, engine_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 10360\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcore\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mapply\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m frame_apply\n\u001b[1;32m 10362\u001b[0m op \u001b[38;5;241m=\u001b[39m frame_apply(\n\u001b[1;32m 10363\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 10364\u001b[0m func\u001b[38;5;241m=\u001b[39mfunc,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 10372\u001b[0m kwargs\u001b[38;5;241m=\u001b[39mkwargs,\n\u001b[1;32m 10373\u001b[0m )\n\u001b[0;32m> 10374\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mop\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39m__finalize__(\u001b[38;5;28mself\u001b[39m, method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mapply\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", |
121 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/apply.py:916\u001b[0m, in \u001b[0;36mFrameApply.apply\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 913\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mraw:\n\u001b[1;32m 914\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mapply_raw(engine\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mengine, engine_kwargs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mengine_kwargs)\n\u001b[0;32m--> 916\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply_standard\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", |
122 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/apply.py:1063\u001b[0m, in \u001b[0;36mFrameApply.apply_standard\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1061\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mapply_standard\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1062\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mengine \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpython\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m-> 1063\u001b[0m results, res_index \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply_series_generator\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1064\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1065\u001b[0m results, res_index \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mapply_series_numba()\n", |
123 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/apply.py:1081\u001b[0m, in \u001b[0;36mFrameApply.apply_series_generator\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1078\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m option_context(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmode.chained_assignment\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, v \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(series_gen):\n\u001b[1;32m 1080\u001b[0m \u001b[38;5;66;03m# ignore SettingWithCopy here in case the user mutates\u001b[39;00m\n\u001b[0;32m-> 1081\u001b[0m results[i] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1082\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(results[i], ABCSeries):\n\u001b[1;32m 1083\u001b[0m \u001b[38;5;66;03m# If we have a view on v, we need to make a copy because\u001b[39;00m\n\u001b[1;32m 1084\u001b[0m \u001b[38;5;66;03m# series_generator will swap out the underlying data\u001b[39;00m\n\u001b[1;32m 1085\u001b[0m results[i] \u001b[38;5;241m=\u001b[39m results[i]\u001b[38;5;241m.\u001b[39mcopy(deep\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n", |
124 |
| - "Cell \u001b[0;32mIn[6], line 14\u001b[0m, in \u001b[0;36mgenerate_html_row\u001b[0;34m(row)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgenerate_html_row\u001b[39m(row):\n\u001b[0;32m---> 14\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m<tr><td>\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCourse Name\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m</td><td>\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCourse Info\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m</td><td>\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCourse Leader\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m</td><td>\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCourse Helpers\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m</td><td>\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mCourse Developers\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m</td></tr>\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", |
125 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/series.py:1121\u001b[0m, in \u001b[0;36mSeries.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1118\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[key]\n\u001b[1;32m 1120\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m key_is_scalar:\n\u001b[0;32m-> 1121\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_value\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1123\u001b[0m \u001b[38;5;66;03m# Convert generator to list before going through hashable part\u001b[39;00m\n\u001b[1;32m 1124\u001b[0m \u001b[38;5;66;03m# (We will iterate through the generator there to check for slices)\u001b[39;00m\n\u001b[1;32m 1125\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_iterator(key):\n", |
126 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/series.py:1237\u001b[0m, in \u001b[0;36mSeries._get_value\u001b[0;34m(self, label, takeable)\u001b[0m\n\u001b[1;32m 1234\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[label]\n\u001b[1;32m 1236\u001b[0m \u001b[38;5;66;03m# Similar to Index.get_value, but we do not fall back to positional\u001b[39;00m\n\u001b[0;32m-> 1237\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1239\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(loc):\n\u001b[1;32m 1240\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[loc]\n", |
127 |
| - "File \u001b[0;32m~/miniconda3/envs/CfRR/lib/python3.9/site-packages/pandas/core/indexes/base.py:3812\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3807\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(casted_key, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[1;32m 3808\u001b[0m \u001b[38;5;28misinstance\u001b[39m(casted_key, abc\u001b[38;5;241m.\u001b[39mIterable)\n\u001b[1;32m 3809\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(x, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m casted_key)\n\u001b[1;32m 3810\u001b[0m ):\n\u001b[1;32m 3811\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[0;32m-> 3812\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3813\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3814\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3815\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3816\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3817\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", |
128 |
| - "\u001b[0;31mKeyError\u001b[0m: 'Course Developers'" |
129 |
| - ] |
| 105 | + "data": { |
| 106 | + "text/html": [ |
| 107 | + "\n", |
| 108 | + "<table style='width: 100%; text-align: center; border: 1px solid black; border-collapse: collapse;'>\n", |
| 109 | + "<tr>\n", |
| 110 | + "<th>Course Name</th>\n", |
| 111 | + "<th>Course Date</th>\n", |
| 112 | + "<th>Course Leader</th>\n", |
| 113 | + "<th>Course Helpers</th>\n", |
| 114 | + "</tr>\n", |
| 115 | + "<tr><td>Regression Analysis with R</td><td>Jun-24</td><td>Eilis Hannon</td><td>Cuihong Xie, Emma Walker</td></tr>\n", |
| 116 | + "<tr><td>Introduction to MATLAB</td><td>Jun-24</td><td>Jake Hollins</td><td>Jonathan Witton, Han Wu, Fred Wobus</td></tr>\n", |
| 117 | + "<tr><td>Parallel Computing </td><td>Jun-24</td><td>Ed Hone</td><td>Fred Wobus, Han Wu, Stephen Cook</td></tr>\n", |
| 118 | + "<tr><td>Introduction to R</td><td>Jun-24</td><td>Ricky Olivier</td><td>Michelle Ledbetter, Theresa Wacker, Jingzhan Lu</td></tr>\n", |
| 119 | + "<tr><td>Intermediate Version Control</td><td>May-24</td><td>Stephen Cook</td><td>Tom Wilson, Liam Berrisford</td></tr>\n", |
| 120 | + "<tr><td>Python for Data Analysis</td><td>May-24</td><td>Michael Saunby</td><td>John Luff, Simon Kirby</td></tr>\n", |
| 121 | + "<tr><td>Introduction to HPC and ISCA</td><td>May-24</td><td>Ricky Olivier</td><td>Fred Wobus, Matt West</td></tr>\n", |
| 122 | + "<tr><td>Introduction to Version Control</td><td>May-24</td><td>Linus Tata </td><td>John Luff, David Studholme, Simon Kirby</td></tr>\n", |
| 123 | + "<tr><td>Advanced Regression Analysis with R</td><td>Apr-24</td><td>Eilis Hannon</td><td>Becky Ward, Cuihong Xie, Ishaan Sinha</td></tr>\n", |
| 124 | + "<tr><td>Software Development Best Practice</td><td>Apr-24</td><td>Fliss Guest</td><td>Joseph Paulo</td></tr>\n", |
| 125 | + "<tr><td>Computational Thinking</td><td>Apr-24</td><td>Michael Saunby</td><td>Eilis Hannon, Fotis Tsiroukis, Liam Berrisford</td></tr>\n", |
| 126 | + "<tr><td>Introduction to Python</td><td>Apr-24</td><td>Matt Johns</td><td>Tom Hawes, Liam Berrisford, Jack Morton, Finley Gibson</td></tr>\n", |
| 127 | + "<tr><td>Working With Data in R </td><td>Mar-24</td><td>Tom Hawes</td><td>Ali Hudson, Emma Walker</td></tr>\n", |
| 128 | + "<tr><td>Introduction to UNIX </td><td>Mar-24</td><td>Eilis Hannon</td><td>Linus Tata, Han Wu</td></tr>\n", |
| 129 | + "<tr><td>Regression Analysis with R</td><td>Jan-24</td><td>Eilis Hannon</td><td>Alice Franklin, Cuihong Xie</td></tr>\n", |
| 130 | + "<tr><td>Introduction to R</td><td>Jan-24</td><td>Jamie Harrison</td><td>Alexandra Gardner, Cuihong Xie, Becky Ward Alice Franklin</td></tr>\n", |
| 131 | + "<tr><td>Introduction to Version Control</td><td>Dec-23</td><td>Linus Tata </td><td>Matt Johns, Han Wu</td></tr>\n", |
| 132 | + "<tr><td>Introduction to HPC and ISCA</td><td>Nov-23</td><td>Ricky Olivier</td><td>Matt Johns, Matt West, Han Wu</td></tr>\n", |
| 133 | + "<tr><td>Introduction to julia</td><td>November/December 2023</td><td>George Datseris</td><td>Ed Hone, Nick Owens</td></tr>\n", |
| 134 | + "<tr><td>Introduction to Python</td><td>Nov-23</td><td>Michael Saunby</td><td>John Luff, Hao Meng, Mustafa Albalushi</td></tr>\n", |
| 135 | + "<tr><td>Introduction to UNIX </td><td>Oct-23</td><td>Simon Kirby</td><td>Stephen Cook, Ali Hudson, Kartik Chundru </td></tr></table>" |
| 136 | + ], |
| 137 | + "text/plain": [ |
| 138 | + "<IPython.core.display.HTML object>" |
| 139 | + ] |
| 140 | + }, |
| 141 | + "metadata": {}, |
| 142 | + "output_type": "display_data" |
130 | 143 | }
|
131 | 144 | ],
|
132 | 145 | "source": [
|
|
161 | 174 | "<table style='width: 100%; text-align: center; border: 1px solid black; border-collapse: collapse;'>\n",
|
162 | 175 | "<tr>\n",
|
163 | 176 | "<th>Course Name</th>\n",
|
164 |
| - "<th>Course Info</th>\n", |
| 177 | + "<th>Course Date</th>\n", |
165 | 178 | "<th>Course Leader</th>\n",
|
166 | 179 | "<th>Course Helpers</th>\n",
|
167 | 180 | "</tr>\n",
|
|
0 commit comments