{"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":"<center>\n    <h1>[Inference] - FastAI Baseline</h1>\n<center>","metadata":{}},{"cell_type":"markdown","source":"<center>\n<img src=\"https://hubmapconsortium.org/wp-content/uploads/2019/01/HuBMAP-Retina-Logo-Color.png\">\n</center>","metadata":{}},{"cell_type":"code","source":"# import sys\n# sys.path.append('../input/timm-pytorch-image-models/pytorch-image-models-master')\n# import timm","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:33:18.119167Z","iopub.execute_input":"2022-09-18T02:33:18.120211Z","iopub.status.idle":"2022-09-18T02:33:18.124975Z","shell.execute_reply.started":"2022-09-18T02:33:18.120154Z","shell.execute_reply":"2022-09-18T02:33:18.123833Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nLovasz-Softmax and Jaccard hinge loss in PyTorch\nMaxim Berman 2018 ESAT-PSI KU Leuven (MIT License)\n\"\"\"\nimport torch\nfrom torch.autograd import Variable\nimport torch.nn.functional as F\nimport torch.nn as nn\nimport numpy as np\ntry:\n    from itertools import  ifilterfalse\nexcept ImportError: # py3k\n    from itertools import  filterfalse\n","metadata":{"_kg_hide-input":true,"execution":{"iopub.status.busy":"2022-09-18T02:33:18.130609Z","iopub.execute_input":"2022-09-18T02:33:18.130887Z","iopub.status.idle":"2022-09-18T02:33:18.137395Z","shell.execute_reply.started":"2022-09-18T02:33:18.130860Z","shell.execute_reply":"2022-09-18T02:33:18.136300Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport gc\nimport cv2\nimport rasterio\nimport numpy as np\nimport pandas as pd\nfrom PIL import Image\nfrom tqdm import tqdm\nimport tifffile as tiff\nimport matplotlib.pyplot as plt\nfrom rasterio.windows import Window\nfrom torch.utils.data import Dataset, DataLoader\nimport warnings; warnings.filterwarnings(\"ignore\")","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":3.066435,"end_time":"2021-03-12T06:33:17.956368","exception":false,"start_time":"2021-03-12T06:33:14.889933","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-09-18T02:33:18.150788Z","iopub.execute_input":"2022-09-18T02:33:18.151068Z","iopub.status.idle":"2022-09-18T02:33:18.156993Z","shell.execute_reply.started":"2022-09-18T02:33:18.151019Z","shell.execute_reply":"2022-09-18T02:33:18.156011Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nTH = 2\n\nTH = 0.20\n# THs = {'lung':0.8, 'kidney':0.5, 'largeintestine':0.92, 'prostate':0.85, 'spleen':0.5}\nTHs = {'lung':0.2, 'kidney':0.2, 'largeintestine':0.2, 'prostate':0.2, 'spleen':0.2}\n#THs = {'lung':0.5, 'kidney':0.5, 'largeintestine':0.92, 'prostate':0.85, 'spleen':0.5}\n\nDATA = '../input/hubmap-organ-segmentation/test_images/'\nCONFIG = '../input/hubmapsegformer/mit-b5.pickle'\nMODELS = [\n    \"../input/hubmapsegformerb5merge/merge-fold0.pth\",\n    \"../input/hubmapsegformerb5merge/merge-fold1.pth\",\n    \"../input/hubmapsegformerb5merge/merge-fold2.pth\",\n    \"../input/hubmapsegformerb5merge/merge-fold3.pth\",\n    \"../input/hubmapsegformerb5merge/merge-fold4.pth\",\n    \"../input/hubmapsegformerlast/merge-fold0.pth\",\n    \"../input/hubmapsegformerlast/merge-fold1.pth\",\n    \"../input/hubmapsegformerlast/merge-fold2.pth\",\n    \"../input/hubmapsegformerlast/merge-fold3.pth\",\n    \"../input/hubmapsegformerlast/merge-fold4.pth\",\n    \"../input/hubmapsegformerb5/model-b5-fold0.pth\",\n    \"../input/hubmapsegformerb5/model-b5-fold1.pth\",\n    \"../input/hubmapsegformerb5/model-b5-fold2.pth\",\n    \"../input/hubmapsegformerb5/model-b5-fold3.pth\",\n    \"../input/hubmapsegformerb5/model-b5-fold4.pth\",\n#     \"../input/hubmapsegformerlast/768-model-b5.pth\",\n    \"../input/hubmapsegformerb5/last-fold0-4.pth\",\n]\n\n\n\"\"\n# MODELS = [f'../input/hubmapunext50base/model_{i}.pth' for i in range(4)]\ndf_sample = pd.read_csv('../input/hubmap-organ-segmentation/sample_submission.csv')\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')","metadata":{"papermill":{"duration":0.024698,"end_time":"2021-03-12T06:33:17.991398","exception":false,"start_time":"2021-03-12T06:33:17.9667","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-09-18T02:33:18.159037Z","iopub.execute_input":"2022-09-18T02:33:18.159662Z","iopub.status.idle":"2022-09-18T02:33:18.174747Z","shell.execute_reply.started":"2022-09-18T02:33:18.159624Z","shell.execute_reply":"2022-09-18T02:33:18.173845Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model","metadata":{"papermill":{"duration":0.008902,"end_time":"2021-03-12T06:33:18.153045","exception":false,"start_time":"2021-03-12T06:33:18.144143","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class2idx = {'prostate': 1,\n  'spleen': 2,\n  'lung': 3,\n  'kidney': 4,\n  'largeintestine': 5,\n  'none': 0}\nidx2class = {1: 'prostate',\n  2: 'spleen',\n  3: 'lung',\n  4: 'kidney',\n  5: 'largeintestine',\n  0: 'none'}","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:33:18.185213Z","iopub.execute_input":"2022-09-18T02:33:18.185725Z","iopub.status.idle":"2022-09-18T02:33:18.190917Z","shell.execute_reply.started":"2022-09-18T02:33:18.185683Z","shell.execute_reply":"2022-09-18T02:33:18.189851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from transformers import SegformerForSemanticSegmentation\n\nimport pickle\n\nconfig = {}\nwith open(CONFIG, mode=\"rb\") as f:\n    config = pickle.load(f)\n    \n    \n# from transformers import SegformerForSemanticSegmentation\n# from transformers import SegformerModel, SegformerConfig\n# MODEL_NAME=\"nvidia/segformer-b2-finetuned-ade-512-512\"\n# config = SegformerConfig.from_pretrained(MODEL_NAME,\n#                         num_labels=len(class2idx), \n#                         id2label=idx2class, \n#                         label2id=class2idx,\n# )\n\n# with open(\"mit-b2.pickle\", mode=\"wb\") as f :\n#     pickle.dump(config, f)\nmodels = []\nfor MODEL in MODELS:\n    model = SegformerForSemanticSegmentation(config)\n    model_path = MODEL\n    model.load_state_dict(torch.load(model_path))\n    model = model.cuda()\n    model.eval()\n    models.append(model)\n    ","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:33:18.193492Z","iopub.execute_input":"2022-09-18T02:33:18.194212Z","iopub.status.idle":"2022-09-18T02:34:29.534322Z","shell.execute_reply.started":"2022-09-18T02:33:18.194177Z","shell.execute_reply":"2022-09-18T02:34:29.533309Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction","metadata":{"papermill":{"duration":0.009141,"end_time":"2021-03-12T06:33:32.112738","exception":false,"start_time":"2021-03-12T06:33:32.103597","status":"completed"},"tags":[]}},{"cell_type":"code","source":"DATA = '../input/hubmap-organ-segmentation/test_images/'\ndf_sample = pd.read_csv('../input/hubmap-organ-segmentation/test.csv').set_index('id')","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:29.535651Z","iopub.execute_input":"2022-09-18T02:34:29.536295Z","iopub.status.idle":"2022-09-18T02:34:29.546920Z","shell.execute_reply.started":"2022-09-18T02:34:29.536257Z","shell.execute_reply":"2022-09-18T02:34:29.546064Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# DATA = '../input/hubmap-organ-segmentation/train_images/'\n# df_sample = pd.read_csv('../input/hubmap-organ-segmentation/train.csv').set_index('id')","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:29.548475Z","iopub.execute_input":"2022-09-18T02:34:29.548983Z","iopub.status.idle":"2022-09-18T02:34:29.556057Z","shell.execute_reply.started":"2022-09-18T02:34:29.548947Z","shell.execute_reply":"2022-09-18T02:34:29.555047Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def rle_encode_less_memory(img):\n    pixels = img.T.flatten()\n    pixels[0] = 0\n    pixels[-1] = 0\n    runs = np.where(pixels[1:] != pixels[:-1])[0] + 2\n    runs[1::2] -= runs[::2]\n    return ' '.join(str(x) for x in runs)","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:29.559187Z","iopub.execute_input":"2022-09-18T02:34:29.559699Z","iopub.status.idle":"2022-09-18T02:34:29.567410Z","shell.execute_reply.started":"2022-09-18T02:34:29.559603Z","shell.execute_reply":"2022-09-18T02:34:29.566353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_sample[:20]","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:29.569064Z","iopub.execute_input":"2022-09-18T02:34:29.569323Z","iopub.status.idle":"2022-09-18T02:34:29.584533Z","shell.execute_reply.started":"2022-09-18T02:34:29.569299Z","shell.execute_reply":"2022-09-18T02:34:29.582960Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def calc_resize(w, p, train_size=512) :\n    a = 3000/train_size\n    target = int((w*p/0.4)/a + 0.5)\n    target = (target+31)//32 * 32\n    return target\n\ncalc_resize(2023, 0.4945), calc_resize(3000, 0.4)","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:29.586140Z","iopub.execute_input":"2022-09-18T02:34:29.586818Z","iopub.status.idle":"2022-09-18T02:34:29.595852Z","shell.execute_reply.started":"2022-09-18T02:34:29.586777Z","shell.execute_reply":"2022-09-18T02:34:29.595074Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# calc_resize(160, 6.263, train_size=160)","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:29.598918Z","iopub.execute_input":"2022-09-18T02:34:29.599793Z","iopub.status.idle":"2022-09-18T02:34:29.604711Z","shell.execute_reply.started":"2022-09-18T02:34:29.599753Z","shell.execute_reply":"2022-09-18T02:34:29.604084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# TH = 0.225\nfrom transformers import SegformerFeatureExtractor\n\nnames,preds = [],[]\nimgs, pd_mks = [],[]\ndebug = len(df_sample)<2\n# debug = True\ntta = False\n\nmodel.eval()\n\ncnt = 0\nfile = \"\"\nfor idx,row in tqdm(df_sample.iterrows(),total=len(df_sample)):\n    pred = []\n    \n    # trained size = 512x512\n    with torch.no_grad():\n        for model in models:\n\n            model.eval()\n\n            sizes = [256,512,768]\n            upsampled_logits = []\n            for s in sizes:\n                image = Image.open(os.path.join(DATA,str(idx)+'.tiff'))    \n                size = calc_resize(row.img_height, row.pixel_size, train_size = s)\n                feature_extractor = SegformerFeatureExtractor(reduce_labels=False, size=(size,size))\n                encoding = feature_extractor(image, return_tensors=\"pt\")\n                pixel_values = encoding.pixel_values.cuda()\n                organ = row.organ\n                height, width = row.img_height, row.img_width\n                index = class2idx[organ]\n                with torch.no_grad():\n                    outputs = model(pixel_values=pixel_values)['logits']\n                if len(upsampled_logits) == 0 :\n                    upsampled_logits = nn.functional.interpolate(outputs,\n                        # size=image.size[::-1], # (height, width)\n                        (height, width),\n                        mode='bilinear',\n                        align_corners=False)\n                else: \n                    upsampled_logits += nn.functional.interpolate(outputs,\n                        # size=image.size[::-1], # (height, width)\n                        (height, width),\n                        mode='bilinear',\n                        align_corners=False)\n            \n            \n            upsampled_logits /= len(sizes)\n                \n            mask = upsampled_logits.argmax(dim=1)[0]\n            mask[mask != index] = 0\n            mask[mask == index] = 1\n            mask = mask * F.sigmoid(upsampled_logits[0][index])\n\n            if len(pred) == 0 :\n                pred = mask.detach().cpu().numpy()\n            else :\n#                 pred += mask.detach().cpu().numpy() #np.fmax(pred, mask.detach().cpu().numpy())\n                pred = np.fmax(pred, mask.detach().cpu().numpy())\n\n#     pred[pred <= len(models)//3] = 0\n#     pred[pred > len(models)//3] = 1\n\n    pred[pred <= THs[row.organ]] = 0\n    pred[pred > THs[row.organ]] = 1\n\n    rle = rle_encode_less_memory(pred)\n    \n    names.append(str(idx))\n    preds.append(rle)\n    if debug:\n        imgs.append(image)\n        pd_mks.append(pred)\n    \n    if debug and cnt == 10:\n        file = os.path.join(DATA,str(idx)+'.tiff')\n        break\n    cnt+=1\n\n    del image, mask, rle, idx, row, pred\n    gc.collect()    \n","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:36:02.545398Z","iopub.execute_input":"2022-09-18T02:36:02.545753Z","iopub.status.idle":"2022-09-18T02:36:09.172351Z","shell.execute_reply.started":"2022-09-18T02:36:02.545723Z","shell.execute_reply":"2022-09-18T02:36:09.171343Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#debug = True\nif debug:\n    import matplotlib.pyplot as plt\n    idx = 0\n    for img, mask in zip(imgs, pd_mks):\n        print(df_sample[idx:idx+1])\n        idx += 1\n        plt.figure(figsize=(12, 7))\n        plt.subplot(1, 3, 1); plt.imshow(img); plt.axis('OFF'); plt.title('image')\n        plt.subplot(1, 3, 2); plt.imshow(mask*255); plt.axis('OFF'); plt.title('mask')\n        plt.subplot(1, 3, 3); plt.imshow(img); plt.imshow(mask*255, alpha=0.4); plt.axis('OFF'); plt.title('overlay')\n        plt.tight_layout()\n        plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:36:09.174081Z","iopub.execute_input":"2022-09-18T02:36:09.175014Z","iopub.status.idle":"2022-09-18T02:36:10.995320Z","shell.execute_reply.started":"2022-09-18T02:36:09.174976Z","shell.execute_reply":"2022-09-18T02:36:10.994290Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# # TH = 0.225\n# from transformers import SegformerFeatureExtractor\n\n# names,preds = [],[]\n# imgs, pd_mks = [],[]\n# debug = len(df_sample)<2\n# # debug = True\n# tta = False\n\n# model.eval()\n\n# cnt = 0\n# file = \"\"\n# for idx,row in tqdm(df_sample.iterrows(),total=len(df_sample)):\n#     pred = []\n    \n#     # trained size = 512x512\n#     image = Image.open(os.path.join(DATA,str(idx)+'.tiff'))    \n#     size = calc_resize(row.img_height, row.pixel_size, train_size = 512)\n#     feature_extractor = SegformerFeatureExtractor(reduce_labels=False, size=(size,size))\n#     encoding = feature_extractor(image, return_tensors=\"pt\")\n#     pixel_values = encoding.pixel_values.cuda()\n#     organ = row.organ\n#     height, width = row.img_height, row.img_width\n#     index = class2idx[organ]\n#     with torch.no_grad():\n#         for model in models:\n#             model.eval()\n#             with torch.no_grad() :\n#                 outputs = model(pixel_values=pixel_values)['logits']\n                \n#                 if tta : \n#                     flips = [[-1],[-2],[-2,-1]]\n#                     for f in flips:\n#                         tmp = torch.flip(pixel_values,f)\n#                         p = model(pixel_values=tmp)['logits']\n#                         p = torch.flip(p,f)\n#                         outputs += p\n#                     #py /= (1+len(flips))        \n#                     outputs /= (1+len(flips))\n                \n#             upsampled_logits = nn.functional.interpolate(outputs,\n#                         # size=image.size[::-1], # (height, width)\n#                         (height, width),\n#                         mode='bilinear',\n#                         align_corners=False)\n#             mask = upsampled_logits.argmax(dim=1)[0]\n#             mask[mask != index] = 0\n#             mask[mask == index] = 1\n#             mask = mask * F.sigmoid(upsampled_logits[0][index])\n\n#             if len(pred) == 0 :\n#                 pred = mask.detach().cpu().numpy()\n#             else :\n# #                 pred += mask.detach().cpu().numpy() #np.fmax(pred, mask.detach().cpu().numpy())\n#                 pred = np.fmax(pred, mask.detach().cpu().numpy())\n\n# #     pred[pred <= len(models)//3] = 0\n# #     pred[pred > len(models)//3] = 1\n\n#     pred[pred <= THs[row.organ]] = 0\n#     pred[pred > THs[row.organ]] = 1\n\n#     rle = rle_encode_less_memory(pred)\n    \n#     names.append(str(idx))\n#     preds.append(rle)\n#     if debug:\n#         imgs.append(image)\n#         pd_mks.append(pred)\n    \n#     if debug and cnt == 20:\n#         file = os.path.join(DATA,str(idx)+'.tiff')\n#         break\n#     cnt+=1\n\n#     del image, mask, rle, idx, row, pred\n#     gc.collect()    \n","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:35:33.904089Z","iopub.execute_input":"2022-09-18T02:35:33.904444Z","iopub.status.idle":"2022-09-18T02:35:33.913397Z","shell.execute_reply.started":"2022-09-18T02:35:33.904407Z","shell.execute_reply":"2022-09-18T02:35:33.911979Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# models = models[:1]\n# len(models)//3","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:35.452517Z","iopub.execute_input":"2022-09-18T02:34:35.454021Z","iopub.status.idle":"2022-09-18T02:34:35.462488Z","shell.execute_reply.started":"2022-09-18T02:34:35.453976Z","shell.execute_reply":"2022-09-18T02:34:35.461252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# #debug = True\n# if debug:\n#     import matplotlib.pyplot as plt\n#     idx = 0\n#     for img, mask in zip(imgs, pd_mks):\n#         print(df_sample[idx:idx+1])\n#         idx += 1\n#         plt.figure(figsize=(12, 7))\n#         plt.subplot(1, 3, 1); plt.imshow(img); plt.axis('OFF'); plt.title('image')\n#         plt.subplot(1, 3, 2); plt.imshow(mask*255); plt.axis('OFF'); plt.title('mask')\n#         plt.subplot(1, 3, 3); plt.imshow(img); plt.imshow(mask*255, alpha=0.4); plt.axis('OFF'); plt.title('overlay')\n#         plt.tight_layout()\n#         plt.show()","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:35.466599Z","iopub.execute_input":"2022-09-18T02:34:35.467006Z","iopub.status.idle":"2022-09-18T02:34:35.476647Z","shell.execute_reply.started":"2022-09-18T02:34:35.466970Z","shell.execute_reply":"2022-09-18T02:34:35.475653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# import matplotlib.pyplot as plt\n# plt.imshow(pred)\n# pred.max()","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:35.477862Z","iopub.execute_input":"2022-09-18T02:34:35.478380Z","iopub.status.idle":"2022-09-18T02:34:35.486277Z","shell.execute_reply.started":"2022-09-18T02:34:35.478352Z","shell.execute_reply":"2022-09-18T02:34:35.485299Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# img  = cv2.imread(file)\n# img[:,:,0] = pred*255\n# plt.imshow(img)\n# img.shape","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:35.487377Z","iopub.execute_input":"2022-09-18T02:34:35.487640Z","iopub.status.idle":"2022-09-18T02:34:35.496608Z","shell.execute_reply.started":"2022-09-18T02:34:35.487616Z","shell.execute_reply":"2022-09-18T02:34:35.495693Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.DataFrame({'id':names,'rle':preds})\ndf.to_csv('submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:35.497919Z","iopub.execute_input":"2022-09-18T02:34:35.498250Z","iopub.status.idle":"2022-09-18T02:34:35.509608Z","shell.execute_reply.started":"2022-09-18T02:34:35.498225Z","shell.execute_reply":"2022-09-18T02:34:35.508469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# df_sample = pd.read_csv('../input/hubmap-organ-segmentation/test.csv')\n# df.id = df.id.astype(str)\n# df_sample.id = df_sample.id.astype(str)\n# df = pd.merge(df, df_sample, on=\"id\")\n\n# RLE = []\n# for i in range(len(df)):\n#     rle = df.iloc[i].rle\n#     src = df.iloc[i].data_source\n#     if src != \"Hubmap\" :\n#         RLE.append(\"\")\n#         continue\n#     RLE.append(rle)\n\n# df['rle'] = RLE\n# df[['id','rle']].to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-09-18T02:34:35.510798Z","iopub.execute_input":"2022-09-18T02:34:35.511318Z","iopub.status.idle":"2022-09-18T02:34:35.519741Z","shell.execute_reply.started":"2022-09-18T02:34:35.511282Z","shell.execute_reply":"2022-09-18T02:34:35.518705Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}