{"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 pandas as pd\nimport glob\nimport json\nimport re\nimport plotly.express as exp\nimport os\nimport numpy as np\nfrom tqdm.autonotebook import tqdm","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","id":"i15ljjVe4q-e","outputId":"ca312474-9683-4734-ec86-13e6d5c05efa","papermill":{"duration":4.176202,"end_time":"2021-05-13T00:24:00.407349","exception":false,"start_time":"2021-05-13T00:23:56.231147","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:47.009508Z","iopub.execute_input":"2021-06-06T12:03:47.009878Z","iopub.status.idle":"2021-06-06T12:03:50.069263Z","shell.execute_reply.started":"2021-06-06T12:03:47.009791Z","shell.execute_reply":"2021-06-06T12:03:50.068398Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import transformers\nimport torch\nfrom torch.utils.data import Dataset, DataLoader\nfrom sklearn.model_selection import KFold\nimport gc","metadata":{"id":"wep6WwC94q-l","papermill":{"duration":1.655523,"end_time":"2021-05-13T00:24:02.080752","exception":false,"start_time":"2021-05-13T00:24:00.425229","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:50.070600Z","iopub.execute_input":"2021-06-06T12:03:50.070897Z","iopub.status.idle":"2021-06-06T12:03:51.326707Z","shell.execute_reply.started":"2021-06-06T12:03:50.070866Z","shell.execute_reply":"2021-06-06T12:03:51.325846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pytorch_lightning as pl\nfrom pytorch_lightning.callbacks.early_stopping import EarlyStopping\nfrom pytorch_lightning.callbacks import Callback","metadata":{"id":"4KLvjMCO4q-m","papermill":{"duration":1.356616,"end_time":"2021-05-13T00:24:03.45402","exception":false,"start_time":"2021-05-13T00:24:02.097404","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:51.328314Z","iopub.execute_input":"2021-06-06T12:03:51.328650Z","iopub.status.idle":"2021-06-06T12:03:52.554608Z","shell.execute_reply.started":"2021-06-06T12:03:51.328616Z","shell.execute_reply":"2021-06-06T12:03:52.552872Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"WINDOW_LENGTH = 512\nSTRIDE_LENGTH = 256\nSEQ_LEN = 30\nEPOCHS=10\nFOLDS=5\nBATCH_SIZE=128\nPRED_LENGTH=20","metadata":{"id":"R62sz7bY4q-m","papermill":{"duration":0.024819,"end_time":"2021-05-13T00:24:03.494719","exception":false,"start_time":"2021-05-13T00:24:03.4699","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:52.557875Z","iopub.execute_input":"2021-06-06T12:03:52.559892Z","iopub.status.idle":"2021-06-06T12:03:52.567712Z","shell.execute_reply.started":"2021-06-06T12:03:52.559847Z","shell.execute_reply":"2021-06-06T12:03:52.566281Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def jaccard(str1, str2): \n    a = set(str1.lower().split()) \n    b = set(str2.lower().split())\n    c = a.intersection(b)\n    return float(len(c)) / (len(a) + len(b) - len(c))","metadata":{"id":"eKMhryu24q-n","papermill":{"duration":0.026148,"end_time":"2021-05-13T00:24:03.537473","exception":false,"start_time":"2021-05-13T00:24:03.511325","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:52.660649Z","iopub.execute_input":"2021-06-06T12:03:52.661040Z","iopub.status.idle":"2021-06-06T12:03:52.671733Z","shell.execute_reply.started":"2021-06-06T12:03:52.661005Z","shell.execute_reply":"2021-06-06T12:03:52.670860Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def clean_text(txt):\n    return re.sub('[^A-Za-z0-9]+', ' ', str(txt).lower()).strip()","metadata":{"id":"RU4s7y1Y4q-n","papermill":{"duration":0.025611,"end_time":"2021-05-13T00:24:03.57969","exception":false,"start_time":"2021-05-13T00:24:03.554079","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:52.985247Z","iopub.execute_input":"2021-06-06T12:03:52.985554Z","iopub.status.idle":"2021-06-06T12:03:52.991328Z","shell.execute_reply.started":"2021-06-06T12:03:52.985526Z","shell.execute_reply":"2021-06-06T12:03:52.989923Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"../input/coleridgeinitiative-show-us-the-data/train.csv\")","metadata":{"id":"3hpIgGYu4q-n","papermill":{"duration":0.153264,"end_time":"2021-05-13T00:24:03.74966","exception":false,"start_time":"2021-05-13T00:24:03.596396","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:53.200014Z","iopub.execute_input":"2021-06-06T12:03:53.200361Z","iopub.status.idle":"2021-06-06T12:03:53.298376Z","shell.execute_reply.started":"2021-06-06T12:03:53.200331Z","shell.execute_reply":"2021-06-06T12:03:53.297580Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_path = \"../input/coleridgeinitiative-show-us-the-data/train\"\ntrain_files = train.Id.to_numpy()","metadata":{"id":"0T0zJTgs4q-o","papermill":{"duration":0.029149,"end_time":"2021-05-13T00:24:03.794867","exception":false,"start_time":"2021-05-13T00:24:03.765718","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:53.725742Z","iopub.execute_input":"2021-06-06T12:03:53.726058Z","iopub.status.idle":"2021-06-06T12:03:53.733360Z","shell.execute_reply.started":"2021-06-06T12:03:53.726028Z","shell.execute_reply":"2021-06-06T12:03:53.732545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.read_csv(\"../input/coleridgeinitiative-show-us-the-data/sample_submission.csv\")","metadata":{"id":"y41tklhm4q-p","papermill":{"duration":0.029728,"end_time":"2021-05-13T00:24:03.841853","exception":false,"start_time":"2021-05-13T00:24:03.812125","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:54.000624Z","iopub.execute_input":"2021-06-06T12:03:54.000888Z","iopub.status.idle":"2021-06-06T12:03:54.009718Z","shell.execute_reply.started":"2021-06-06T12:03:54.000863Z","shell.execute_reply":"2021-06-06T12:03:54.008921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def mask_if_present(s,l):\n    len_s = len(s) \n    m = []\n    for i in range(len(l) - len_s+1):\n        if s==l[i:len_s+i]:\n            m.extend([x for x in range(i,len_s+i)])\n    return list(set(m))","metadata":{"id":"Z498Wokj4q-p","papermill":{"duration":0.02691,"end_time":"2021-05-13T00:24:03.885403","exception":false,"start_time":"2021-05-13T00:24:03.858493","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:03:55.300321Z","iopub.execute_input":"2021-06-06T12:03:55.300636Z","iopub.status.idle":"2021-06-06T12:03:55.306398Z","shell.execute_reply.started":"2021-06-06T12:03:55.300607Z","shell.execute_reply":"2021-06-06T12:03:55.305574Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# extra_dsets = pd.read_csv(\"../input/bigger-govt-dataset-list/data_set_26897.csv\")\next_2 = pd.read_csv(\"../input/bigger-govt-dataset-list/data_set_800.csv\")\n\nfiltered = []\n# for x in extra_dsets.title:\n#     if len(x.split())>3 and len(x.split())<8:\n#         filtered.append(x)\nfor x in ext_2.title:\n    if len(x.split())>3 and len(x.split())<8:\n        filtered.append(x)\nfiltered  = list(set(filtered))\nfiltered = np.array(filtered)","metadata":{"execution":{"iopub.status.busy":"2021-06-06T12:03:55.770293Z","iopub.execute_input":"2021-06-06T12:03:55.770601Z","iopub.status.idle":"2021-06-06T12:03:55.788654Z","shell.execute_reply.started":"2021-06-06T12:03:55.770574Z","shell.execute_reply":"2021-06-06T12:03:55.787924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class CustomDataset(Dataset):\n    def __init__(self, x_train, y_train,train=True):\n        self.pre_x = x_train\n        self.pre_y = y_train\n        self.pro = 0.9\n        self.train=train\n\n    def __getitem__(self, index):\n        x = self.pre_x[index]\n        y = self.pre_y[index]\n        if len(y)>1 and np.random.binomial(True,self.pro) and self.train:\n            r = np.random.choice(filtered)\n            x = x.replace(y,r)\n            y = r\n        x = tokenizer(x,max_length=SEQ_LEN,padding=\"max_length\",truncation=True)\n        y = tokenizer(y)\n        lab = torch.zeros(len(x['input_ids']))\n        ind = mask_if_present(y['input_ids'][1:-1],x['input_ids'])\n        if(len(ind)!=0):\n            lab[ind] = 1\n        return {\"inputs\":{\"input_ids\":torch.tensor(x[\"input_ids\"],dtype=torch.long),\n                 \"attention_mask\":torch.tensor(x[\"attention_mask\"],dtype=torch.long)}, \"label\": lab.float()}\n\n    def __len__(self):\n        return len(self.pre_x)","metadata":{"id":"pDzS9qkv4q-p","papermill":{"duration":0.030161,"end_time":"2021-05-13T00:24:03.932537","exception":false,"start_time":"2021-05-13T00:24:03.902376","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:17.520795Z","iopub.execute_input":"2021-06-06T12:10:17.521258Z","iopub.status.idle":"2021-06-06T12:10:17.538855Z","shell.execute_reply.started":"2021-06-06T12:10:17.521213Z","shell.execute_reply":"2021-06-06T12:10:17.537615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_chunks(text,label):\n    t = []\n    l = []\n    p = 0\n    while p+WINDOW_LENGTH < len(text):\n        t.append(text[p:p+WINDOW_LENGTH])\n        if(t[-1].find(label)==-1):\n            l.append(\"\")\n        else:\n            l.append(label)\n        p += STRIDE_LENGTH\n    t.append(text[p:])\n    if(t[-1].find(label)==-1):\n        l.append(\"\")\n    else:\n        l.append(label)\n    return t,l","metadata":{"id":"2N5-aSP14q-q","papermill":{"duration":0.027941,"end_time":"2021-05-13T00:24:03.977691","exception":false,"start_time":"2021-05-13T00:24:03.94975","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:18.819872Z","iopub.execute_input":"2021-06-06T12:10:18.820208Z","iopub.status.idle":"2021-06-06T12:10:18.826430Z","shell.execute_reply.started":"2021-06-06T12:10:18.820158Z","shell.execute_reply":"2021-06-06T12:10:18.825480Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tokenizer = transformers.AutoTokenizer.from_pretrained(\"../input/scibert-huggingface/coleridge-scibert-models/output\")","metadata":{"id":"IpLvY-iT-acQ","papermill":{"duration":0.619865,"end_time":"2021-05-13T00:24:04.615149","exception":false,"start_time":"2021-05-13T00:24:03.995284","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:19.019710Z","iopub.execute_input":"2021-06-06T12:10:19.019995Z","iopub.status.idle":"2021-06-06T12:10:19.083406Z","shell.execute_reply.started":"2021-06-06T12:10:19.019970Z","shell.execute_reply":"2021-06-06T12:10:19.082604Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_parquet('../input/bert-segmentation-data-prep/data.parq')\ntrain = train[train.text!=\"\"]","metadata":{"id":"GMv__geP-ekb","papermill":{"duration":3.091591,"end_time":"2021-05-13T00:24:07.723618","exception":false,"start_time":"2021-05-13T00:24:04.632027","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:19.184628Z","iopub.execute_input":"2021-06-06T12:10:19.184889Z","iopub.status.idle":"2021-06-06T12:10:27.509210Z","shell.execute_reply.started":"2021-06-06T12:10:19.184863Z","shell.execute_reply":"2021-06-06T12:10:27.506946Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mask = train.label!=\"\"\ntexts = train[mask].text.to_list()\nlabels = train[mask].label.to_list()\nno_lab = train[~mask].sample(int(len(texts)*9))\ntexts.extend(no_lab.text.to_list())\nlabels.extend(no_lab.label.to_list())\nlen(texts)","metadata":{"execution":{"iopub.status.busy":"2021-06-06T12:05:22.002856Z","iopub.execute_input":"2021-06-06T12:05:22.003276Z","iopub.status.idle":"2021-06-06T12:05:24.088502Z","shell.execute_reply.started":"2021-06-06T12:05:22.003238Z","shell.execute_reply":"2021-06-06T12:05:24.087477Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class MetricsCallback(Callback):\n    def __init__(self,model,fold,hp=False):\n        super().__init__()\n        self.model = model\n        self.current_low = 999\n        self.metrics = []\n        self.fold=fold\n        self.hp = hp\n    def on_validation_end(self,trainer,pl_module):\n        if 'val_loss' in trainer.callback_metrics:\n            self.metrics.append(trainer.callback_metrics['val_loss'])\n            if(self.hp):\n                return\n            if trainer.callback_metrics['val_loss']<self.current_low:\n                print(\"saving state dict\")\n                self.current_low = trainer.callback_metrics['val_loss']\n                torch.save(self.model.state_dict(),f'model_best_{self.fold}.state')","metadata":{"id":"acEWIWGX4q-r","papermill":{"duration":0.062264,"end_time":"2021-05-13T00:24:07.909322","exception":false,"start_time":"2021-05-13T00:24:07.847058","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:30.250818Z","iopub.execute_input":"2021-06-06T12:10:30.251157Z","iopub.status.idle":"2021-06-06T12:10:30.259935Z","shell.execute_reply.started":"2021-06-06T12:10:30.251126Z","shell.execute_reply":"2021-06-06T12:10:30.259147Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import roc_auc_score,roc_curve,fbeta_score","metadata":{"execution":{"iopub.status.busy":"2021-06-06T12:10:30.469669Z","iopub.execute_input":"2021-06-06T12:10:30.469991Z","iopub.status.idle":"2021-06-06T12:10:30.474349Z","shell.execute_reply.started":"2021-06-06T12:10:30.469961Z","shell.execute_reply":"2021-06-06T12:10:30.473248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def Find_Optimal_Cutoff(target, pred):\n    thres = np.arange(0,1,0.01)\n    fbeta = []\n    for th in thres:\n        fbeta.append(fbeta_score(target,pred>th,beta=0.5))\n    argmax = np.argmax(fbeta)\n    print(\"best_beta score: \",fbeta[argmax])\n    return thres[np.argmax(fbeta)]","metadata":{"execution":{"iopub.status.busy":"2021-06-06T12:10:30.672005Z","iopub.execute_input":"2021-06-06T12:10:30.672378Z","iopub.status.idle":"2021-06-06T12:10:30.677440Z","shell.execute_reply.started":"2021-06-06T12:10:30.672343Z","shell.execute_reply":"2021-06-06T12:10:30.676489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class DatasetFinder(pl.LightningModule):\n    \n    def __init__(self,params):\n        super().__init__()\n        self.model = transformers.AutoModel.from_pretrained(\"../input/scibert-huggingface/coleridge-scibert-models/output\")\n        for param in self.model.parameters():\n            param.requires_grad=False\n        self.lstm = torch.nn.LSTM(input_size=768,hidden_size=params['hid_size'],bidirectional=True,batch_first=True)\n        self.fc = torch.nn.Linear(2*params['hid_size'],1)\n        self.lr = params['lr']\n        self.lossf = params['loss_func']\n        self.e=0\n    def forward(self,inp):\n        inp,_=self.lstm(self.model(**inp).last_hidden_state)\n        inp = self.fc(inp).squeeze(2)\n        return torch.sigmoid(inp)\n    \n    def training_step(self,batch,batch_idx):\n        x = batch['inputs']\n        y = batch['label'] \n        loss = self.lossf(self(x),y)\n        return {\"loss\": loss}\n    def validation_step(self,batch,batch_idx):\n        x = batch['inputs']\n        x = self(x)\n        y = batch['label'] \n        loss = self.lossf(x,y)\n        return {\"valid_loss\": loss,\"pred\":x.view(-1).detach().cpu(),\"true\":y.view(-1).detach().cpu()}\n    def validation_epoch_end(self, outputs):\n        avg_loss = torch.stack([x[\"valid_loss\"] for x in outputs]).mean().item()\n        pred = torch.cat([x[\"pred\"] for x in outputs],0)\n        true = torch.cat([x[\"true\"] for x in outputs],0).numpy()\n        if true.sum()>0:\n            thr = Find_Optimal_Cutoff(true,pred.numpy())\n            print(\"roc_auc: \",roc_auc_score(true,pred.numpy()))\n            print(thr,\" : \")\n            print(confusion_matrix(true,(pred>thr).long().numpy()))\n            print(\"0.5: \")\n            print(confusion_matrix(true,(pred>0.5).long().numpy()))\n            print(\"0.1: \")\n            print(confusion_matrix(true,(pred>0.5).long().numpy()))\n            print(\"0.9: \")\n            print(confusion_matrix(true,(pred>0.5).long().numpy()))\n\n        print(f'valid_loss epoch {self.e} : ',avg_loss)\n        self.lrreducer.step(avg_loss)\n        self.e+=1\n        self.log('val_loss',avg_loss)\n    def training_epoch_end(self, outputs):\n        avg_loss = torch.stack([x[\"loss\"] for x in outputs]).mean().item()\n        print('train_loss : ',avg_loss)\n        self.log('train_loss',avg_loss)\n    def configure_optimizers(self):\n        self.optimizer = torch.optim.Adam(self.parameters(),lr = self.lr,weight_decay=1e-5)\n        self.lrreducer = torch.optim.lr_scheduler.ReduceLROnPlateau(self.optimizer,factor=0.1,verbose=True,patience=3)\n        return self.optimizer","metadata":{"id":"X6zHX3244q-s","papermill":{"duration":0.089865,"end_time":"2021-05-13T00:24:08.035871","exception":false,"start_time":"2021-05-13T00:24:07.946006","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:31.112888Z","iopub.execute_input":"2021-06-06T12:10:31.113226Z","iopub.status.idle":"2021-06-06T12:10:31.131023Z","shell.execute_reply.started":"2021-06-06T12:10:31.113174Z","shell.execute_reply":"2021-06-06T12:10:31.129910Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"params = {\n    'lr':0.001,\n    'loss_func':torch.nn.BCELoss(),\n    'hid_size':512\n}","metadata":{"id":"wqsV0eCT4q-t","papermill":{"duration":0.04527,"end_time":"2021-05-13T00:24:08.112002","exception":false,"start_time":"2021-05-13T00:24:08.066732","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:31.575693Z","iopub.execute_input":"2021-06-06T12:10:31.576014Z","iopub.status.idle":"2021-06-06T12:10:31.581216Z","shell.execute_reply.started":"2021-06-06T12:10:31.575984Z","shell.execute_reply":"2021-06-06T12:10:31.579272Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DEVICE = 'cuda:0' if torch.cuda.is_available() else 'cpu'","metadata":{"id":"ZYWCSZ9dDC0f","papermill":{"duration":0.113931,"end_time":"2021-05-13T00:24:08.263297","exception":false,"start_time":"2021-05-13T00:24:08.149366","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:32.349811Z","iopub.execute_input":"2021-06-06T12:10:32.350260Z","iopub.status.idle":"2021-06-06T12:10:32.354169Z","shell.execute_reply.started":"2021-06-06T12:10:32.350225Z","shell.execute_reply":"2021-06-06T12:10:32.353205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"skf = KFold(FOLDS,shuffle=True)\nfor fold, (idt, idv) in enumerate(skf.split(texts,labels)):\n    print(f'training fold: {fold}')\n    mtrain, ltrain = [texts[i] for i in idt], [labels[i] for i in idt]\n    mvalid, lvalid = [texts[i] for i in idv], [labels[i] for i in idv]\n    tr_ds = CustomDataset(mtrain,ltrain)\n    val_ds  = CustomDataset(mvalid,lvalid,train=False)\n    t_loader = DataLoader(tr_ds, batch_size=BATCH_SIZE, shuffle=True,num_workers=2)\n    v_loader = DataLoader(val_ds, batch_size=BATCH_SIZE, shuffle=False,num_workers=2)\n    model = DatasetFinder(params)\n    esc = EarlyStopping(\n        monitor = 'val_loss',\n        patience = 10,\n        verbose = True\n    )\n    mc = MetricsCallback(model,fold,False)\n    trainer = pl.Trainer(max_epochs=25,gpus=1,callbacks=[esc,mc],checkpoint_callback=False,logger=False)\n    trainer.fit(model,t_loader,v_loader)\n    gc.collect()","metadata":{"id":"r0SLjxES4q-t","outputId":"760b332b-d121-4d77-c949-bfa5cf1679cd","papermill":{"duration":26049.278602,"end_time":"2021-05-13T07:38:17.576278","exception":false,"start_time":"2021-05-13T00:24:08.297676","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2021-06-06T12:10:32.615296Z","iopub.execute_input":"2021-06-06T12:10:32.615603Z","iopub.status.idle":"2021-06-06T12:10:45.322943Z","shell.execute_reply.started":"2021-06-06T12:10:32.615575Z","shell.execute_reply":"2021-06-06T12:10:45.320023Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}