{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":59094,"databundleVersionId":7010844,"sourceType":"competition"},{"sourceId":5914240,"sourceType":"datasetVersion","datasetId":3397020},{"sourceId":6760056,"sourceType":"datasetVersion","datasetId":3891041},{"sourceId":6767243,"sourceType":"datasetVersion","datasetId":3894584},{"sourceId":6787264,"sourceType":"datasetVersion","datasetId":3905170},{"sourceId":7024194,"sourceType":"datasetVersion","datasetId":4039397},{"sourceId":7041409,"sourceType":"datasetVersion","datasetId":4051242},{"sourceId":7050208,"sourceType":"datasetVersion","datasetId":4057340},{"sourceId":7056369,"sourceType":"datasetVersion","datasetId":4061672},{"sourceId":7068537,"sourceType":"datasetVersion","datasetId":4070416},{"sourceId":7076908,"sourceType":"datasetVersion","datasetId":4076351},{"sourceId":7091141,"sourceType":"datasetVersion","datasetId":4086321},{"sourceId":7712331,"sourceType":"datasetVersion","datasetId":4441094}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# Thanks for top19 for sharing that code ! \n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import time\nt0start = time.time() \n\nimport numpy as np \nimport pandas as pd \n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:45.629016Z","start_time":"2023-10-14T11:29:44.588725Z"},"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":1.8182,"end_time":"2023-10-21T23:36:32.640112","exception":false,"start_time":"2023-10-21T23:36:30.821912","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:31.840732Z","iopub.execute_input":"2024-03-15T12:19:31.841030Z","iopub.status.idle":"2024-03-15T12:19:33.262723Z","shell.execute_reply.started":"2024-03-15T12:19:31.841004Z","shell.execute_reply":"2024-03-15T12:19:33.261848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nfn = '/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet'\ndf_de_train = pd.read_parquet(fn)# , index_col = 0)\nprint(df_de_train.shape)\ndf_de_train","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:46.26904Z","start_time":"2023-10-14T11:29:45.631102Z"},"papermill":{"duration":2.564863,"end_time":"2023-10-21T23:36:35.214829","exception":false,"start_time":"2023-10-21T23:36:32.649966","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:33.264869Z","iopub.execute_input":"2024-03-15T12:19:33.265350Z","iopub.status.idle":"2024-03-15T12:19:36.366655Z","shell.execute_reply.started":"2024-03-15T12:19:33.265315Z","shell.execute_reply":"2024-03-15T12:19:36.365763Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nfn = '/kaggle/input/open-problems-single-cell-perturbations/id_map.csv'\ndf_id_map = pd.read_csv(fn)\nprint(df_id_map.shape)\ndisplay(df_id_map)\nfn = '/kaggle/input/open-problems-single-cell-perturbations/sample_submission.csv'\ndf = pd.read_csv(fn, index_col = 0)\nprint(df.shape)\ndf","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:47.882269Z","start_time":"2023-10-14T11:29:46.270582Z"},"papermill":{"duration":4.071436,"end_time":"2023-10-21T23:36:39.295992","exception":false,"start_time":"2023-10-21T23:36:35.224556","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:36.367804Z","iopub.execute_input":"2024-03-15T12:19:36.368089Z","iopub.status.idle":"2024-03-15T12:19:40.680499Z","shell.execute_reply.started":"2024-03-15T12:19:36.368064Z","shell.execute_reply":"2024-03-15T12:19:40.679534Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch \n\ndef r2_score_torch(y_true, y_pred):\n\n    y_mean = torch.mean(y_true)\n    ss_tot = torch.sum((y_true - y_mean)**2)\n    ss_res = torch.sum((y_true - y_pred)**2)\n    r2 = 1 - (ss_res / ss_tot)\n    return r2.item()","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:48.521403Z","start_time":"2023-10-14T11:29:47.883284Z"},"papermill":{"duration":3.473937,"end_time":"2023-10-21T23:36:42.781023","exception":false,"start_time":"2023-10-21T23:36:39.307086","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:40.682671Z","iopub.execute_input":"2024-03-15T12:19:40.682971Z","iopub.status.idle":"2024-03-15T12:19:43.633515Z","shell.execute_reply.started":"2024-03-15T12:19:40.682945Z","shell.execute_reply":"2024-03-15T12:19:43.632747Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train test split ","metadata":{"papermill":{"duration":0.009899,"end_time":"2023-10-21T23:36:42.801437","exception":false,"start_time":"2023-10-21T23:36:42.791538","status":"completed"},"tags":[]}},{"cell_type":"code","source":"%%time \nfrom sklearn.decomposition import TruncatedSVD\n\nY = df_de_train.iloc[:,5:].values\nYr_1 = Y\n","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:50.219093Z","start_time":"2023-10-14T11:29:48.652065Z"},"papermill":{"duration":0.18058,"end_time":"2023-10-21T23:36:43.241846","exception":false,"start_time":"2023-10-21T23:36:43.061266","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:43.634560Z","iopub.execute_input":"2024-03-15T12:19:43.634946Z","iopub.status.idle":"2024-03-15T12:19:43.940941Z","shell.execute_reply.started":"2024-03-15T12:19:43.634922Z","shell.execute_reply":"2024-03-15T12:19:43.940045Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import OrdinalEncoder\nenc = OrdinalEncoder()\nX = enc.fit_transform(df_de_train[ ['cell_type','sm_name']])\n\nX_submit = enc.transform( df_id_map[ ['cell_type','sm_name']]  )\n\n","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:50.232497Z","start_time":"2023-10-14T11:29:50.220664Z"},"papermill":{"duration":0.028836,"end_time":"2023-10-21T23:36:43.281785","exception":false,"start_time":"2023-10-21T23:36:43.252949","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:43.942201Z","iopub.execute_input":"2024-03-15T12:19:43.942523Z","iopub.status.idle":"2024-03-15T12:19:43.953615Z","shell.execute_reply.started":"2024-03-15T12:19:43.942495Z","shell.execute_reply":"2024-03-15T12:19:43.952678Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nimport torch\n\nX_submit = torch.tensor( X_submit, dtype = torch.long )\n","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:50.25741Z","start_time":"2023-10-14T11:29:50.235084Z"},"papermill":{"duration":0.046476,"end_time":"2023-10-21T23:36:43.359485","exception":false,"start_time":"2023-10-21T23:36:43.313009","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:43.954820Z","iopub.execute_input":"2024-03-15T12:19:43.955142Z","iopub.status.idle":"2024-03-15T12:19:43.990330Z","shell.execute_reply.started":"2024-03-15T12:19:43.955111Z","shell.execute_reply":"2024-03-15T12:19:43.989451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install /kaggle/input/einops/einops-0.6.1-py3-none-any.whl\n#!pip install einops==0.6.1 ","metadata":{"papermill":{"duration":32.705717,"end_time":"2023-10-21T23:37:16.075916","exception":false,"start_time":"2023-10-21T23:36:43.370199","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:19:43.991699Z","iopub.execute_input":"2024-03-15T12:19:43.992287Z","iopub.status.idle":"2024-03-15T12:20:16.416385Z","shell.execute_reply.started":"2024-03-15T12:19:43.992253Z","shell.execute_reply":"2024-03-15T12:20:16.415425Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# The model","metadata":{"papermill":{"duration":0.010782,"end_time":"2023-10-21T23:37:16.098371","exception":false,"start_time":"2023-10-21T23:37:16.087589","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import sys\nimport torch\n","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:50.264436Z","start_time":"2023-10-14T11:29:50.259039Z"},"papermill":{"duration":0.019247,"end_time":"2023-10-21T23:37:16.128428","exception":false,"start_time":"2023-10-21T23:37:16.109181","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:20:16.418131Z","iopub.execute_input":"2024-03-15T12:20:16.419031Z","iopub.status.idle":"2024-03-15T12:20:16.423455Z","shell.execute_reply.started":"2024-03-15T12:20:16.418989Z","shell.execute_reply":"2024-03-15T12:20:16.422567Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nimport torch.nn.functional as F\nfrom torch import nn, einsum\n\nfrom einops import rearrange, repeat\n\n# feedforward and attention\n\nclass GEGLU(nn.Module):\n    def forward(self, x):\n        x, gates = x.chunk(2, dim = -1)\n        return x * F.gelu(gates)\n\ndef FeedForward(dim, mult = 4, dropout = 0.):\n    return nn.Sequential(\n        nn.LayerNorm(dim),\n        nn.Linear(dim, dim * mult * 2),\n        GEGLU(),\n        nn.Dropout(dropout),\n        nn.Linear(dim * mult, dim)\n    )\n\nclass Attention(nn.Module):\n    def __init__(\n        self,\n        dim,\n        heads = 8,\n        dim_head = 64,\n        dropout = 0.\n    ):\n        super().__init__()\n        inner_dim = dim_head * heads\n        self.heads = heads\n        self.scale = dim_head ** -0.5\n\n        self.norm = nn.LayerNorm(dim)\n\n        self.to_qkv = nn.Linear(dim, inner_dim * 3, bias = False)\n        self.to_out = nn.Linear(inner_dim, dim, bias = False)\n\n        self.dropout = nn.Dropout(dropout)\n\n    def forward(self, x):\n        h = self.heads\n\n        x = self.norm(x)\n\n        q, k, v = self.to_qkv(x).chunk(3, dim = -1)\n        q, k, v = map(lambda t: rearrange(t, 'b n (h d) -> b h n d', h = h), (q, k, v))\n        q = q * self.scale\n\n        sim = einsum('b h i d, b h j d -> b h i j', q, k)\n\n        attn = sim.softmax(dim = -1)\n        dropped_attn = self.dropout(attn)\n\n        out = einsum('b h i j, b h j d -> b h i d', dropped_attn, v)\n        out = rearrange(out, 'b h n d -> b n (h d)', h = h)\n        out = self.to_out(out)\n\n        return out, attn\n\n# transformer\n\nclass Transformer(nn.Module):\n    def __init__(\n        self,\n        dim,\n        depth,\n        heads,\n        dim_head,\n        attn_dropout,\n        ff_dropout\n    ):\n        super().__init__()\n        self.layers = nn.ModuleList([])\n\n        for _ in range(depth):\n            self.layers.append(nn.ModuleList([\n                Attention(dim, heads = heads, dim_head = dim_head, dropout = attn_dropout),\n                FeedForward(dim, dropout = ff_dropout),\n            ]))\n\n    def forward(self, x, return_attn = False):\n        post_softmax_attns = []\n\n        for attn, ff in self.layers:\n            attn_out, post_softmax_attn = attn(x)\n            post_softmax_attns.append(post_softmax_attn)\n\n            x = attn_out + x\n            x = ff(x) + x\n\n        if not return_attn:\n            return x\n\n        return x, torch.stack(post_softmax_attns)\n\n# numerical embedder\n\nclass NumericalEmbedder(nn.Module):\n    def __init__(self, dim, num_numerical_types):\n        super().__init__()\n        self.weights = nn.Parameter(torch.randn(num_numerical_types, dim))\n        self.biases = nn.Parameter(torch.randn(num_numerical_types, dim))\n\n    def forward(self, x):\n        x = rearrange(x, 'b n -> b n 1')\n        return x * self.weights + self.biases\n\n# main class\n\nclass FTTransformer(nn.Module):\n    def __init__(\n        self,\n        *,\n        categories,\n        num_continuous,\n        dim,\n        depth,\n        heads,\n        dim_head = 16,\n        dim_out = 1,\n        num_special_tokens = 2,\n        attn_dropout = 0.,\n        ff_dropout = 0.\n    ):\n        super().__init__()\n        assert all(map(lambda n: n > 0, categories)), 'number of each category must be positive'\n        assert len(categories) + num_continuous > 0, 'input shape must not be null'\n\n        # categories related calculations\n\n        self.num_categories = len(categories)\n        self.num_unique_categories = sum(categories)\n\n        # create category embeddings table\n\n        self.num_special_tokens = num_special_tokens\n        total_tokens = self.num_unique_categories + num_special_tokens\n\n        # for automatically offsetting unique category ids to the correct position in the categories embedding table\n\n        if self.num_unique_categories > 0:\n            categories_offset = F.pad(torch.tensor(list(categories)), (1, 0), value = num_special_tokens)\n            categories_offset = categories_offset.cumsum(dim = -1)[:-1]\n            self.register_buffer('categories_offset', categories_offset)\n\n            # categorical embedding\n\n            self.categorical_embeds = nn.Embedding(total_tokens, dim)\n\n        # continuous\n\n        self.num_continuous = num_continuous\n\n        if self.num_continuous > 0:\n            self.numerical_embedder = NumericalEmbedder(dim, self.num_continuous)\n\n        # cls token\n\n        self.cls_token = nn.Parameter(torch.randn(1, 1, dim))\n\n        # transformer\n\n        self.transformer = Transformer(\n            dim = dim,\n            depth = depth,\n            heads = heads,\n            dim_head = dim_head,\n            attn_dropout = attn_dropout,\n            ff_dropout = ff_dropout\n        )\n\n        # to logits\n\n        self.to_logits = nn.Sequential(\n            nn.LayerNorm(dim),\n            nn.ReLU(),\n            nn.Linear(dim, dim_out)\n        )\n\n    def forward(self, x_categ, x_numer, return_attn = False):\n        assert x_categ.shape[-1] == self.num_categories, f'you must pass in {self.num_categories} values for your categories input'\n\n        xs = []\n        if self.num_unique_categories > 0:\n            x_categ = x_categ + self.categories_offset\n\n            x_categ = self.categorical_embeds(x_categ)\n\n            xs.append(x_categ)\n\n        # add numerically embedded tokens\n        if self.num_continuous > 0:\n            x_numer = self.numerical_embedder(x_numer)\n\n            xs.append(x_numer)\n\n        # concat categorical and numerical\n\n        x = torch.cat(xs, dim = 1)\n\n        # append cls tokens\n        b = x.shape[0]\n        cls_tokens = repeat(self.cls_token, '1 1 d -> b 1 d', b = b)\n        x = torch.cat((cls_tokens, x), dim = 1)\n\n        # attend\n\n        x, attns = self.transformer(x, return_attn = True)\n\n        # get cls token\n\n        x = x[:, 0]\n\n        # out in the paper is linear(relu(ln(cls)))\n\n        logits = self.to_logits(x)\n\n        if not return_attn:\n            return logits\n\n        return logits, attns","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:50.268625Z","start_time":"2023-10-14T11:29:50.265859Z"},"papermill":{"duration":0.051161,"end_time":"2023-10-21T23:37:16.190491","exception":false,"start_time":"2023-10-21T23:37:16.13933","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:20:16.426667Z","iopub.execute_input":"2024-03-15T12:20:16.426925Z","iopub.status.idle":"2024-03-15T12:20:16.465259Z","shell.execute_reply.started":"2024-03-15T12:20:16.426902Z","shell.execute_reply":"2024-03-15T12:20:16.464452Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if torch.cuda.is_available():\n    device = torch.device('cuda')\nelse:\n    device = torch.device('cpu')","metadata":{"papermill":{"duration":0.103929,"end_time":"2023-10-21T23:37:16.443061","exception":false,"start_time":"2023-10-21T23:37:16.339132","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:20:16.466248Z","iopub.execute_input":"2024-03-15T12:20:16.466582Z","iopub.status.idle":"2024-03-15T12:20:16.499284Z","shell.execute_reply.started":"2024-03-15T12:20:16.466558Z","shell.execute_reply":"2024-03-15T12:20:16.498344Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Model 1\nmodel_paths_model1_fold0 = ['/kaggle/input/fasttest/64d4d8h/1/best_model_fold0.pth']\nmodel_paths_model1_fold1 = ['/kaggle/input/fasttest/64d4d8h/1/best_model_fold1.pth']\nmodel_paths_model1_fold2 = ['/kaggle/input/fasttest/64d4d8h/1/best_model_fold2.pth']\nmodel_paths_model1_fold3 = ['/kaggle/input/fasttest/64d4d8h/1/best_model_fold3.pth']\nmodel_paths_model1_fold4 = ['/kaggle/input/fasttest/64d4d8h/1/best_model_fold4.pth']\n\n#etc...","metadata":{"execution":{"iopub.status.busy":"2024-03-15T12:20:16.500474Z","iopub.execute_input":"2024-03-15T12:20:16.500753Z","iopub.status.idle":"2024-03-15T12:20:16.509739Z","shell.execute_reply.started":"2024-03-15T12:20:16.500729Z","shell.execute_reply":"2024-03-15T12:20:16.508980Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\ndef create_model(params):\n    model = FTTransformer(**params)\n    x_numer = torch.tensor([[]]).to(device)\n\n    return model, x_numer\n\ndef predict_single_fold(model_path, model_params):\n    model, x_numer = create_model(model_params)\n\n    model.load_state_dict(torch.load(model_path))\n    model.to(device)\n    model.eval()\n\n    with torch.no_grad():\n        batch_X_submit = X_submit.to(device)\n        Y_reduced_preds = model(batch_X_submit, x_numer)\n\n    return Y_reduced_preds\n\n# Model 1\nmodel_params_model1 = {\n    'categories': (6, 146),\n    'num_continuous': 0,\n    'dim': 64,\n    'dim_out': 18211,\n    'depth': 4,\n    'heads': 8,\n    'attn_dropout': 0.4,\n    'ff_dropout': 0.4\n}\n\n\n\n#TODO DICT\nfinal_prediction_model1_fold0 = predict_single_fold(model_paths_model1_fold0[0], model_params_model1)\nfinal_prediction_model1_fold1 = predict_single_fold(model_paths_model1_fold1[0], model_params_model1)\nfinal_prediction_model1_fold2 = predict_single_fold(model_paths_model1_fold2[0], model_params_model1)\nfinal_prediction_model1_fold3 = predict_single_fold(model_paths_model1_fold3[0], model_params_model1)\nfinal_prediction_model1_fold4 = predict_single_fold(model_paths_model1_fold4[0], model_params_model1)\n\n","metadata":{"execution":{"iopub.status.busy":"2024-03-15T12:20:16.510691Z","iopub.execute_input":"2024-03-15T12:20:16.510983Z","iopub.status.idle":"2024-03-15T12:20:17.743487Z","shell.execute_reply.started":"2024-03-15T12:20:16.510961Z","shell.execute_reply":"2024-03-15T12:20:17.742643Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"final_prediction_model1_fold0 = final_prediction_model1_fold0.cpu().numpy()\nfinal_prediction_model1_fold1 = final_prediction_model1_fold1.cpu().numpy()\nfinal_prediction_model1_fold2 = final_prediction_model1_fold2.cpu().numpy()\nfinal_prediction_model1_fold3 = final_prediction_model1_fold3.cpu().numpy()\nfinal_prediction_model1_fold4 = final_prediction_model1_fold4.cpu().numpy()\n\n","metadata":{"papermill":{"duration":0.077399,"end_time":"2023-10-21T23:37:25.80487","exception":false,"start_time":"2023-10-21T23:37:25.727471","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:20:17.744610Z","iopub.execute_input":"2024-03-15T12:20:17.744892Z","iopub.status.idle":"2024-03-15T12:20:17.820483Z","shell.execute_reply.started":"2024-03-15T12:20:17.744869Z","shell.execute_reply":"2024-03-15T12:20:17.819462Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model1 = [final_prediction_model1_fold0, final_prediction_model1_fold1,\n        final_prediction_model1_fold2,final_prediction_model1_fold3,\n        final_prediction_model1_fold4]\n\nmodel1mean = np.mean(model1, axis=0)\n\n\n\n","metadata":{"execution":{"iopub.status.busy":"2024-03-15T12:20:17.821793Z","iopub.execute_input":"2024-03-15T12:20:17.822088Z","iopub.status.idle":"2024-03-15T12:20:17.878560Z","shell.execute_reply.started":"2024-03-15T12:20:17.822064Z","shell.execute_reply":"2024-03-15T12:20:17.877451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n   \n\naverage_predictions = model1mean\n\ndf_submit = pd.DataFrame(average_predictions, columns=df_de_train.columns[5:])\n\ndf_submit.index.name = 'id'\n\nprint(df_submit.shape)\n\ndisplay(df_submit)\n\ndf_submit.to_csv('submission.csv')","metadata":{"papermill":{"duration":7.942851,"end_time":"2023-10-21T23:37:33.793272","exception":false,"start_time":"2023-10-21T23:37:25.850421","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:20:17.879964Z","iopub.execute_input":"2024-03-15T12:20:17.880275Z","iopub.status.idle":"2024-03-15T12:20:26.074323Z","shell.execute_reply.started":"2024-03-15T12:20:17.880250Z","shell.execute_reply":"2024-03-15T12:20:26.073543Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":0.012927,"end_time":"2023-10-21T23:37:33.855209","exception":false,"start_time":"2023-10-21T23:37:33.842282","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('%.1f seconds passed total '%(time.time()-t0start) )\nprint('%.1f minutes passed total '%( (time.time()-t0start)/60)  )\nprint('%.2f hours passed total '%( (time.time()-t0start)/3600)  )","metadata":{"ExecuteTime":{"end_time":"2023-10-14T11:29:51.432994Z","start_time":"2023-10-14T11:29:51.432985Z"},"papermill":{"duration":0.023233,"end_time":"2023-10-21T23:37:33.935077","exception":false,"start_time":"2023-10-21T23:37:33.911844","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-03-15T12:20:26.075539Z","iopub.execute_input":"2024-03-15T12:20:26.075885Z","iopub.status.idle":"2024-03-15T12:20:26.082294Z","shell.execute_reply.started":"2024-03-15T12:20:26.075853Z","shell.execute_reply":"2024-03-15T12:20:26.081456Z"},"trusted":true},"execution_count":null,"outputs":[]}]}