{"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":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install /kaggle/input/audiomentations-v0290/resampy-0.4.2-py3-none-any.whl\n!pip install  /kaggle/input/audiomentations-v0290/librosa-0.9.2-py3-none-any.whl","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:04:22.053166Z","iopub.execute_input":"2023-06-19T15:04:22.053736Z","iopub.status.idle":"2023-06-19T15:05:26.827459Z","shell.execute_reply.started":"2023-06-19T15:04:22.053708Z","shell.execute_reply":"2023-06-19T15:05:26.826340Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\ntorch.cuda.is_available()","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:26.831016Z","iopub.execute_input":"2023-06-19T15:05:26.831355Z","iopub.status.idle":"2023-06-19T15:05:29.513066Z","shell.execute_reply.started":"2023-06-19T15:05:26.831320Z","shell.execute_reply":"2023-06-19T15:05:29.512142Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from pathlib import Path\nimport random\n\nimport numpy as np\nimport pandas as pd\nimport time\nimport os\nimport matplotlib.pyplot as plt\n# These transformations will be passed to our model class\nimport torch\nimport torch.nn.functional as F\nimport torch.nn as nn\nimport yaml\nfrom tqdm.auto import tqdm\nimport glob\nfrom torch.distributions import Beta\nimport librosa\nimport gc","metadata":{"papermill":{"duration":6.939158,"end_time":"2021-12-13T10:09:03.241098","exception":false,"start_time":"2021-12-13T10:08:56.30194","status":"completed"},"scrolled":true,"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:29.514522Z","iopub.execute_input":"2023-06-19T15:05:29.515769Z","iopub.status.idle":"2023-06-19T15:05:31.249211Z","shell.execute_reply.started":"2023-06-19T15:05:29.515733Z","shell.execute_reply":"2023-06-19T15:05:31.248231Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from joblib import Parallel, delayed\nimport os\nfrom os.path import exists\n\nWAV_SIZE=20000\nSTEP_SIZE=500\nTIMES_REAL=4\nTIMES_TRAIN=8\nis_mixed_precision = True\nTARGET_COLS = ['StartHesitation', 'Turn', 'Walking']\n\nclass GaitDataset(torch.utils.data.Dataset):\n\n    def __init__(self, df, is_train=False,transforms=None):\n        self.is_train = is_train\n        self.data = df\n\n    def __len__(self):\n        if self.is_train:\n            return len(self.data)*TIMES_TRAIN\n        else:\n            return len(self.data)\n    \n    \n    def __getitem__(self, idx):\n        g0=9.80665\n        row = self.data.iloc[idx]\n        data = pd.read_csv(row.filename)\n        \n        print(row.Id, data.shape)\n        \n        sig = data[[ 'AccV', 'AccML', 'AccAP']].values\n        \n        if row.type == 0:\n            sigs = []\n            for c in range(3):\n                sigs.append(librosa.resample(sig[:,c],orig_sr=128,target_sr=100))\n            wav = np.stack(sigs,axis=1)\n        else:\n            wav = sig*g0\n        \n        print('after resampling',wav.shape)\n        wav = wav/40.\n        act_len = len(wav)\n        nchunk = len(wav)//WAV_SIZE\n        rem_size = len(wav) - nchunk*WAV_SIZE\n        arrs = []\n        for chk in range(nchunk):\n            arrs.append(wav[chk*WAV_SIZE:(chk+1)*WAV_SIZE])\n\n        \n        if rem_size > 0:\n            last_arr = wav[-WAV_SIZE:]\n            arrs.append(last_arr)\n            \n        wav = np.stack(arrs,axis=0)\n        \n        print('wav',wav.shape,rem_size)\n        \n        sample = {\"wav\": wav, \"Id\":row.Id, 'type': row.type, 'df_length':len(data), \n                  'act_len':act_len,'nchunk':nchunk,'rem_size':rem_size}\n\n        return sample\n        \n\ndef getDataLoader(params,val_x):\n    \n    val_dataset = GaitDataset(df=val_x, transforms=None)\n\n    valDataLoader = torch.utils.data.DataLoader(\n                        val_dataset,\n                        batch_size=1,\n                        num_workers=params['num_workers'],\n                        shuffle=False,\n                        pin_memory=False,\n                    )\n    \n    return valDataLoader","metadata":{"papermill":{"duration":0.04712,"end_time":"2021-12-13T10:09:03.372538","exception":false,"start_time":"2021-12-13T10:09:03.325418","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:31.252044Z","iopub.execute_input":"2023-06-19T15:05:31.252430Z","iopub.status.idle":"2023-06-19T15:05:31.267820Z","shell.execute_reply.started":"2023-06-19T15:05:31.252393Z","shell.execute_reply":"2023-06-19T15:05:31.266621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class Wave_Block(nn.Module):\n\n    def __init__(self, in_channels, out_channels, dilation_rates, kernel_size):\n        super(Wave_Block, self).__init__()\n        self.num_rates = dilation_rates\n        self.convs = nn.ModuleList()\n        self.filter_convs = nn.ModuleList()\n        self.gate_convs = nn.ModuleList()\n\n        self.convs.append(nn.Conv1d(in_channels, out_channels, kernel_size=1))\n        dilation_rates = [2 ** i for i in range(dilation_rates)]\n        for dilation_rate in dilation_rates:\n            self.filter_convs.append(\n                nn.Conv1d(out_channels, out_channels, kernel_size=kernel_size, padding=int((dilation_rate*(kernel_size-1))/2), dilation=dilation_rate))\n            self.gate_convs.append(\n                nn.Conv1d(out_channels, out_channels, kernel_size=kernel_size, padding=int((dilation_rate*(kernel_size-1))/2), dilation=dilation_rate))\n            self.convs.append(nn.Conv1d(out_channels, out_channels, kernel_size=1))\n\n    def forward(self, x):\n        x = self.convs[0](x)\n        res = x\n        for i in range(self.num_rates):\n            x = torch.tanh(self.filter_convs[i](x)) * torch.sigmoid(self.gate_convs[i](x))\n            x = self.convs[i + 1](x)\n            res = res + x\n        return res\n# detail \nclass Classifier(nn.Module):\n    def __init__(self, inch=3, kernel_size=3):\n        super().__init__()\n        self.LSTM = nn.GRU(input_size=128, hidden_size=128, num_layers=4, \n                           batch_first=True, bidirectional=True)\n        \n        #self.wave_block1 = Wave_Block(inch, 16, 12, kernel_size)\n        self.wave_block2 = Wave_Block(inch, 32, 8, kernel_size)\n        self.wave_block3 = Wave_Block(32, 64, 4, kernel_size)\n        self.wave_block4 = Wave_Block(64, 128, 1, kernel_size)\n        self.fc1 = nn.Linear(256, 3)\n\n    def forward(self, x):\n        x = x.permute(0, 2, 1)\n        #x = self.wave_block1(x)\n        x = self.wave_block2(x)\n        x = self.wave_block3(x)\n\n        x = self.wave_block4(x)\n        x = x.permute(0, 2, 1)\n        x, h = self.LSTM(x)\n        x = self.fc1(x)\n    \n        \n        return x,x,x","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:31.269416Z","iopub.execute_input":"2023-06-19T15:05:31.269831Z","iopub.status.idle":"2023-06-19T15:05:31.286577Z","shell.execute_reply.started":"2023-06-19T15:05:31.269797Z","shell.execute_reply":"2023-06-19T15:05:31.285554Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch.cuda.amp as amp\nclass AmpNet(Classifier):\n    \n    def __init__(self,params):\n        super(AmpNet, self).__init__()\n    @torch.cuda.amp.autocast()\n    def forward(self,*args):\n        return super(AmpNet, self).forward(*args)\n\nis_mixed_precision = True  #True #False","metadata":{"papermill":{"duration":0.080072,"end_time":"2021-12-13T10:09:03.957995","exception":false,"start_time":"2021-12-13T10:09:03.877923","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:31.287870Z","iopub.execute_input":"2023-06-19T15:05:31.288306Z","iopub.status.idle":"2023-06-19T15:05:31.299041Z","shell.execute_reply.started":"2023-06-19T15:05:31.288248Z","shell.execute_reply":"2023-06-19T15:05:31.298110Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def getOptimzersScheduler(model,params,steps_in_epoch=25,pct_start=0.1):\n    \n    \n    mdl_parameters = [\n                {'params': model.parameters(), 'lr': 1e-4},\n            ]\n    \n    optimizer = torch.optim.Adam(mdl_parameters, lr=params['learning_rate'][0])\n    \n    scheduler = torch.optim.lr_scheduler.OneCycleLR(optimizer,steps_per_epoch=1,\n                                                    pct_start=pct_start,\n                                                    max_lr=params['learning_rate'],\n                                                    epochs  = params['max_epochs'], \n                                                    div_factor = params['div_factor'], \n                                                    final_div_factor=params['final_div_factor'],\n                                                    verbose=True)\n    \n    return optimizer,scheduler,False","metadata":{"papermill":{"duration":0.032959,"end_time":"2021-12-13T10:09:04.01587","exception":false,"start_time":"2021-12-13T10:09:03.982911","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:31.300652Z","iopub.execute_input":"2023-06-19T15:05:31.301153Z","iopub.status.idle":"2023-06-19T15:05:31.310129Z","shell.execute_reply.started":"2023-06-19T15:05:31.301121Z","shell.execute_reply":"2023-06-19T15:05:31.309330Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def save_model(epoch,model,ckpt_path='./',name='',val_rmse=0):\n    path = os.path.join(ckpt_path, '{}_{}.pth'.format(name, epoch))\n    torch.save(model.state_dict(), path, _use_new_zipfile_serialization=False)\n    \ndef load_model(model,ckpt_path):\n    state = torch.load(ckpt_path)\n    print(model.load_state_dict(state,strict=False))\n    return model","metadata":{"papermill":{"duration":0.032012,"end_time":"2021-12-13T10:09:04.072285","exception":false,"start_time":"2021-12-13T10:09:04.040273","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:31.311437Z","iopub.execute_input":"2023-06-19T15:05:31.311914Z","iopub.status.idle":"2023-06-19T15:05:31.322167Z","shell.execute_reply.started":"2023-06-19T15:05:31.311883Z","shell.execute_reply":"2023-06-19T15:05:31.321326Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"CLASS_WT = torch.tensor([0.4,1,1,1]).float().cuda()","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:31.323204Z","iopub.execute_input":"2023-06-19T15:05:31.324024Z","iopub.status.idle":"2023-06-19T15:05:33.864821Z","shell.execute_reply.started":"2023-06-19T15:05:31.323993Z","shell.execute_reply":"2023-06-19T15:05:33.863871Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def validation_step(model, batch, batch_idx):\n    # Load images and labels\n    x = batch[\"wav\"].float()\n    if GPU:\n        x= x.cuda(non_blocking=True)\n    x = x[0]\n    \n    print('x',x.shape)\n    # Forward pass & softmax\n    \n    flat_pred = np.zeros((batch['act_len'][0],3))\n    with torch.no_grad():\n        if is_mixed_precision:\n            with amp.autocast():\n                preds, _, _ = model(x)\n                preds = preds\n                \n                print('preds',preds.shape)\n     \n    for i in range(batch['nchunk'][0]):\n        flat_pred[i*WAV_SIZE:(i+1)*WAV_SIZE] = torch.sigmoid(preds[i]).detach().cpu().numpy()\n        \n    rem_sz = batch['rem_size'][0]\n    if rem_sz > 0:\n        flat_pred[-rem_sz:] = torch.sigmoid(preds[-1]).detach().cpu().numpy()[-rem_sz:]\n\n    return flat_pred","metadata":{"papermill":{"duration":0.040406,"end_time":"2021-12-13T10:09:04.193173","exception":false,"start_time":"2021-12-13T10:09:04.152767","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:33.868692Z","iopub.execute_input":"2023-06-19T15:05:33.868996Z","iopub.status.idle":"2023-06-19T15:05:33.877141Z","shell.execute_reply.started":"2023-06-19T15:05:33.868970Z","shell.execute_reply":"2023-06-19T15:05:33.876228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import roc_auc_score,f1_score,precision_score,average_precision_score\n        \n\ndef test_epoch(model,valDataLoader):\n\n    total_loss=0\n    total_step=0\n    model.eval()\n    pred_dfs = []\n\n    pbar=tqdm(enumerate(valDataLoader),total=len(valDataLoader))\n    for bi,data in pbar :\n        pred = validation_step(model,data,bi)\n        \n        if data['type'][0] == 0:\n            preds = []\n            for c in range(3):\n                preds.append(librosa.resample(pred[:,c].astype(np.float32),orig_sr=100,target_sr=128))\n                \n            pred = np.stack(preds,axis=1)\n            pred = np.clip(pred,0,1)\n            \n            pred1 = np.zeros((data['df_length'][0],3))\n            pred1[0:data['df_length'][0]] = pred[0:data['df_length'][0]]\n            pred=pred1\n        \n        total_step+=1\n        preds_df = pd.DataFrame(pred)\n        print('preds_df',preds_df.shape)\n        preds_df.columns = TARGET_COLS\n        preds_df['Id'] = data['Id'][0]\n        preds_df['Id'] = preds_df['Id'] + '_' + preds_df.index.values.astype(str)\n\n        pred_dfs.append(preds_df)\n      \n    print('len preds_df',len(preds))\n    preds = pd.concat(pred_dfs)\n\n    print('preds',preds.shape)\n    return preds[TARGET_COLS] , preds[['Id']]","metadata":{"papermill":{"duration":0.036917,"end_time":"2021-12-13T10:09:04.254423","exception":false,"start_time":"2021-12-13T10:09:04.217506","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:33.878377Z","iopub.execute_input":"2023-06-19T15:05:33.879355Z","iopub.status.idle":"2023-06-19T15:05:33.893322Z","shell.execute_reply.started":"2023-06-19T15:05:33.879317Z","shell.execute_reply":"2023-06-19T15:05:33.892232Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"GPU=True\ndef test_loop(params,test_x,ckpt_paths):\n    \n    #create model\n    models = []\n    \n    for c in ckpt_paths:\n        model = AmpNet(params).cuda()\n        #load model\n        model = load_model(model,c)\n        model.eval()\n        models.append(model)\n    #get loaders\n    valDataLoader = getDataLoader(params,test_x)\n    \n    preds_dfs = []\n    id_df = None\n    for m in models:\n        df, id_df = test_epoch(m,valDataLoader)\n        preds_dfs.append(df)\n    \n    preds = preds_dfs[0].copy()\n    for pred_df in preds_dfs:\n        for c in TARGET_COLS:\n            preds[c] += pred_df[c]\n        \n    for c in TARGET_COLS:\n        preds[c] /= len(models)\n        \n    preds['Id'] = id_df\n    return preds","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:33.894607Z","iopub.execute_input":"2023-06-19T15:05:33.895062Z","iopub.status.idle":"2023-06-19T15:05:33.906404Z","shell.execute_reply.started":"2023-06-19T15:05:33.895031Z","shell.execute_reply":"2023-06-19T15:05:33.905478Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"hparams = {\n    # Optional hparams\n    \"backbone\": 'wavenet_4096', #'', #'tf_efficientnetv2_b2',\n    \"learning_rate\": [5e-4],\n    \"max_epochs\": 121,\n    \"batch_size\": 8,\n    \"num_workers\": 0,\n    \"val_sanity_checks\": 0,\n    \"fast_dev_run\": False,\n    \"output_path\": f\"\",\n    \"gpu\": torch.cuda.is_available(),\n    'div_factor':10,\n    'final_div_factor':20,\n}","metadata":{"papermill":{"duration":0.031307,"end_time":"2021-12-13T10:09:04.424259","exception":false,"start_time":"2021-12-13T10:09:04.392952","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:33.907845Z","iopub.execute_input":"2023-06-19T15:05:33.908174Z","iopub.status.idle":"2023-06-19T15:05:33.915060Z","shell.execute_reply.started":"2023-06-19T15:05:33.908144Z","shell.execute_reply":"2023-06-19T15:05:33.914173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaler = amp.GradScaler()","metadata":{"papermill":{"duration":0.034696,"end_time":"2021-12-13T10:09:04.580936","exception":false,"start_time":"2021-12-13T10:09:04.54624","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:33.916365Z","iopub.execute_input":"2023-06-19T15:05:33.916880Z","iopub.status.idle":"2023-06-19T15:05:33.927241Z","shell.execute_reply.started":"2023-06-19T15:05:33.916850Z","shell.execute_reply":"2023-06-19T15:05:33.926336Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import random\nseed=42\ndef set_seed(seed=42):\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.backends.cudnn.deterministic = False\n    torch.use_deterministic_algorithms = True\n    random.seed(0)\n    np.random.seed(0)\nset_seed(seed)\n\n","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:33.928531Z","iopub.execute_input":"2023-06-19T15:05:33.929269Z","iopub.status.idle":"2023-06-19T15:05:33.938864Z","shell.execute_reply.started":"2023-06-19T15:05:33.929238Z","shell.execute_reply":"2023-06-19T15:05:33.937863Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import glob\nimport os\nimport pandas as pd\n\ntdcsfog_files = glob.glob('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/tdcsfog/*.csv')\ntdcsfog_df = pd.DataFrame({'filename':tdcsfog_files, 'type':0} )\ndefog_files = glob.glob('/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/defog/*.csv')\ndefog_df = pd.DataFrame({'filename':defog_files, 'type':1} )\n\nfog_data = pd.concat([tdcsfog_df,defog_df]).reset_index(drop=True)\nfog_data['Id'] = fog_data.filename.apply(lambda f:os.path.basename(f).replace('.csv',''))","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:33.940100Z","iopub.execute_input":"2023-06-19T15:05:33.941135Z","iopub.status.idle":"2023-06-19T15:05:33.966968Z","shell.execute_reply.started":"2023-06-19T15:05:33.941104Z","shell.execute_reply":"2023-06-19T15:05:33.966118Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fog_data","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:33.968128Z","iopub.execute_input":"2023-06-19T15:05:33.968816Z","iopub.status.idle":"2023-06-19T15:05:33.981349Z","shell.execute_reply.started":"2023-06-19T15:05:33.968783Z","shell.execute_reply":"2023-06-19T15:05:33.980424Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import gc\nversion='1'\nfn=0\n\nckpt_paths = ['/kaggle/input/wavenet4096-v1/wavenet_4096-fold0_48.pth', \n             '/kaggle/input/wavenet4096-v1/wavenet_4096-fold1_43.pth',\n             '/kaggle/input/wavenet4096-v1/wavenet_4096-fold2_72.pth',\n             '/kaggle/input/wavenet4096-v1/wavenet_4096-fold3_23.pth',\n             '/kaggle/input/wavenet4096-v1/wavenet_4096-fold4_36.pth',\n              '/kaggle/input/gait-wavenet-v2/wavenet_4096-fold0_58.pth',\n             '/kaggle/input/gait-wavenet-v2/wavenet_4096-fold1_36.pth',\n             '/kaggle/input/gait-wavenet-v2/wavenet_4096-fold2_50.pth',\n            '/kaggle/input/gait-wavenet-v2/wavenet_4096-fold3_17.pth',\n              '/kaggle/input/gait-wavenet-v2/wavenet_4096-fold4_12.pth',\n            ]\n\nckpt_paths = [#'/kaggle/input/gait-wavenet-focal/wavenet_4096-fold0_18.pth',\n            #'/kaggle/input/gait-wavenet-focal/wavenet_4096-fold1_54.pth',\n            #'/kaggle/input/gait-wavenet-focal/wavenet_4096-fold2_19.pth',\n            '/kaggle/input/gait-wavenet-focal/wavenet_4096-fold3_21.pth',\n            #'/kaggle/input/gait-wavenet-focal/wavenet_4096-fold4_45.pth'\n            ]\n\nsubm = test_loop(hparams,fog_data,ckpt_paths)","metadata":{"papermill":{"duration":0.04818,"end_time":"2021-12-13T13:17:52.100451","exception":false,"start_time":"2021-12-13T13:17:52.052271","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-19T15:05:33.982909Z","iopub.execute_input":"2023-06-19T15:05:33.983559Z","iopub.status.idle":"2023-06-19T15:05:45.323416Z","shell.execute_reply.started":"2023-06-19T15:05:33.983525Z","shell.execute_reply":"2023-06-19T15:05:45.322148Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm[-4000:]","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:45.326047Z","iopub.execute_input":"2023-06-19T15:05:45.331606Z","iopub.status.idle":"2023-06-19T15:05:45.350721Z","shell.execute_reply.started":"2023-06-19T15:05:45.331564Z","shell.execute_reply":"2023-06-19T15:05:45.349549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm[['Id','StartHesitation','Turn','Walking']].to_csv('./submission.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2023-06-19T15:05:45.352071Z","iopub.execute_input":"2023-06-19T15:05:45.352494Z","iopub.status.idle":"2023-06-19T15:05:47.448212Z","shell.execute_reply.started":"2023-06-19T15:05:45.352462Z","shell.execute_reply":"2023-06-19T15:05:47.447197Z"},"trusted":true},"execution_count":null,"outputs":[]}]}