{"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":"code","source":"import os\nimport cv2\nimport tqdm\nimport glob\n\nimport pydicom\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\n\nimport scipy.ndimage as ndi\nimport matplotlib.pyplot as plt\nimport matplotlib.animation as animation\nfrom matplotlib.widgets import Slider\n\nfrom IPython.display import HTML\n\ndf = pd.read_csv('../input/rsna-miccai-brain-tumor-radiogenomic-classification/train_labels.csv')\ndf.sample(5)","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:14:33.064441Z","iopub.execute_input":"2022-02-07T18:14:33.065122Z","iopub.status.idle":"2022-02-07T18:14:34.544097Z","shell.execute_reply.started":"2022-02-07T18:14:33.065083Z","shell.execute_reply":"2022-02-07T18:14:34.543472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(5, 5))\nsns.countplot(data=df, x=\"MGMT_value\")","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:15:51.367910Z","iopub.execute_input":"2022-02-07T18:15:51.368400Z","iopub.status.idle":"2022-02-07T18:15:51.537765Z","shell.execute_reply.started":"2022-02-07T18:15:51.368350Z","shell.execute_reply":"2022-02-07T18:15:51.536718Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_train_path = '../input/rsna-miccai-brain-tumor-radiogenomic-classification/train'\nmpMRI = (\"FLAIR\", \"T1w\", \"T1wCE\", \"T2w\")\n","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:15:52.740202Z","iopub.execute_input":"2022-02-07T18:15:52.740521Z","iopub.status.idle":"2022-02-07T18:15:52.745474Z","shell.execute_reply.started":"2022-02-07T18:15:52.740471Z","shell.execute_reply":"2022-02-07T18:15:52.744339Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_dicom(path):\n    dicom = pydicom.read_file(path)\n    image = dicom.pixel_array\n    image = image - np.min(image)\n    if np.max(image) != 0:\n        image = image / np.max(image)\n    image = (image * 255).astype(np.uint8)\n    return image\n\n\ndef load_volume(braTS21id):\n    patient_path = os.path.join(base_train_path, braTS21id)\n    scans = {}\n    for scan in mpMRI:\n        filepaths = sorted(glob.glob(os.path.join(patient_path, scan,'*')), key=lambda x: int(x[:-4].split(\"-\")[-1]))\n        volume = load_dicom(filepaths[0])\n        for i in range(1, len(filepaths)):\n            img = load_dicom(filepaths[i])\n            volume = np.dstack((volume, img))\n        volume = volume.transpose((2,0,1))\n        _volume = {scan: volume}\n        scans.update(_volume)\n    return scans","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:15:56.152645Z","iopub.execute_input":"2022-02-07T18:15:56.152926Z","iopub.status.idle":"2022-02-07T18:15:56.162008Z","shell.execute_reply.started":"2022-02-07T18:15:56.152896Z","shell.execute_reply":"2022-02-07T18:15:56.160789Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def visualize_scans(braTS21id, mgmt_value):\n    fig, ax = plt.subplots(1,4)\n    \n    patient_path = os.path.join(base_train_path, braTS21id)\n    for i, scan in enumerate(mpMRI):\n        filepaths = sorted(glob.glob(os.path.join(patient_path, scan,'*')), key=lambda x: int(x[:-4].split(\"-\")[-1]))\n        _mid = len(filepaths) // 2\n        image = load_dicom(filepaths[_mid])\n        ax[i].imshow(image, cmap='gray')\n        ax[i].set_title(scan, fontsize=16)\n        ax[i].axis(\"off\")\n     \n    plt.suptitle(f\"MGMT_value: {mgmt_value}\", fontsize=16)\n    plt.show()\n    \ndef create_animation(images, title):\n    fig = plt.figure(figsize=(8,8))\n\n    ims = []\n    for image in range(0,images.shape[0]):\n        im = plt.imshow(images[image,:,:], animated=True, cmap='gray')\n        plt.axis(\"off\")\n        ims.append([im])\n    \n    plt.title(title)\n    ani = animation.ArtistAnimation(fig, ims, interval=100, blit=False, repeat_delay=1000)\n    plt.close()\n    return ani","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:15:56.990494Z","iopub.execute_input":"2022-02-07T18:15:56.991309Z","iopub.status.idle":"2022-02-07T18:15:57.000345Z","shell.execute_reply.started":"2022-02-07T18:15:56.991261Z","shell.execute_reply":"2022-02-07T18:15:56.999671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample = df.sample(10)\n\n_brats21ids = sample[\"BraTS21ID\"].values\n_mgmt_values = sample[\"MGMT_value\"].values\n\nfor _brats21id, _mgmt_value in zip(_brats21ids, _mgmt_values):\n     visualize_scans(braTS21id=str(_brats21id).zfill(5), mgmt_value=_mgmt_value)","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:15:58.905477Z","iopub.execute_input":"2022-02-07T18:15:58.906397Z","iopub.status.idle":"2022-02-07T18:16:04.800775Z","shell.execute_reply.started":"2022-02-07T18:15:58.906353Z","shell.execute_reply":"2022-02-07T18:16:04.799697Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample = df.sample(3)\nbrats21ids = sample[\"BraTS21ID\"].values\nmgmt_value = sample[\"MGMT_value\"].values","metadata":{"execution":{"iopub.status.busy":"2022-02-05T15:24:09.647362Z","iopub.execute_input":"2022-02-05T15:24:09.647619Z","iopub.status.idle":"2022-02-05T15:24:09.652427Z","shell.execute_reply.started":"2022-02-05T15:24:09.647597Z","shell.execute_reply":"2022-02-05T15:24:09.651812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"volume1 = load_volume(str(brats21ids[0]).zfill(5))\n_flair1 = volume1['FLAIR']\n_t1w1 = volume1['T1w']\n_t1wce1 = volume1['T1wCE']\n_t2w1 = volume1['T2w']\n","metadata":{"execution":{"iopub.status.busy":"2022-02-05T11:53:00.360432Z","iopub.execute_input":"2022-02-05T11:53:00.361139Z","iopub.status.idle":"2022-02-05T11:53:02.811365Z","shell.execute_reply.started":"2022-02-05T11:53:00.361097Z","shell.execute_reply":"2022-02-05T11:53:02.810539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_flair1,title=\"patient id: \" + str(brats21ids[0]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[0]) + \"  scan type: FLAIR\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t1w1,title=\"patient id: \" + str(brats21ids[0]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[0]) + \"  scan type: T1w\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t1wce1,title=\"patient id: \" + str(brats21ids[0]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[0]) + \"  scan type: T1wCE\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t2w1,title=\"patient id: \" + str(brats21ids[0]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[0]) + \"  scan type: T2w\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"volume2 = load_volume(str(brats21ids[1]).zfill(5))\n_flair2 = volume2['FLAIR']\n_t1w2 = volume2['T1w']\n_t1wce2 = volume2['T1wCE']\n_t2w2 = volume2['T2w']","metadata":{"execution":{"iopub.status.busy":"2022-02-05T11:53:02.813361Z","iopub.execute_input":"2022-02-05T11:53:02.813977Z","iopub.status.idle":"2022-02-05T11:53:08.943687Z","shell.execute_reply.started":"2022-02-05T11:53:02.813934Z","shell.execute_reply":"2022-02-05T11:53:08.942585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_flair2,title=\"patient id: \" + str(brats21ids[1]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[1]) + \"  scan type: FLAIR\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t1w2,title=\"patient id: \" + str(brats21ids[1]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[1]) + \"  scan type: T1w\")\nHTML(ani.to_jshtml())","metadata":{"execution":{"iopub.status.busy":"2022-02-05T11:53:28.826497Z","iopub.execute_input":"2022-02-05T11:53:28.826756Z","iopub.status.idle":"2022-02-05T11:53:43.30066Z","shell.execute_reply.started":"2022-02-05T11:53:28.826717Z","shell.execute_reply":"2022-02-05T11:53:43.298786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t1wce2,title=\"patient id: \" + str(brats21ids[1]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[1]) + \"  scan type: T1wCE\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t2w2,title=\"patient id: \" + str(brats21ids[1]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[1]) + \"  scan type: T2w\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"volume3 = load_volume(str(brats21ids[2]).zfill(5))\n_flair3 = volume3['FLAIR']\n_t1w3 = volume3['T1w']\n_t1wce3 = volume3['T1wCE']\n_t2w3 = volume3['T2w']","metadata":{"execution":{"iopub.status.busy":"2022-02-05T11:53:08.944968Z","iopub.execute_input":"2022-02-05T11:53:08.945172Z","iopub.status.idle":"2022-02-05T11:53:14.574947Z","shell.execute_reply.started":"2022-02-05T11:53:08.945144Z","shell.execute_reply":"2022-02-05T11:53:14.57409Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_flair3,title=\"patient id: \" + str(brats21ids[2]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[2]) + \"  scan type: FLAIR\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t1w3,title=\"patient id: \" + str(brats21ids[2]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[2]) + \"  scan type: T1w\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t1wce3,title=\"patient id: \" + str(brats21ids[2]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[2]) + \"  scan type: T1wCE\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ani = create_animation(_t2w3,title=\"patient id: \" + str(brats21ids[2]).zfill(5) + \"  MGMT: \"+ str(mgmt_value[2]) + \"  scan type: T2w\")\nHTML(ani.to_jshtml())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def depthwise_mean(brats21id):\n    volumes = load_volume(brats21id)\n    means = {}\n    for scan in mpMRI:\n        volume = volumes[scan]\n        size = volume.shape\n        new = volume[:, int(0.25*size[1]):-int(0.25*size[1]), int(0.25*size[2]):-int(0.25*size[2])]\n        _means = []\n        for i in range(new.shape[0]):\n            _mean = np.mean(new[i])\n            _means.append(_mean)\n        means.update({scan:_means})\n    return means\n\ndef visualize_intensities(brats21id):\n    means = depthwise_mean(brats21id)\n    \n    fig, ax = plt.subplots(4,1, sharex='all')\n    fig = plt.figure()\n    fig.set_figheight(50)\n    fig.set_figwidth(50)\n    \n    for i, scan in enumerate(mpMRI):\n        ax[i].plot(np.linspace(1,len(means[scan]), len(means[scan])), means[scan], linestyle='solid')\n        ax[i].set_title(\"scan: \"+scan)\n\n    plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:16:15.895889Z","iopub.execute_input":"2022-02-07T18:16:15.896312Z","iopub.status.idle":"2022-02-07T18:16:15.905768Z","shell.execute_reply.started":"2022-02-07T18:16:15.896279Z","shell.execute_reply":"2022-02-07T18:16:15.904953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample = df.sample(3)\nbrats21ids = sample[\"BraTS21ID\"].values","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:16:19.313222Z","iopub.execute_input":"2022-02-07T18:16:19.313718Z","iopub.status.idle":"2022-02-07T18:16:19.319165Z","shell.execute_reply.started":"2022-02-07T18:16:19.313677Z","shell.execute_reply":"2022-02-07T18:16:19.318076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"visualize_intensities(str(brats21ids[0]).zfill(5))","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:16:19.329849Z","iopub.execute_input":"2022-02-07T18:16:19.331056Z","iopub.status.idle":"2022-02-07T18:16:23.920875Z","shell.execute_reply.started":"2022-02-07T18:16:19.331002Z","shell.execute_reply":"2022-02-07T18:16:23.919985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"visualize_intensities(str(brats21ids[1]).zfill(5))","metadata":{"execution":{"iopub.status.busy":"2022-02-07T13:56:55.945183Z","iopub.execute_input":"2022-02-07T13:56:55.945514Z","iopub.status.idle":"2022-02-07T13:57:06.270000Z","shell.execute_reply.started":"2022-02-07T13:56:55.945484Z","shell.execute_reply":"2022-02-07T13:57:06.269159Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"visualize_intensities(str(brats21ids[2]).zfill(5))","metadata":{"execution":{"iopub.status.busy":"2022-02-07T13:57:06.272022Z","iopub.execute_input":"2022-02-07T13:57:06.272689Z","iopub.status.idle":"2022-02-07T13:57:08.754251Z","shell.execute_reply.started":"2022-02-07T13:57:06.272641Z","shell.execute_reply":"2022-02-07T13:57:08.753450Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def non_zero_scans_counter(volume):\n    size = volume.shape\n    new = volume[:, int(0.25*size[1]):-int(0.25*size[1]), int(0.25*size[2]):-int(0.25*size[2])]\n    _start = 0\n    _end = size[0]\n    for i in range(size[0]):\n        if np.mean(new[i]) == 0:\n            _start = i\n        else:\n            break\n    for i in range(size[0],0,-1):\n        if np.mean(new[i-1]) != 0:\n            _end = i-1\n            break\n        else:\n            continue\n    return (_start, _end)\n\ndef resize_img(volume):\n    zoom_z = 75 / volume.shape[0]\n    zoom_x = 256 / volume.shape[1]\n    zoom_y = 256 / volume.shape[2]\n    new_volume = ndi.zoom(volume, zoom=(zoom_z, zoom_x, zoom_y), order=5)\n    return new_volume\n\ndef resize_volumes(scans):\n    resized_scans = {}\n    for scan in mpMRI:\n        volume = scans[scan]\n        new_volume = resize_img(volume)\n        resized_scans.update({scan:new_volume})\n    return resized_scans","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:16:23.922179Z","iopub.execute_input":"2022-02-07T18:16:23.922394Z","iopub.status.idle":"2022-02-07T18:16:23.928844Z","shell.execute_reply.started":"2022-02-07T18:16:23.922369Z","shell.execute_reply":"2022-02-07T18:16:23.927930Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from google.cloud import storage\nstorage_client = storage.Client(project='global-booster-280414')\n\ndef create_bucket(dataset_name):\n    \"\"\"Creates a new bucket. https://cloud.google.com/storage/docs/ \"\"\"\n    bucket = storage_client.create_bucket(dataset_name)\n    print('Bucket {} created'.format(bucket.name))\n\ndef upload_blob(bucket_name, source_file_name, destination_blob_name):\n    \"\"\"Uploads a file to the bucket. https://cloud.google.com/storage/docs/ \"\"\"\n    bucket = storage_client.get_bucket(bucket_name)\n    blob = bucket.blob(destination_blob_name)\n    blob.upload_from_filename(source_file_name)\n    \n    \ndef list_blobs(bucket_name):\n    \"\"\"Lists all the blobs in the bucket. https://cloud.google.com/storage/docs/\"\"\"\n    blobs = storage_client.list_blobs(bucket_name)\n    for blob in blobs:\n        print(blob.name)\n        \ndef download_to_kaggle(bucket_name,destination_directory,file_name):\n    \"\"\"Takes the data from your GCS Bucket and puts it into the working directory of your Kaggle notebook\"\"\"\n    os.makedirs(destination_directory, exist_ok = True)\n    full_file_path = os.path.join(destination_directory, file_name)\n    blobs = storage_client.list_blobs(bucket_name)\n    for blob in blobs:\n        blob.download_to_filename(full_file_path)","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:14:22.231257Z","iopub.execute_input":"2022-02-07T18:14:22.231725Z","iopub.status.idle":"2022-02-07T18:14:22.239789Z","shell.execute_reply.started":"2022-02-07T18:14:22.231682Z","shell.execute_reply":"2022-02-07T18:14:22.238889Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"bucket_name = 'rsna_miccai_bratrc'         \ntry:\n    create_bucket(bucket_name)   \nexcept:\n    pass","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:18:21.863898Z","iopub.execute_input":"2022-02-07T18:18:21.864445Z","iopub.status.idle":"2022-02-07T18:18:23.290095Z","shell.execute_reply.started":"2022-02-07T18:18:21.864408Z","shell.execute_reply":"2022-02-07T18:18:23.289125Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def upload_resized_vol(brats21id):\n    volumes = load_volume(str(brats21id).zfill(5))\n    \n    for scan in mpMRI:\n        try:\n            volume = volumes[scan]\n            (_start, _end) = non_zero_scans_counter(volume)\n            new_volume = volume[_start:_end]\n            resized_volume = resize_img(new_volume)\n            np.save(\"./{}.npy\".format(str(brats21id).zfill(5)), resized_volume)\n            local_data = './{}.npy'.format(str(brats21id).zfill(5))\n            file_name = scan + \"/{}.npy\".format(str(brats21id).zfill(5)) \n            upload_blob(bucket_name, local_data, file_name)\n            !rm ./*\n        \n        except:\n            pass","metadata":{"execution":{"iopub.status.busy":"2022-02-07T18:59:28.257660Z","iopub.execute_input":"2022-02-07T18:59:28.258015Z","iopub.status.idle":"2022-02-07T18:59:28.268070Z","shell.execute_reply.started":"2022-02-07T18:59:28.257981Z","shell.execute_reply":"2022-02-07T18:59:28.266993Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"brats21ids = df[\"BraTS21ID\"].values","metadata":{"execution":{"iopub.status.busy":"2022-02-07T19:21:28.487608Z","iopub.execute_input":"2022-02-07T19:21:28.489326Z","iopub.status.idle":"2022-02-07T19:21:28.502169Z","shell.execute_reply.started":"2022-02-07T19:21:28.489238Z","shell.execute_reply":"2022-02-07T19:21:28.501361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for brats21id in brats21ids:\n    upload_resized_vol(brats21id)","metadata":{"execution":{"iopub.status.busy":"2022-02-07T19:25:17.096628Z","iopub.execute_input":"2022-02-07T19:25:17.097385Z","iopub.status.idle":"2022-02-07T19:27:59.756918Z","shell.execute_reply.started":"2022-02-07T19:25:17.097342Z","shell.execute_reply":"2022-02-07T19:27:59.755695Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}