{"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":"from glob import glob\nfrom sklearn.model_selection import GroupKFold, StratifiedKFold\nimport cv2\nfrom skimage import io\nimport torch\nfrom torch import nn\nimport os\nfrom datetime import datetime\nimport time\nimport random\nimport cv2\nimport torchvision\nfrom torchvision import transforms\nimport pandas as pd\nimport numpy as np\nfrom tqdm import tqdm\n\nimport matplotlib.pyplot as plt\nfrom torch.utils.data import Dataset,DataLoader\nfrom torch.utils.data.sampler import SequentialSampler, RandomSampler\nfrom torch.cuda.amp import autocast, GradScaler\nfrom torch.nn.modules.loss import _WeightedLoss\nimport torch.nn.functional as F\n\n#import timm\n\nimport sklearn\nimport warnings\nimport joblib\nfrom sklearn.metrics import roc_auc_score, log_loss\nfrom sklearn import metrics\nimport warnings\nimport cv2\nimport pydicom\n#from efficientnet_pytorch import EfficientNet\nfrom scipy.ndimage.interpolation import zoom\nfrom PIL import Image\nimport albumentations\nimport gc","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:41.024507Z","iopub.execute_input":"2021-07-19T18:50:41.024981Z","iopub.status.idle":"2021-07-19T18:50:45.414517Z","shell.execute_reply.started":"2021-07-19T18:50:41.024859Z","shell.execute_reply":"2021-07-19T18:50:45.413574Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv = pd.read_csv(\"../input/cassava-leaf-disease-classification/train.csv\")\ntrain_csv.shape","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:45.416558Z","iopub.execute_input":"2021-07-19T18:50:45.416968Z","iopub.status.idle":"2021-07-19T18:50:45.455042Z","shell.execute_reply.started":"2021-07-19T18:50:45.416933Z","shell.execute_reply":"2021-07-19T18:50:45.453976Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv = train_csv[:1000]","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:45.456975Z","iopub.execute_input":"2021-07-19T18:50:45.457470Z","iopub.status.idle":"2021-07-19T18:50:45.462804Z","shell.execute_reply.started":"2021-07-19T18:50:45.457424Z","shell.execute_reply":"2021-07-19T18:50:45.461552Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"CFG = {\n    'fold_num': 5,\n    'seed': 719,\n    'model_arch': 'tf_efficientnet_b4_ns',\n    'img_size': 512,\n    'epochs': 10,\n    'train_bs': 16,\n    'valid_bs': 32,\n    'T_0': 10,\n    'lr': 1e-4,\n    'min_lr': 1e-6,\n    'weight_decay':1e-6,\n    'num_workers': 4,\n    'accum_iter': 2, # suppoprt to do batch accumulation for backprop with effectively larger batch size\n    'verbose_step': 1,\n    'device': 'cuda:0'\n}","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:45.464668Z","iopub.execute_input":"2021-07-19T18:50:45.465141Z","iopub.status.idle":"2021-07-19T18:50:45.475598Z","shell.execute_reply.started":"2021-07-19T18:50:45.465070Z","shell.execute_reply":"2021-07-19T18:50:45.474497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **Helper function**","metadata":{}},{"cell_type":"code","source":"def seed_everything():\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = True\n    \n    \ndef get_img(path):\n    im_brg = cv2.imread(path)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:45.480468Z","iopub.execute_input":"2021-07-19T18:50:45.481024Z","iopub.status.idle":"2021-07-19T18:50:45.488950Z","shell.execute_reply.started":"2021-07-19T18:50:45.480987Z","shell.execute_reply":"2021-07-19T18:50:45.487821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img = cv2.imread(\"../input/cassava-leaf-disease-classification/train_images/1000201771.jpg\")\nplt.imshow(img)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:45.493364Z","iopub.execute_input":"2021-07-19T18:50:45.493807Z","iopub.status.idle":"2021-07-19T18:50:45.799407Z","shell.execute_reply.started":"2021-07-19T18:50:45.493771Z","shell.execute_reply":"2021-07-19T18:50:45.798334Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img2 = \"../input/cassava-leaf-disease-classification/train_images/1000201771.jpg\"\nimg2 = Image.open(img2)\nimg2","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:45.801364Z","iopub.execute_input":"2021-07-19T18:50:45.801829Z","iopub.status.idle":"2021-07-19T18:50:45.998405Z","shell.execute_reply.started":"2021-07-19T18:50:45.801778Z","shell.execute_reply":"2021-07-19T18:50:45.996321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"transform = transforms.Compose([transforms.Resize((256,256))])\n","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.000414Z","iopub.execute_input":"2021-07-19T18:50:46.000827Z","iopub.status.idle":"2021-07-19T18:50:46.006065Z","shell.execute_reply.started":"2021-07-19T18:50:46.000788Z","shell.execute_reply":"2021-07-19T18:50:46.004978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"im = transform(img2)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.008124Z","iopub.execute_input":"2021-07-19T18:50:46.008545Z","iopub.status.idle":"2021-07-19T18:50:46.025927Z","shell.execute_reply.started":"2021-07-19T18:50:46.008505Z","shell.execute_reply":"2021-07-19T18:50:46.024511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"im","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.028021Z","iopub.execute_input":"2021-07-19T18:50:46.028445Z","iopub.status.idle":"2021-07-19T18:50:46.063791Z","shell.execute_reply.started":"2021-07-19T18:50:46.028402Z","shell.execute_reply":"2021-07-19T18:50:46.062532Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import OneHotEncoder","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.065551Z","iopub.execute_input":"2021-07-19T18:50:46.065970Z","iopub.status.idle":"2021-07-19T18:50:46.071481Z","shell.execute_reply.started":"2021-07-19T18:50:46.065929Z","shell.execute_reply":"2021-07-19T18:50:46.069791Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"target = train_csv.label","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.073264Z","iopub.execute_input":"2021-07-19T18:50:46.074179Z","iopub.status.idle":"2021-07-19T18:50:46.088325Z","shell.execute_reply.started":"2021-07-19T18:50:46.074129Z","shell.execute_reply":"2021-07-19T18:50:46.086853Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"target = pd.get_dummies(train_csv.label)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.090426Z","iopub.execute_input":"2021-07-19T18:50:46.091313Z","iopub.status.idle":"2021-07-19T18:50:46.104500Z","shell.execute_reply.started":"2021-07-19T18:50:46.091259Z","shell.execute_reply":"2021-07-19T18:50:46.103407Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.array(target)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.106354Z","iopub.execute_input":"2021-07-19T18:50:46.107192Z","iopub.status.idle":"2021-07-19T18:50:46.117821Z","shell.execute_reply.started":"2021-07-19T18:50:46.107080Z","shell.execute_reply":"2021-07-19T18:50:46.116520Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"train_csv = train_csv[:1000] ","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.119525Z","iopub.execute_input":"2021-07-19T18:50:46.120182Z","iopub.status.idle":"2021-07-19T18:50:46.128131Z","shell.execute_reply.started":"2021-07-19T18:50:46.120138Z","shell.execute_reply":"2021-07-19T18:50:46.126998Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"image_path = \"../input/cassava-leaf-disease-classification/train_images/\"","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.131814Z","iopub.execute_input":"2021-07-19T18:50:46.132504Z","iopub.status.idle":"2021-07-19T18:50:46.139311Z","shell.execute_reply.started":"2021-07-19T18:50:46.132451Z","shell.execute_reply":"2021-07-19T18:50:46.138175Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import model_selection\nfrom sklearn import ensemble","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.141482Z","iopub.execute_input":"2021-07-19T18:50:46.142348Z","iopub.status.idle":"2021-07-19T18:50:46.369128Z","shell.execute_reply.started":"2021-07-19T18:50:46.142253Z","shell.execute_reply":"2021-07-19T18:50:46.368199Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv[\"kfold\"] = -1\n\ntrain_csv = train_csv.sample(frac=1).reset_index(drop= True)\ny = train_csv.label\n\nkf = model_selection.StratifiedKFold(n_splits=5)\n\nfor f, (t_,v_) in enumerate(kf.split(X=train_csv, y=y)):\n    train_csv.loc[v_, 'kfold'] = f","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.370634Z","iopub.execute_input":"2021-07-19T18:50:46.371018Z","iopub.status.idle":"2021-07-19T18:50:46.392357Z","shell.execute_reply.started":"2021-07-19T18:50:46.370978Z","shell.execute_reply":"2021-07-19T18:50:46.391460Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.395145Z","iopub.execute_input":"2021-07-19T18:50:46.395608Z","iopub.status.idle":"2021-07-19T18:50:46.416824Z","shell.execute_reply.started":"2021-07-19T18:50:46.395560Z","shell.execute_reply":"2021-07-19T18:50:46.415893Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img = Image.open(\"../input/cassava-leaf-disease-classification/train_images/1000201771.jpg\")","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.434605Z","iopub.execute_input":"2021-07-19T18:50:46.434960Z","iopub.status.idle":"2021-07-19T18:50:46.442309Z","shell.execute_reply.started":"2021-07-19T18:50:46.434927Z","shell.execute_reply":"2021-07-19T18:50:46.441344Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img = np.array(img)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.446244Z","iopub.execute_input":"2021-07-19T18:50:46.446671Z","iopub.status.idle":"2021-07-19T18:50:46.463736Z","shell.execute_reply.started":"2021-07-19T18:50:46.446635Z","shell.execute_reply":"2021-07-19T18:50:46.462837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img = np.transpose(img, (2,0,1)).astype(np.float32)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.465280Z","iopub.execute_input":"2021-07-19T18:50:46.465752Z","iopub.status.idle":"2021-07-19T18:50:46.473518Z","shell.execute_reply.started":"2021-07-19T18:50:46.465707Z","shell.execute_reply":"2021-07-19T18:50:46.472025Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"img.shape","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.475588Z","iopub.execute_input":"2021-07-19T18:50:46.476107Z","iopub.status.idle":"2021-07-19T18:50:46.483874Z","shell.execute_reply.started":"2021-07-19T18:50:46.476061Z","shell.execute_reply":"2021-07-19T18:50:46.482479Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nimport torchvision\n\nclass ClassificationDataset:\n    def __init__(self, image_path, targets, augmentations = None, transforms = None):\n        self.image_path = image_path\n        self.targets = targets\n       # self.resize = resize\n        self.augmentations = augmentations\n        self.transforms = transforms\n        \n        \n    def __len__(self):\n        return len(self.image_path)\n    \n    def __getitem__(self, item):\n        \n        image = Image.open(self.image_path[item])\n        \n        targets = self.targets[item]\n        \n#         targets = pd.get_dummies(targets)\n#         targets = np.array(targets)\n        \n        if self.transforms is not None:\n            \n            transform = self.transforms(image=image)\n            image = transform[\"image\"]\n            \n            \n            \n\n            \n        image = np.array(image)\n        \n        if self.augmentations is not None:\n            \n            augment = self.augmentations(image = image)\n            image = augment[\"image\"]\n            \n        image = np.transpose(image, (2,0,1)).astype(np.float32)\n        \n        \n        return {\n            \n            \"image\": torch.tensor(image, dtype = torch.float),\n            \"target\": torch.tensor(targets, dtype = torch.long),\n        }","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.485983Z","iopub.execute_input":"2021-07-19T18:50:46.487015Z","iopub.status.idle":"2021-07-19T18:50:46.499839Z","shell.execute_reply.started":"2021-07-19T18:50:46.486959Z","shell.execute_reply":"2021-07-19T18:50:46.498711Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"images = train_csv.image_id.values.tolist()\ndata_path = \"../input/cassava-leaf-disease-classification/train_images/\"\nimages = [\n    os.path.join(data_path,i) for i in images\n]\n\n#targets = train_csv.label.values\n\ntargets = pd.get_dummies(train_csv.label)\ntargets = targets.values\n\nmean = (0.485, 0.456, 0.406)\nstd = (0.229, 0.229, 0.225)\n\naug = albumentations.Compose(\n    [  \n        albumentations.Normalize(\n        mean, std, max_pixel_value=255.0,always_apply=True\n        ),\n         albumentations.Resize(height=256, width=256, always_apply=True)\n    ], p= 1.\n)\n\n\ntransform = transforms.Compose([transforms.Resize((256,256))])\n\ntrain_dataset = ClassificationDataset(\n            image_path=images,\n            targets=targets,\n            #transforms=transform,\n            augmentations=aug,\n#             transforms=transform(),\n    )\n","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.504173Z","iopub.execute_input":"2021-07-19T18:50:46.504598Z","iopub.status.idle":"2021-07-19T18:50:46.520614Z","shell.execute_reply.started":"2021-07-19T18:50:46.504552Z","shell.execute_reply":"2021-07-19T18:50:46.519558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_loader = torch.utils.data.DataLoader(train_dataset,\n                                          batch_size = 10,\n                                          shuffle = True,\n                                          num_workers = 4)","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.523461Z","iopub.execute_input":"2021-07-19T18:50:46.523818Z","iopub.status.idle":"2021-07-19T18:50:46.536441Z","shell.execute_reply.started":"2021-07-19T18:50:46.523785Z","shell.execute_reply":"2021-07-19T18:50:46.535482Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch.nn as nn\n\ndef train(data_loader, model, optimizer, device, loss_output=0):\n    \n    model.train()\n    \n   \n    \n    for data in data_loader:\n        inputs = data[\"image\"]\n        targets = data[\"target\"]\n        \n        inputs = inputs.to(device, dtype = torch.float)\n        targets = targets.to(device, dtype = torch.float)\n        \n        \n        optimizer.zero_grad()\n        \n        outputs = model(inputs)\n        \n        loss = nn.BCEWithLogitsLoss()(outputs, targets)\n        \n        loss_output = loss + loss_output\n        \n        loss.backward()\n        \n        optimizer.step()\n        \n        \n    return loss_output\n        \ndef evaluate(data_loader, model, device):\n    \n    \n    model.eval()\n    \n    final_target = []\n    final_output = []\n    \n    with torch.no_grad():\n        \n        for data in data_loader:\n            \n            inputs = data[\"image\"]\n            targets = data[\"target\"]\n            inputs = inputs.to(device, dtype = torch.float)\n            targets = targets.to(device, dtype = torch.float)\n            targets = targets.view(-1,1)\n            output = model(inputs)\n            \n            targets = targets.detach().cpu().numpy().tolist()\n            \n            output = output.detach().cpu().numpy().tolist()\n            \n            \n            final_target.extend(targets)\n            final_output.extend(output)\n            \n    return final_output, final_target","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.538571Z","iopub.execute_input":"2021-07-19T18:50:46.539337Z","iopub.status.idle":"2021-07-19T18:50:46.556333Z","shell.execute_reply.started":"2021-07-19T18:50:46.539289Z","shell.execute_reply":"2021-07-19T18:50:46.555208Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install pretrainedmodels","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:46.560087Z","iopub.execute_input":"2021-07-19T18:50:46.560470Z","iopub.status.idle":"2021-07-19T18:50:57.475194Z","shell.execute_reply.started":"2021-07-19T18:50:46.560422Z","shell.execute_reply":"2021-07-19T18:50:57.473879Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pretrainedmodels\n\ndef get_model(pretrained):\n    if pretrained:\n        model = pretrainedmodels.__dict__[\"resnet18\"](\n                pretrained=\"imagenet\"\n        )\n        \n    else:\n        model = pretrainedmodels.__dict__[\"resnet18\"](\n                pretrined = None\n        )\n        \n    model.last_linear = nn.Sequential(\n                nn.BatchNorm1d(512),\n            nn.Dropout(p=0.25),\n            nn.Linear(in_features = 512, out_features = 512 ),\n            nn.ReLU(),\n                nn.BatchNorm1d(512),\n            nn.Dropout(p=0.5),\n            nn.Linear(in_features = 512, out_features = 5 ),\n            )\n    return model","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:57.477152Z","iopub.execute_input":"2021-07-19T18:50:57.477596Z","iopub.status.idle":"2021-07-19T18:50:58.987360Z","shell.execute_reply.started":"2021-07-19T18:50:57.477548Z","shell.execute_reply":"2021-07-19T18:50:58.986484Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"device = \"cuda\"\nmodel = get_model(pretrained=True)\nmodel = model.to(device)\n#model","metadata":{"execution":{"iopub.status.busy":"2021-07-19T18:50:58.991249Z","iopub.execute_input":"2021-07-19T18:50:58.991615Z","iopub.status.idle":"2021-07-19T18:51:06.158460Z","shell.execute_reply.started":"2021-07-19T18:50:58.991580Z","shell.execute_reply":"2021-07-19T18:51:06.157538Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epochs = 10\nfor fold in range(5):\n    for epoch in enumerate(range(epochs)):\n  \n\n        train_df = train_csv[train_csv.kfold != fold].reset_index(drop=True)\n\n        test_df = train_csv[train_csv.kfold == fold].reset_index(drop=True)\n\n        images = train_df.image_id.values.tolist()\n        data_path = \"../input/cassava-leaf-disease-classification/train_images/\"\n        images = [\n            os.path.join(data_path,i) for i in images\n        ]\n\n       # targets = train_df.label.values\n        targets = pd.get_dummies(train_df.label)\n        targets = targets.values\n    \n\n        train_dataset = ClassificationDataset(\n                    image_path=images,\n                    targets=targets,\n                    #transforms=transform,\n                    augmentations=aug,\n        #             transforms=transform(),\n            )\n\n\n        train_loader = torch.utils.data.DataLoader(train_dataset,\n                                              batch_size = 10,\n                                                   pin_memory=False,\n                                              shuffle = True,\n                                              num_workers = 4)\n\n\n\n\n        images = test_df.image_id.values.tolist()\n        data_path = \"../input/cassava-leaf-disease-classification/train_images/\"\n        images = [\n            os.path.join(data_path,i) for i in images\n        ]\n\n        \n        targets = pd.get_dummies(test_df.label)\n        targets = targets.values\n\n\n        test_dataset = ClassificationDataset(\n                    image_path=images,\n                    targets=targets,\n                    #transforms=transform,\n                    augmentations=aug,\n        #             transforms=transform(),\n            )\n\n\n        test_loader = torch.utils.data.DataLoader(test_dataset,\n                                              batch_size = 10,\n                                              pin_memory=False,\n                                              shuffle = True,\n                                              num_workers = 4)\n\n        optimizer = torch.optim.Adam(model.parameters(), lr= 5e-2)\n    #     epochs = 10\n    #     for epoch in range(epochs):\n        loss = train(train_loader,model, optimizer, device = \"cuda\", loss_output=0)\n        predictions, valid_targets = evaluate(test_loader, model, device=\"cuda\")\n        \n\n       # roc_auc = roc_auc_score(valid_targets, predictions)\n        print(\n            f\"epoch = {epoch}\",\n            f\"folds = {fold}\",\n            f\" loss = {loss/10}\"\n        )\n        \n        gc.collect()","metadata":{"execution":{"iopub.status.busy":"2021-07-19T19:06:37.966365Z","iopub.execute_input":"2021-07-19T19:06:37.966793Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"torch.sav","metadata":{"execution":{"iopub.status.busy":"2021-07-19T19:06:36.033340Z","iopub.status.idle":"2021-07-19T19:06:36.034261Z"},"trusted":true},"execution_count":null,"outputs":[]}]}