{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"Using this notebook as reference: https://www.kaggle.com/jandal487/siim-covid19-classification-detection","metadata":{}},{"cell_type":"markdown","source":"# Prep","metadata":{}},{"cell_type":"code","source":"# Load Grassroots DICOM (GDCM) for xray DICOM files\n!pip install python-gdcm -q\n\n# Load glob2\n!pip install glob2\n\n# Load tqdm\n!pip install tqdm\n\n# !pip install --upgrade numpy==1.20.0 --no-binary","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:34:09.412859Z","iopub.execute_input":"2021-07-08T17:34:09.413316Z","iopub.status.idle":"2021-07-08T17:34:30.014004Z","shell.execute_reply.started":"2021-07-08T17:34:09.413244Z","shell.execute_reply":"2021-07-08T17:34:30.012821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Loading necessary packages\nimport os\nfrom datetime import datetime\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport glob2\nfrom tqdm.notebook import tqdm\nimport cv2\nimport gdcm\nimport pydicom\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\nfrom fastai.vision.all import *\nfrom fastai.medical.imaging import *\nfrom torchvision.utils import save_image","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-07-08T17:34:30.023755Z","iopub.execute_input":"2021-07-08T17:34:30.024213Z","iopub.status.idle":"2021-07-08T17:34:32.894408Z","shell.execute_reply.started":"2021-07-08T17:34:30.024154Z","shell.execute_reply":"2021-07-08T17:34:32.893408Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"SOURCE = '/kaggle/input/siim-covid19-detection'\nos.listdir(SOURCE)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:34:32.895914Z","iopub.execute_input":"2021-07-08T17:34:32.896205Z","iopub.status.idle":"2021-07-08T17:34:32.904984Z","shell.execute_reply.started":"2021-07-08T17:34:32.896177Z","shell.execute_reply":"2021-07-08T17:34:32.903994Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_image_level = pd.read_csv(f'{SOURCE}/train_image_level.csv')\ntrain_study_level = pd.read_csv(f'{SOURCE}/train_study_level.csv')\nsample_submission = pd.read_csv(f'{SOURCE}/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:34:32.906437Z","iopub.execute_input":"2021-07-08T17:34:32.906801Z","iopub.status.idle":"2021-07-08T17:34:33.001249Z","shell.execute_reply.started":"2021-07-08T17:34:32.906766Z","shell.execute_reply":"2021-07-08T17:34:32.999982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data Overview and processing","metadata":{}},{"cell_type":"code","source":"train_image_level.head(10)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:34:33.002822Z","iopub.execute_input":"2021-07-08T17:34:33.003165Z","iopub.status.idle":"2021-07-08T17:34:33.023625Z","shell.execute_reply.started":"2021-07-08T17:34:33.003132Z","shell.execute_reply":"2021-07-08T17:34:33.022716Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_study_level.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:34:33.024829Z","iopub.execute_input":"2021-07-08T17:34:33.025114Z","iopub.status.idle":"2021-07-08T17:34:33.036642Z","shell.execute_reply.started":"2021-07-08T17:34:33.025086Z","shell.execute_reply":"2021-07-08T17:34:33.035616Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_submission.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:34:33.038031Z","iopub.execute_input":"2021-07-08T17:34:33.038384Z","iopub.status.idle":"2021-07-08T17:34:33.055260Z","shell.execute_reply.started":"2021-07-08T17:34:33.038353Z","shell.execute_reply":"2021-07-08T17:34:33.054253Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# XRAY Files\ndef get_dcm_files(path, recurse=True, folders=None):\n    \"Get image files in `path` recursively, only in `folders`, if specified.\"\n    return get_files(path, extensions=['.dcm'], recurse=recurse, folders=folders)\n\n# Read DICOM files\nTRAIN_DIR = f'{SOURCE}/train/'\nTEST_DIR =  f'{SOURCE}/test/'\n\ntrain_dcm = get_dcm_files(TRAIN_DIR)\ntest_dcm = get_dcm_files(TEST_DIR)\n\n# Looking on a sample XRAY\nxray_sample = train_dcm[1].dcmread()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:34:33.058548Z","iopub.execute_input":"2021-07-08T17:34:33.058957Z","iopub.status.idle":"2021-07-08T17:35:00.237257Z","shell.execute_reply.started":"2021-07-08T17:34:33.058924Z","shell.execute_reply":"2021-07-08T17:35:00.236015Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"xray_sample.show()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:00.239171Z","iopub.execute_input":"2021-07-08T17:35:00.239466Z","iopub.status.idle":"2021-07-08T17:35:04.784022Z","shell.execute_reply.started":"2021-07-08T17:35:00.239437Z","shell.execute_reply":"2021-07-08T17:35:04.783079Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# combining data from different tables\ntrain_study_level['StudyInstanceUID'] = train_study_level['id'].apply(lambda x: x[:-6])\n\ntrain_map = train_image_level.merge(train_study_level, on='StudyInstanceUID')\ntrain_map['ImageID'] = train_map['id_x'].apply(lambda x: x[:-6])\n\ntrain_map.drop('id_y', axis=1, inplace=True)\ntrain_map.drop('id_x', axis=1, inplace=True)\n\ntrain_map.set_index('ImageID', inplace=True)\ntrain_map.sort_values('StudyInstanceUID', inplace=True)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:04.785171Z","iopub.execute_input":"2021-07-08T17:35:04.785587Z","iopub.status.idle":"2021-07-08T17:35:04.827285Z","shell.execute_reply.started":"2021-07-08T17:35:04.785556Z","shell.execute_reply":"2021-07-08T17:35:04.826310Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_map.head(2)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:04.828497Z","iopub.execute_input":"2021-07-08T17:35:04.828960Z","iopub.status.idle":"2021-07-08T17:35:04.841943Z","shell.execute_reply.started":"2021-07-08T17:35:04.828924Z","shell.execute_reply":"2021-07-08T17:35:04.840838Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_map['StudyInstanceUID'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:04.843340Z","iopub.execute_input":"2021-07-08T17:35:04.843797Z","iopub.status.idle":"2021-07-08T17:35:04.869761Z","shell.execute_reply.started":"2021-07-08T17:35:04.843762Z","shell.execute_reply":"2021-07-08T17:35:04.868350Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_map[train_map['StudyInstanceUID'] == '0fd2db233deb']","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:04.871412Z","iopub.execute_input":"2021-07-08T17:35:04.871785Z","iopub.status.idle":"2021-07-08T17:35:04.891980Z","shell.execute_reply.started":"2021-07-08T17:35:04.871748Z","shell.execute_reply":"2021-07-08T17:35:04.890875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# functions to show images with boxes or training images\n\nimport re\nimport matplotlib.patches as patches\n\ndef show_img_with_boxes(image, boxes):\n    fig, ax = plt.subplots()\n    fig.set_size_inches(10, 10)\n\n    plt.imshow(image.dcmread().pixel_array)\n\n    for box in boxes:\n        ax.add_patch(patches.Rectangle((float(box[0]), float(box[1])),\n                            float(box[2]), float(box[3]),\n                            edgecolor='red',\n                            fill=False))\n        \n    plt.show()\n\ndef show_training_img(image_num=0):\n\n    file_path = str(train_dcm[image_num])\n    img_pattern = \"\\/([0-z]{12})\\.\"\n    image_id = re.findall(img_pattern, file_path)[0]\n\n    boxes_str = train_map.loc[image_id].boxes\n    box_pattern = \"{'x': ([0-9]*\\.[0-9]*), 'y': ([0-9]*\\.[0-9]*), 'width': ([0-9]*\\.[0-9]*), 'height': ([0-9]*\\.[0-9]*)}\"\n\n    if type(boxes_str) == str:\n        boxes = re.findall(box_pattern, boxes_str)\n    else:\n        boxes = []\n    \n    print(train_map.loc[image_id][['Negative for Pneumonia',\n       'Typical Appearance', 'Indeterminate Appearance',\n       'Atypical Appearance']])\n    show_img_with_boxes(train_dcm[image_num], boxes)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:04.893598Z","iopub.execute_input":"2021-07-08T17:35:04.893972Z","iopub.status.idle":"2021-07-08T17:35:04.906034Z","shell.execute_reply.started":"2021-07-08T17:35:04.893933Z","shell.execute_reply":"2021-07-08T17:35:04.904766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(2):\n    show_training_img(i)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:04.907856Z","iopub.execute_input":"2021-07-08T17:35:04.908241Z","iopub.status.idle":"2021-07-08T17:35:08.252492Z","shell.execute_reply.started":"2021-07-08T17:35:04.908202Z","shell.execute_reply":"2021-07-08T17:35:08.251421Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# EDA for the box sizes - searching for patterns","metadata":{}},{"cell_type":"code","source":"boxes_data = pd.DataFrame(columns=['x', 'y', 'width', 'height'])\n\nfor index, row in train_map.iterrows():\n    boxes_str = row.boxes\n    box_pattern = \"{'x': ([0-9]*\\.[0-9]*), 'y': ([0-9]*\\.[0-9]*), 'width': ([0-9]*\\.[0-9]*), 'height': ([0-9]*\\.[0-9]*)}\"\n    if type(boxes_str) == str:\n        boxes = re.findall(box_pattern, boxes_str)\n        for box in boxes:\n            box_dict = {'x': float(box[0]), 'y': float(box[1]),\n                       'width': float(box[2]), 'height': float(box[3])}\n            boxes_data = boxes_data.append(box_dict, ignore_index=True)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:08.254001Z","iopub.execute_input":"2021-07-08T17:35:08.254323Z","iopub.status.idle":"2021-07-08T17:35:20.562614Z","shell.execute_reply.started":"2021-07-08T17:35:08.254292Z","shell.execute_reply":"2021-07-08T17:35:20.561606Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"boxes_data.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:20.563724Z","iopub.execute_input":"2021-07-08T17:35:20.564012Z","iopub.status.idle":"2021-07-08T17:35:20.577328Z","shell.execute_reply.started":"2021-07-08T17:35:20.563983Z","shell.execute_reply":"2021-07-08T17:35:20.576279Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"boxes_data.describe()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:20.578742Z","iopub.execute_input":"2021-07-08T17:35:20.579035Z","iopub.status.idle":"2021-07-08T17:35:20.614203Z","shell.execute_reply.started":"2021-07-08T17:35:20.579007Z","shell.execute_reply":"2021-07-08T17:35:20.613113Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.displot(x=boxes_data['width'])","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:20.615498Z","iopub.execute_input":"2021-07-08T17:35:20.615800Z","iopub.status.idle":"2021-07-08T17:35:21.001236Z","shell.execute_reply.started":"2021-07-08T17:35:20.615771Z","shell.execute_reply":"2021-07-08T17:35:21.000147Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.displot(x=boxes_data['height'])","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:21.002586Z","iopub.execute_input":"2021-07-08T17:35:21.002922Z","iopub.status.idle":"2021-07-08T17:35:21.354402Z","shell.execute_reply.started":"2021-07-08T17:35:21.002891Z","shell.execute_reply":"2021-07-08T17:35:21.353161Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.scatterplot(data=boxes_data, x='width', y='height')","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:21.355985Z","iopub.execute_input":"2021-07-08T17:35:21.356324Z","iopub.status.idle":"2021-07-08T17:35:21.560316Z","shell.execute_reply.started":"2021-07-08T17:35:21.356292Z","shell.execute_reply":"2021-07-08T17:35:21.559236Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.displot(boxes_data['height']/boxes_data['width'], kde=True)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:21.561909Z","iopub.execute_input":"2021-07-08T17:35:21.562237Z","iopub.status.idle":"2021-07-08T17:35:22.242819Z","shell.execute_reply.started":"2021-07-08T17:35:21.562205Z","shell.execute_reply":"2021-07-08T17:35:22.241768Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.cluster import KMeans\n\n# kmeans for width and height data of boxes\nbox_sizes = boxes_data[['width', 'height']]\nkmeans = KMeans(n_clusters=11)\nkmeans.fit(box_sizes[['width', 'height']])\nbox_sizes['labels'] = kmeans.labels_\n\nsns.scatterplot(data=box_sizes, x='width', y='height', hue='labels', palette='rainbow')\nprint(box_sizes['labels'].value_counts())","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:22.244186Z","iopub.execute_input":"2021-07-08T17:35:22.244503Z","iopub.status.idle":"2021-07-08T17:35:24.217402Z","shell.execute_reply.started":"2021-07-08T17:35:22.244473Z","shell.execute_reply":"2021-07-08T17:35:24.216301Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# kmeans considering ratio of height / width\nbox_size_ratio = boxes_data[['width', 'height']]\nbox_size_ratio['ratio'] = box_size_ratio['height'] / box_size_ratio['width'] * 1000 # adjusting scale of ratio\nkmeans2 = KMeans(n_clusters=7)\nkmeans2.fit(box_size_ratio[['width', 'height', 'ratio']])\nbox_size_ratio['labels'] = kmeans2.labels_\n\nsns.scatterplot(data=box_size_ratio, x='width', y='height', hue='labels', palette='rainbow')\nprint(box_size_ratio['labels'].value_counts())","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:24.218791Z","iopub.execute_input":"2021-07-08T17:35:24.219093Z","iopub.status.idle":"2021-07-08T17:35:25.535321Z","shell.execute_reply.started":"2021-07-08T17:35:24.219064Z","shell.execute_reply":"2021-07-08T17:35:25.534323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# exploring the average boxes from the first kmeans (just width/height)\ncenters = kmeans.cluster_centers_\ncenters = pd.DataFrame(centers, columns=['width', 'height'])\ncenters['ratio'] = centers['height'] / centers['width']\n\nprint(centers['ratio'])\nsns.displot(centers['ratio'], binwidth=0.1)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:25.536693Z","iopub.execute_input":"2021-07-08T17:35:25.537030Z","iopub.status.idle":"2021-07-08T17:35:25.823295Z","shell.execute_reply.started":"2021-07-08T17:35:25.536998Z","shell.execute_reply":"2021-07-08T17:35:25.822079Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# visualization\nspacing_x = 350\nspacing_y = 200\naverage_boxes = centers\n\naverage_boxes = average_boxes.sort_values('width', ascending=False)\n\naverage_boxes['x'] = range(spacing_x, spacing_x*11 + 1, spacing_x)\naverage_boxes['y'] = range(spacing_y, spacing_y*11 + 1, spacing_y)\n\naverage_boxes = average_boxes[['x', 'y', 'width', 'height', 'ratio']] # to reorder columns\naverage_boxes = average_boxes.drop('ratio', axis=1).to_numpy()  # drop ratio\n\nshow_img_with_boxes(train_dcm[1], average_boxes)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:25.826996Z","iopub.execute_input":"2021-07-08T17:35:25.827358Z","iopub.status.idle":"2021-07-08T17:35:27.695118Z","shell.execute_reply.started":"2021-07-08T17:35:25.827327Z","shell.execute_reply":"2021-07-08T17:35:27.694112Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# check image pixel data","metadata":{}},{"cell_type":"code","source":"train_dcm[0].dcmread().pixel_array.shape","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:27.696690Z","iopub.execute_input":"2021-07-08T17:35:27.697016Z","iopub.status.idle":"2021-07-08T17:35:27.724546Z","shell.execute_reply.started":"2021-07-08T17:35:27.696985Z","shell.execute_reply":"2021-07-08T17:35:27.723739Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# check sizes - JUST A SAMPLE\nsizes_list = []\nfor dcm in train_dcm[:100]:\n    sizes_list.append(dcm.dcmread().pixel_array.shape)\n\nimage_array=np.array(sizes_list)\n","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:27.725529Z","iopub.execute_input":"2021-07-08T17:35:27.725831Z","iopub.status.idle":"2021-07-08T17:35:48.874007Z","shell.execute_reply.started":"2021-07-08T17:35:27.725799Z","shell.execute_reply":"2021-07-08T17:35:48.872821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_sizes = pd.DataFrame(image_array, columns=['width', 'height'])","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:48.875289Z","iopub.execute_input":"2021-07-08T17:35:48.875590Z","iopub.status.idle":"2021-07-08T17:35:48.881249Z","shell.execute_reply.started":"2021-07-08T17:35:48.875562Z","shell.execute_reply":"2021-07-08T17:35:48.880182Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_sizes.head()","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:48.882745Z","iopub.execute_input":"2021-07-08T17:35:48.883097Z","iopub.status.idle":"2021-07-08T17:35:48.900942Z","shell.execute_reply.started":"2021-07-08T17:35:48.883064Z","shell.execute_reply":"2021-07-08T17:35:48.899795Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_sizes['ratio'] = img_sizes['height']/img_sizes['width']","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:48.902674Z","iopub.execute_input":"2021-07-08T17:35:48.903068Z","iopub.status.idle":"2021-07-08T17:35:48.912965Z","shell.execute_reply.started":"2021-07-08T17:35:48.903031Z","shell.execute_reply":"2021-07-08T17:35:48.911800Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.displot(img_sizes['ratio'])","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:48.914519Z","iopub.execute_input":"2021-07-08T17:35:48.914969Z","iopub.status.idle":"2021-07-08T17:35:49.244143Z","shell.execute_reply.started":"2021-07-08T17:35:48.914930Z","shell.execute_reply":"2021-07-08T17:35:49.243348Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_sizes['width'].value_counts().head(5)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:49.245290Z","iopub.execute_input":"2021-07-08T17:35:49.245761Z","iopub.status.idle":"2021-07-08T17:35:49.253328Z","shell.execute_reply.started":"2021-07-08T17:35:49.245713Z","shell.execute_reply":"2021-07-08T17:35:49.252408Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_sizes['height'].value_counts().head(5)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:49.254758Z","iopub.execute_input":"2021-07-08T17:35:49.255081Z","iopub.status.idle":"2021-07-08T17:35:49.268259Z","shell.execute_reply.started":"2021-07-08T17:35:49.255049Z","shell.execute_reply":"2021-07-08T17:35:49.267218Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_sizes['ratio'].value_counts().head(5)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:49.269523Z","iopub.execute_input":"2021-07-08T17:35:49.269884Z","iopub.status.idle":"2021-07-08T17:35:49.281515Z","shell.execute_reply.started":"2021-07-08T17:35:49.269845Z","shell.execute_reply":"2021-07-08T17:35:49.280398Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img_sizes.value_counts().head(5)","metadata":{"execution":{"iopub.status.busy":"2021-07-08T17:35:49.282910Z","iopub.execute_input":"2021-07-08T17:35:49.283216Z","iopub.status.idle":"2021-07-08T17:35:49.298653Z","shell.execute_reply.started":"2021-07-08T17:35:49.283188Z","shell.execute_reply":"2021-07-08T17:35:49.297860Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}