{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Inference and Visualization Tutorial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the inference and visualization notebook! At this point, you should have a trained model and tiles to run inference. In this notebook we will run inference on a slide and visualize the results. Here are the steps we will review:\n", "\n", "- Run inference with a trained model.\n", "- Visualize the inference results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run inference with a trained model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Often tissue-based analysis on whole slide images benefit from annotations provided by expert pathologists. However, having pathologists annotate 1000s of slides is very time consuming and expensive. To overcome this bottleneck, it is common to have pathologist annotate a subset of the slides, and use that dataset to train a model. This model is then used to label the rest of the dataset.\n", "\n", "In the model training notebook, we trained a ResNet-18 model on a subset of our slides with the annotated regions and labels. We will now use this trained model and the prepared tiles from the test slide to run the inference step." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "env: LUNA_HOME=/Users/rosed2/Documents/msk-mind/luna\n", "env: PYTHONPATH=/Users/rosed2/Documents/msk-mind/luna/pyluna-pathology:/Users/rosed2/Documents/msk-mind/luna/pyluna-common:.\n" ] } ], "source": [ "# TEMP\n", "%env LUNA_HOME=/Users/rosed2/Documents/msk-mind/luna\n", "%env PYTHONPATH=/Users/rosed2/Documents/msk-mind/luna/pyluna-pathology:/Users/rosed2/Documents/msk-mind/luna/pyluna-common:.\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2022-04-04 15:07:49,991 - INFO - root - FYI: Initalized logger, log file at: data-processing.log with handlers: [ (INFO)>, ]\r\n", "Usage: infer_tiles [OPTIONS] INPUT_SLIDE_TILES\r\n", "\r\n", " Run a model with a specific pre-transform for all tiles in a slide\r\n", " (tile_images), requires tiles to be saved (save_tiles) first\r\n", "\r\n", " Inputs:\r\n", " input_slide_tiles: path to tile images (.tiles.csv)\r\n", " \b\r\n", " Outputs:\r\n", " tile_scores\r\n", " \b\r\n", " Example:\r\n", " infer_tiles tiles/slide-100012/tiles\r\n", " -rn msk-mind/luna-ml:main\r\n", " -mn tissue_tile_net_model_5_class\r\n", " -tn tissue_tile_net_transform\r\n", " -wt main:tissue_net_2021-01-19_21.05.24-e17.pth\r\n", " -o tiles/slide-100012/scores\r\n", "\r\n", "Options:\r\n", " -o, --output_dir TEXT path to output directory to save results\r\n", " -rn, --hub_repo_or_dir TEXT repository name to pull model and weight from,\r\n", " e.g. msk-mind/luna-ml\r\n", "\r\n", " -tn, --transform_name TEXT torch hub transform name\r\n", " -mn, --model_name TEXT torch hub model name\r\n", " -kw, --kwargs TEXT additional keywords to pass to model\r\n", " initialization\r\n", "\r\n", " -nc, --num_cores INTEGER Number of cores to use\r\n", " -bx, --batch_size INTEGER batch size used for inference speedup\r\n", " -m, --method_param_path TEXT path to a metadata json/yaml file with method\r\n", " parameters to reproduce results\r\n", "\r\n", " --help Show this message and exit.\r\n" ] } ], "source": [ "!infer_tiles --help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**infer_tiles** CLI takes in details on your trained model, and loads the tiles data for inference." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "address,x_coord,y_coord,xy_extent,tile_size,tile_units,tile_store\r\n", "x1_y1_z10.0,512,512,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x1_y2_z10.0,512,1024,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x1_y3_z10.0,512,1536,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x1_y4_z10.0,512,2048,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x2_y1_z10.0,1024,512,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x2_y2_z10.0,1024,1024,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x2_y3_z10.0,1024,1536,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x2_y4_z10.0,1024,2048,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x3_y1_z10.0,1536,512,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x3_y2_z10.0,1536,1024,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x3_y3_z10.0,1536,1536,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n", "x3_y4_z10.0,1536,2048,512,256,px,pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/123.tiles.h5\r\n" ] } ], "source": [ "#!cat ../PRO_12-123/tables/tiles/01OV008-7579323e-2fae-43a9-b00f-a15c28/ov_default_labels/TileImages/data/address.slice.csv\n", "\n", "# Copied pyluna-pathology/tests/luna/pathology/cli/testdata/data/save_tiles/123/\n", "!cat ../PRO_12-123/sample_tiles/123.tiles.csv" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2022-04-04 15:58:01,312 - INFO - root - FYI: Initalized logger, log file at: data-processing.log with handlers: [ (INFO)>, ]\n", "2022-04-04 15:58:01,313 - INFO - luna.common.utils - Running with {'output_dir': '../PRO_12-123/sample_tiles_inference', 'hub_repo_or_dir': '../classifier', 'model_name': 'test_custom_model', 'input_slide_tiles': '../PRO_12-123/sample_tiles/123.tiles.csv', 'transform_name': None, 'kwargs': {}, 'num_cores': 4, 'batch_size': 64, 'method_param_path': None}\n", "2022-04-04 15:58:01,313 - INFO - luna.common.utils - Param input_slide_tiles set = ../PRO_12-123/sample_tiles/123.tiles.csv\n", "2022-04-04 15:58:01,313 - INFO - luna.common.utils - Param output_dir set = ../PRO_12-123/sample_tiles_inference\n", "2022-04-04 15:58:01,313 - INFO - luna.common.utils - Param hub_repo_or_dir set = ../classifier\n", "2022-04-04 15:58:01,313 - INFO - luna.common.utils - Param model_name set = test_custom_model\n", "2022-04-04 15:58:01,314 - INFO - luna.common.utils - Param kwargs set = {}\n", "2022-04-04 15:58:01,314 - INFO - luna.common.utils - Param num_cores set = 4\n", "2022-04-04 15:58:01,314 - INFO - luna.common.utils - Param batch_size set = 64\n", "../PRO_12-123/sample_tiles/123.tiles.csv/metadata.yml\n", "2022-04-04 15:58:01,314 - INFO - luna.common.utils - Full segment key set: {}\n", "\n", "----------------------------------- Running transform::infer_tile_labels -----------------------------------\n", "\n", "2022-04-04 15:58:01,314 - INFO - infer_tile_labels - Torch hub source = local @ ../classifier\n", "2022-04-04 15:58:01,315 - INFO - infer_tile_labels - Using device = cpu\n", "100%|█████████████████████████████████████████████| 1/1 [00:08<00:00, 8.80s/it]\n", "2022-04-04 15:58:10,126 - INFO - infer_tile_labels - Mapping column labels -> {0: 'Background', 1: 'Tumor'}\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x_coord y_coord ... Background Tumor\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - address ... \n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x1_y1_z10.0 512 512 ... -0.162288 1.159485\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x1_y2_z10.0 512 1024 ... -0.151000 1.070280\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x1_y3_z10.0 512 1536 ... -0.146432 1.033477\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x1_y4_z10.0 512 2048 ... -0.136010 0.933327\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x2_y1_z10.0 1024 512 ... -0.098171 0.691738\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x2_y2_z10.0 1024 1024 ... -0.090072 0.663284\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x2_y3_z10.0 1024 1536 ... -0.091160 0.654910\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x2_y4_z10.0 1024 2048 ... -0.107406 0.732663\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x3_y1_z10.0 1536 512 ... -0.158197 1.147173\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x3_y2_z10.0 1536 1024 ... -0.135955 1.007193\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x3_y3_z10.0 1536 1536 ... -0.152792 1.108577\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - x3_y4_z10.0 1536 2048 ... -0.127656 0.930692\n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - \n", "2022-04-04 15:58:10,134 - INFO - infer_tile_labels - [12 rows x 8 columns]\n", "2022-04-04 15:58:10,162 - INFO - luna.common.utils - Code block 'transform::infer_tile_labels' took: 8.848070255s\n", "2022-04-04 15:58:10,164 - INFO - luna.common.utils - Done.\n" ] } ], "source": [ "!infer_tiles ../PRO_12-123/sample_tiles/123.tiles.csv \\\n", "--output_dir ../PRO_12-123/sample_tiles_inference \\\n", "--hub_repo_or_dir ../classifier \\\n", "--model_name test_custom_model \\\n", "#--model_name tissue_tile_net_model_5_class \\\n", "--num_cores 1 \\\n", "--batch_size 16\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The output of the inference is saved in a CSV. Let's take a look at the results." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "total 16\r\n", "-rw-r--r-- 1 rosed2 MSKCC\\Domain Users 1.2K Apr 4 15:58 tile_scores_and_labels_pytorch_inference.csv\r\n", "-rw-r--r-- 1 rosed2 MSKCC\\Domain Users 446B Apr 4 15:58 metadata.yml\r\n" ] } ], "source": [ "!ls -lhtr ../PRO_12-123/sample_tiles_inference " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that for the purpose of the tutorials, we are working with a small toy dataset, and therefore the inference result is not optimal. This result is for demonstration purposes only." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
addressx_coordy_coordxy_extenttile_sizetile_unitstile_storeBackgroundTumor
0x1_y1_z10.0512512512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1622881.159485
1x1_y2_z10.05121024512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1510001.070280
2x1_y3_z10.05121536512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1464321.033477
3x1_y4_z10.05122048512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1360100.933327
4x2_y1_z10.01024512512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.0981710.691738
5x2_y2_z10.010241024512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.0900720.663284
6x2_y3_z10.010241536512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.0911600.654910
7x2_y4_z10.010242048512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1074060.732663
8x3_y1_z10.01536512512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1581971.147173
9x3_y2_z10.015361024512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1359551.007193
10x3_y3_z10.015361536512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1527921.108577
11x3_y4_z10.015362048512256px../PRO_12-123/sample_tiles/123.tiles.h5-0.1276560.930692
\n", "
" ], "text/plain": [ " address x_coord y_coord xy_extent tile_size tile_units \\\n", "0 x1_y1_z10.0 512 512 512 256 px \n", "1 x1_y2_z10.0 512 1024 512 256 px \n", "2 x1_y3_z10.0 512 1536 512 256 px \n", "3 x1_y4_z10.0 512 2048 512 256 px \n", "4 x2_y1_z10.0 1024 512 512 256 px \n", "5 x2_y2_z10.0 1024 1024 512 256 px \n", "6 x2_y3_z10.0 1024 1536 512 256 px \n", "7 x2_y4_z10.0 1024 2048 512 256 px \n", "8 x3_y1_z10.0 1536 512 512 256 px \n", "9 x3_y2_z10.0 1536 1024 512 256 px \n", "10 x3_y3_z10.0 1536 1536 512 256 px \n", "11 x3_y4_z10.0 1536 2048 512 256 px \n", "\n", " tile_store Background Tumor \n", "0 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.162288 1.159485 \n", "1 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.151000 1.070280 \n", "2 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.146432 1.033477 \n", "3 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.136010 0.933327 \n", "4 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.098171 0.691738 \n", "5 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.090072 0.663284 \n", "6 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.091160 0.654910 \n", "7 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.107406 0.732663 \n", "8 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.158197 1.147173 \n", "9 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.135955 1.007193 \n", "10 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.152792 1.108577 \n", "11 ../PRO_12-123/sample_tiles/123.tiles.h5 -0.127656 0.930692 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "results = pd.read_csv(\"../PRO_12-123/sample_tiles_inference/tile_scores_and_labels_pytorch_inference.csv\")\n", "results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize the inference results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will visualize the inference results. **visualize_tiles_ng** CLI creates heatmaps based on the scores, and saves the thumbnail images in png format.\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2022-04-04 16:05:18,158 - INFO - root - FYI: Initalized logger, log file at: data-processing.log with handlers: [ (INFO)>, ]\n", "Usage: visualize_tiles_png [OPTIONS] INPUT_SLIDE_IMAGE INPUT_SLIDE_TILES\n", "\n", " Generate nice tile markup images with continuous or discrete tile scores\n", "\n", " Inputs:\n", " input_slide_image: slide image (virtual slide formats compatible with openslide, .svs, .tif, .scn, ...)\n", " input_slide_tiles: slide tiles (manifest tile files, .tiles.csv)\n", " \n", " Outputs:\n", " markups: markup images\n", " \n", " Example:\n", " visualize_tiles_png 10001.svs 10001/tiles/10001.tiles.csv\n", " -o 10001/markups\n", " -pl Tumor,Stroma,TILs,otsu_score\n", " -rmg 0.5\n", "\n", "Options:\n", " -o, --output_dir TEXT path to output directory to save results\n", " -pl, --plot_labels TEXT Label names (as column labels) to plot\n", " -rmg, --requested_magnification TEXT\n", " Magnificiation scale at which to generate\n", " thumbnail/png images (recommended <= 1)\n", "\n", " --mpp-units Set this flag if input coordinates are in\n", " µm, not pixels\n", "\n", " -m, --method_param_path TEXT path to a metadata json/yaml file with\n", " method parameters to reproduce results\n", "\n", " --help Show this message and exit.\n" ] } ], "source": [ "!visualize_tiles_png --help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you want to evaluate your model results in detail, it is desirable to review the results and images in high-magnification.\n", "We use [Digital Slide Archive (DSA)](https://digitalslidearchive.github.io/digital_slide_archive/) viewer to examine the high resolution image and results. DSA is a web-based platform and this enables us to easily share the images and model results with other researchers via a link.\n", "\n", "A set of CLIs are available to help you convert your pathologist or model-generated annotations and push them to DSA. Please refer to the `dsa-tools.ipynb` notebook for more details.\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2022-04-05 08:07:23,436 - INFO - root - FYI: Initalized logger, log file at: data-processing.log with handlers: [ (INFO)>, ]\n", "2022-04-05 08:07:24,597 - INFO - luna.common.utils - Running with {'output_dir': '../PRO_12-123/sample_tiles_viz', 'plot_labels': 'Background,Tumor', 'requested_magnification': '1', 'input_slide_image': '../PRO_12-123/123.svs', 'input_slide_tiles': '../PRO_12-123/sample_tiles_inference/tile_scores_and_labels_pytorch_inference.csv', 'mpp_units': False, 'method_param_path': None}\n", "2022-04-05 08:07:24,597 - INFO - luna.common.utils - Param input_slide_image set = ../PRO_12-123/123.svs\n", "2022-04-05 08:07:24,597 - INFO - luna.common.utils - Param input_slide_tiles set = ../PRO_12-123/sample_tiles_inference/tile_scores_and_labels_pytorch_inference.csv\n", "2022-04-05 08:07:24,597 - INFO - luna.common.utils - Param mpp_units set = False\n", "2022-04-05 08:07:24,597 - INFO - luna.common.utils - Param plot_labels set = ['Background', 'Tumor']\n", "2022-04-05 08:07:24,597 - INFO - luna.common.utils - Param requested_magnification set = 1.0\n", "2022-04-05 08:07:24,598 - INFO - luna.common.utils - Param output_dir set = ../PRO_12-123/sample_tiles_viz\n", "../PRO_12-123/123.svs/metadata.yml\n", "../PRO_12-123/sample_tiles_inference/tile_scores_and_labels_pytorch_inference.csv/metadata.yml\n", "2022-04-05 08:07:24,598 - INFO - luna.common.utils - Full segment key set: {}\n", "\n", "----------------------------------- Running transform::visualize_tiles -----------------------------------\n", "\n", "100%|██████████████████████████████████████████| 12/12 [00:00<00:00, 999.50it/s]\n", "2022-04-05 08:07:24,932 - INFO - visualize_tiles_png - Saved Tumor visualization at ../PRO_12-123/sample_tiles_viz/tile_scores_and_labels_visualization_Tumor.png\n", "100%|█████████████████████████████████████████| 12/12 [00:00<00:00, 1287.16it/s]\n", "2022-04-05 08:07:24,950 - INFO - visualize_tiles_png - Saved Background visualization at ../PRO_12-123/sample_tiles_viz/tile_scores_and_labels_visualization_Background.png\n", "2022-04-05 08:07:24,956 - INFO - luna.common.utils - Code block 'transform::visualize_tiles' took: 0.35854921900000014s\n", "2022-04-05 08:07:24,958 - INFO - luna.common.utils - Done.\n" ] } ], "source": [ "!visualize_tiles_png \\\n", "../PRO_12-123/123.svs \\\n", "../PRO_12-123/sample_tiles_inference/tile_scores_and_labels_pytorch_inference.csv \\\n", "--output_dir ../PRO_12-123/sample_tiles_viz \\\n", "--plot_labels Background,Tumor \\\n", "--requested_magnification 1\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "\n", "Image('../PRO_12-123/sample_tiles_viz/tile_scores_and_labels_visualization_Background.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Congratulations on completing the inference and visualization notebook! To view the end-to-end pipeline of the tiling workflow, please checkout the end-to-end notebook." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }