{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":23870,"databundleVersionId":1781260,"sourceType":"competition"}],"dockerImageVersionId":29271,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt, zipfile\nimport numpy as np\nimport glob\nimport imageio\nimport xml\nimport xml.etree.ElementTree as ET\nimport time\nimport PIL\nimport tensorflow as tf\nfrom tensorflow.keras import layers\nfrom tensorflow.keras.preprocessing.image import array_to_img, img_to_array\nfrom tensorflow.keras.preprocessing.image import NumpyArrayIterator, ImageDataGenerator\nimport IPython\nfrom IPython import display\nimport os\nROOT = '../input/'\ndirs = os.listdir(ROOT)\nprint(dirs)\n\n\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-07-12T09:44:46.491253Z","iopub.execute_input":"2024-07-12T09:44:46.491624Z","iopub.status.idle":"2024-07-12T09:44:46.503613Z","shell.execute_reply.started":"2024-07-12T09:44:46.491568Z","shell.execute_reply":"2024-07-12T09:44:46.502546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%matplotlib inline\nfrom numpy import expand_dims, mean, ones\n\nfrom numpy.random import randn, randint\nfrom keras.datasets.mnist import load_data\nfrom keras import backend\nfrom keras.optimizers import RMSprop\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Reshape, Flatten, Conv2D, Conv2DTranspose, LeakyReLU, BatchNormalization\nfrom keras.initializers import RandomNormal\nfrom keras.constraints import Constraint\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:27:42.701461Z","iopub.execute_input":"2024-07-12T09:27:42.701806Z","iopub.status.idle":"2024-07-12T09:27:42.715718Z","shell.execute_reply.started":"2024-07-12T09:27:42.701752Z","shell.execute_reply":"2024-07-12T09:27:42.714526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"IMAGES_PATH =  '/kaggle/input/ranzcr-clip-catheter-line-classification/train/'\nANNOTATIONS_PATH = '/kaggle/input/ranzcr-clip-catheter-line-classification/train.csv'\n\nIMGS = os.listdir(IMAGES_PATH)\nBREEDS = ANNOTATIONS_PATH\n\nBATCH_SIZE = 28\nIMG_SIZE =28\nCHANNELS = 1","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2024-07-12T09:24:27.490874Z","iopub.execute_input":"2024-07-12T09:24:27.491328Z","iopub.status.idle":"2024-07-12T09:24:27.522692Z","shell.execute_reply.started":"2024-07-12T09:24:27.491253Z","shell.execute_reply":"2024-07-12T09:24:27.521438Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#load data\nimport pandas as pd\nimport numpy as np\nfrom tqdm import tqdm\nfrom keras.preprocessing import image\nimport tensorflow\ntest_df = pd.read_csv('/kaggle/input/ranzcr-clip-catheter-line-classification/train.csv')\ndef append_ext(fn):\n    return \"/kaggle/input/ranzcr-clip-catheter-line-classification/train/\"+fn+\".jpg\"\n\n\ntest_df[\"StudyInstanceUID\"]=test_df[\"StudyInstanceUID\"].apply(append_ext)\ntest_image = []\ntarget_size_dim = 28\n\n\ntest_lab =test_df[['ETT - Abnormal']]","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:24:58.151381Z","iopub.execute_input":"2024-07-12T09:24:58.151729Z","iopub.status.idle":"2024-07-12T09:24:58.282645Z","shell.execute_reply.started":"2024-07-12T09:24:58.151675Z","shell.execute_reply":"2024-07-12T09:24:58.281469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import math\n        \nclass DataGenerator(tf.keras.utils.Sequence):\n    \"\"\"\n    Custom data generator class for Digits dataset\n    \"\"\"\n    def __init__(self, test_df: pd.DataFrame, batch_size: int=16):\n        self.labels = test_df[['ETT - Abnormal']].values\n        self.images = test_df[\"StudyInstanceUID\"].values\n        self.labels = tf.keras.utils.to_categorical(self.labels)\n        self.batch_size = batch_size\n    \n    def __len__(self):\n        return math.ceil(len(self.images) / self.batch_size)\n    \n    def __getitem__(self, index):\n        \"\"\"\n        Returns a batch of data\n        \"\"\"\n        batch_images = self.images[index * self.batch_size : (index + 1) * self.batch_size]\n        batch_labels = self.labels[index * self.batch_size : (index + 1) * self.batch_size]\n\n        return batch_images, batch_labels","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:25:02.949128Z","iopub.execute_input":"2024-07-12T09:25:02.949520Z","iopub.status.idle":"2024-07-12T09:25:02.961746Z","shell.execute_reply.started":"2024-07-12T09:25:02.949464Z","shell.execute_reply":"2024-07-12T09:25:02.960647Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train validation split\nfrom sklearn.model_selection import train_test_split\nX_train, X_val = train_test_split(test_df,test_size=0.2, random_state=0)\nprint(X_train.shape)\nprint(X_val.shape)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:59:19.538635Z","iopub.execute_input":"2024-07-12T09:59:19.539095Z","iopub.status.idle":"2024-07-12T09:59:19.564953Z","shell.execute_reply.started":"2024-07-12T09:59:19.538968Z","shell.execute_reply":"2024-07-12T09:59:19.563535Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def generate_real_samples(dataset, n_samples):\n\t# choose random instances\n\tix = randint(0, 1, n_samples)\n\t# select images\n\tX = dataset[ix]\n\t# generate class labels, -1 for 'real'\n\ty = -ones((n_samples, 1))\n\treturn X, y\n\ndataset_0=X_train['StudyInstanceUID']","metadata":{"execution":{"iopub.status.busy":"2024-07-12T10:38:59.311941Z","iopub.execute_input":"2024-07-12T10:38:59.312315Z","iopub.status.idle":"2024-07-12T10:38:59.319236Z","shell.execute_reply.started":"2024-07-12T10:38:59.312258Z","shell.execute_reply":"2024-07-12T10:38:59.317942Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test =generate_real_samples(dataset_0,10)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T10:39:17.211706Z","iopub.execute_input":"2024-07-12T10:39:17.212145Z","iopub.status.idle":"2024-07-12T10:39:17.218294Z","shell.execute_reply.started":"2024-07-12T10:39:17.212066Z","shell.execute_reply":"2024-07-12T10:39:17.217346Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(test)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T10:39:19.828732Z","iopub.execute_input":"2024-07-12T10:39:19.829114Z","iopub.status.idle":"2024-07-12T10:39:19.836434Z","shell.execute_reply.started":"2024-07-12T10:39:19.829055Z","shell.execute_reply":"2024-07-12T10:39:19.835106Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"c_m =define_critic()\nc_m.summary()","metadata":{"execution":{"iopub.status.busy":"2024-07-12T10:59:41.601364Z","iopub.execute_input":"2024-07-12T10:59:41.601724Z","iopub.status.idle":"2024-07-12T10:59:41.927910Z","shell.execute_reply.started":"2024-07-12T10:59:41.601672Z","shell.execute_reply":"2024-07-12T10:59:41.926736Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_loader = DataGenerator(X_train)\nvalid_loader = DataGenerator(X_val)\n\ntraining_dataset = train_loader\nlen(training_dataset[10][1])","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:25:11.121879Z","iopub.execute_input":"2024-07-12T09:25:11.122321Z","iopub.status.idle":"2024-07-12T09:25:11.136953Z","shell.execute_reply.started":"2024-07-12T09:25:11.122259Z","shell.execute_reply":"2024-07-12T09:25:11.135786Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(train_loader.__len__())\nprint(train_loader.__getitem__(375)[1][10])\nimg = train_loader.__getitem__(375)[0][10]\nimg = image.load_img(img,target_size=(target_size_dim,target_size_dim,1))\nimg = image.img_to_array(img)\nimg = img/255\nplt.imshow(img)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:48:23.875528Z","iopub.execute_input":"2024-07-12T09:48:23.875872Z","iopub.status.idle":"2024-07-12T09:48:24.274308Z","shell.execute_reply.started":"2024-07-12T09:48:23.875821Z","shell.execute_reply":"2024-07-12T09:48:24.272810Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!mkdir ./images\n# clip model weights to a given hypercube\nclass ClipConstraint(Constraint):\n\t# set clip value when initialized\n\tdef __init__(self, clip_value):\n\t\tself.clip_value = clip_value\n \n\t# clip model weights to hypercube\n\tdef __call__(self, weights):\n\t\treturn backend.clip(weights, -self.clip_value, self.clip_value)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:46:15.621053Z","iopub.execute_input":"2024-07-12T09:46:15.621471Z","iopub.status.idle":"2024-07-12T09:46:16.787312Z","shell.execute_reply.started":"2024-07-12T09:46:15.621407Z","shell.execute_reply":"2024-07-12T09:46:16.785868Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# calculate wasserstein loss\ndef wasserstein_loss(y_true, y_pred):\n\treturn backend.mean(y_true * y_pred)\n \n# define the standalone critic model\ndef define_critic(in_shape=(28,28,3)):\n\t# weight initialization\n\tinit = RandomNormal(stddev=0.02)\n\t# weight constraint\n\tconst = ClipConstraint(0.01)\n\t# define model\n\tmodel = Sequential()\n\t# downsample to 14x14\n\tmodel.add(Conv2D(64, (4,4), strides=(2,2), padding='same', kernel_initializer=init, kernel_constraint=const, input_shape=in_shape))\n\tmodel.add(BatchNormalization()) #kernel_constraint=const\n\tmodel.add(LeakyReLU(alpha=0.2))\n\t# downsample to 7x7\n\tmodel.add(Conv2D(64, (4,4), strides=(2,2), padding='same', kernel_initializer=init, kernel_constraint=const))\n\tmodel.add(BatchNormalization()) #kernel_constraint=const\n\tmodel.add(LeakyReLU(alpha=0.2))\n\t# scoring, linear activation\n\tmodel.add(Flatten())\n\tmodel.add(Dense(1)) #kernel_constraint=const\n\t# compile model\n\topt = RMSprop(lr=0.00005)\n\tmodel.compile(loss=wasserstein_loss, optimizer=opt)\n\treturn model\n \n# define the standalone generator model\ndef define_generator(latent_dim):\n\t# weight initialization\n\tinit = RandomNormal(stddev=0.02)\n\t# define model\n\tmodel = Sequential()\n\t# foundation for 7x7 image\n\tn_nodes = 128 * 7 * 7\n\tmodel.add(Dense(n_nodes, kernel_initializer=init, input_dim=latent_dim))\n\tmodel.add(LeakyReLU(alpha=0.2))\n\tmodel.add(Reshape((7, 7, 128)))\n\t# upsample to 14x14\n\tmodel.add(Conv2DTranspose(128, (4,4), strides=(2,2), padding='same', kernel_initializer=init))\n\tmodel.add(BatchNormalization())\n\tmodel.add(LeakyReLU(alpha=0.2))\n\t# upsample to 28x28\n\tmodel.add(Conv2DTranspose(128, (4,4), strides=(2,2), padding='same', kernel_initializer=init))\n\tmodel.add(BatchNormalization())\n\tmodel.add(LeakyReLU(alpha=0.2))\n\t# output 28x28x1  ===> to 3 chaneles\n\tmodel.add(Conv2D(3, (7,7), activation='tanh', padding='same', kernel_initializer=init))\n\treturn model\n \n# define the combined generator and critic model, for updating the generator\ndef define_gan(generator, critic):\n\t# make weights in the critic not trainable\n\tcritic.trainable = False\n\t# connect them\n\tmodel = Sequential()\n\t# add generator\n\tmodel.add(generator)\n\t# add the critic\n\tmodel.add(critic)\n\t# compile model\n\topt = RMSprop(lr=0.00005)\n\tmodel.compile(loss=wasserstein_loss, optimizer=opt)\n\treturn model\n \n# load images\ndef load_real_samples():\n\t# load dataset\n\t(trainX, trainy), (_, _) = load_data()\n\t# select all of the examples for a given class\n\tselected_ix = trainy == 3\n\tX = trainX[selected_ix]\n\t# expand to 3d, e.g. add channels\n\tX = expand_dims(X, axis=-1)\n\t# convert from ints to floats\n\tX = X.astype('float32')\n\t# scale from [0,255] to [-1,1]\n\tX = (X - 127.5) / 127.5\n\treturn X\n \n# select real samples\ndef generate_real_samples(dataset, n_samples):\n\t# choose random instances\n\tix = randint(0, 1, n_samples)\n\t# select images\n\tX = dataset[ix]\n\t# generate class labels, -1 for 'real'\n\ty = -ones((n_samples, 1))\n\treturn X, y\n \n# generate points in latent space as input for the generator\ndef generate_latent_points(latent_dim, n_samples):\n\t# generate points in the latent space\n\tx_input = randn(latent_dim * n_samples)\n\t# reshape into a batch of inputs for the network\n\tx_input = x_input.reshape(n_samples, latent_dim)\n\treturn x_input\n \n# use the generator to generate n fake examples, with class labels\ndef generate_fake_samples(generator, latent_dim, n_samples):\n\t# generate points in latent space\n\tx_input = generate_latent_points(latent_dim, n_samples)\n\t# predict outputs\n\tX = generator.predict(x_input)\n\t# create class labels with 1.0 for 'fake'\n\ty = ones((n_samples, 1))\n\treturn X, y\n \n# generate samples and save as a plot and save the model\ndef summarize_performance(step, g_model, latent_dim, n_samples=100):\n    # prepare fake examples\n    X, _ = generate_fake_samples(g_model, latent_dim, n_samples)\n    # scale from [-1,1] to [0,1]\n    X = (X + 1) / 2.0\n    # plot images\n    for i in range(10 * 10):\n      # define subplot\n      plt.subplot(10, 10, 1 + i)\n      # turn off axis\n      plt.axis('off')\n      # plot raw pixel data\n      plt.imshow(X[i, :, :, 0], cmap='gray_r')\n    # save plot to file\n    filename1 = 'generated_plot_%04d.png' % (step+1)\n    plt.savefig(filename1)\n    plt.close()\n    \n    img = mpimg.imread('/content/generated_plot_%04d.png' % (step+1))\n    imgplot = plt.imshow(img)\n    plt.show()\n    # save the generator model\n  # \tfilename2 = 'model_%04d.h5' % (step+1)\n  # \tg_model.save(filename2)\n  # \tprint('>Saved: %s and %s' % (filename1, filename2))\n \n# create a line plot of loss for the gan and save to file\ndef plot_history(d1_hist, d2_hist, g_hist):\n    # plot history\n    plt.plot(d1_hist, label='crit_real')\n    plt.plot(d2_hist, label='crit_fake')\n    plt.plot(g_hist, label='gen')\n    plt.legend()\n    plt.savefig('plot_line_plot_loss.png')\n    plt.show()\n    plt.close()\n \n\n# train the generator and critic\ndef train(g_model, c_model, gan_model, dataset, latent_dim, n_epochs=50, n_batch=64, n_critic=5):\n\t# calculate the number of batches per training epoch\n    bat_per_epo = int(len(dataset) / n_batch)   # ----------------------------\n\t# calculate the number of training iterations\n    n_steps = bat_per_epo * n_epochs\n\t# calculate the size of half a batch of samples\n    half_batch = int(n_batch / 2)\n\t# lists for keeping track of loss\n    c1_hist, c2_hist, g_hist = list(), list(), list()\n\t# manually enumerate epochs\n    for i in range(n_steps):\n\t\t# update the critic more than the generator\n        c1_tmp, c2_tmp = list(), list()\n        for _ in range(n_critic):\n            # get randomly selected 'real' samples\n            X_real, y_real = generate_real_samples(dataset, half_batch) \n\n            ##----------------------Loading half_batch images -------------------------------------------------------\n            imagearr =[]\n            for m in X_real:\n                img = image.load_img(m,target_size=(target_size_dim,target_size_dim,1))\n                img = image.img_to_array(img)\n                img = img.astype('float32')\n                # scale from [0,255] to [-1,1]\n                img = (img - 127.5) / 127.5\n                \n                imagearr.append(img)\n            X_real  = np.array(imagearr)\n            #X_real  = tf.convert_to_tensor(imagearr)\n## Stoppppppppppppppp----------------------------------------------------------------------------\n\t\t\t# update critic model weights\n            c_loss1 = c_model.train_on_batch(X_real, y_real)\n            c1_tmp.append(c_loss1)\n            # generate 'fake' examples\n            X_fake, y_fake = generate_fake_samples(g_model, latent_dim, half_batch)\n\t\t\t# update critic model weights\n            c_loss2 = c_model.train_on_batch(X_fake, y_fake)\n            c2_tmp.append(c_loss2)\n\t\t# store critic loss\n        c1_hist.append(mean(c1_tmp))\n        c2_hist.append(mean(c2_tmp))\n        # prepare points in latent space as input for the generator\n        X_gan = generate_latent_points(latent_dim, n_batch)\n        # create inverted labels for the fake samples\n        y_gan = -ones((n_batch, 1))\n        # update the generator via the critic's error\n        g_loss = gan_model.train_on_batch(X_gan, y_gan)\n        g_hist.append(g_loss)\n    \n    \n#     if (i+1) % 10 == 0: \n        print('>%d, c1=%.3f, c2=%.3f g=%.3f' % (i+1, c1_hist[-1], c2_hist[-1], g_loss))\n      \n      \n\t\t# evaluate the model performance every 'epoch'\n        if (i+1) % 50 == 0: # %bat_per_epo\n            summarize_performance(i, g_model, latent_dim)\n\t# line plots of loss\n    plot_history(c1_hist, c2_hist, g_hist)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T11:07:07.814083Z","iopub.execute_input":"2024-07-12T11:07:07.814473Z","iopub.status.idle":"2024-07-12T11:07:07.877541Z","shell.execute_reply.started":"2024-07-12T11:07:07.814416Z","shell.execute_reply":"2024-07-12T11:07:07.875968Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# size of the latent space\nlatent_dim = 50\n# create the critic\ncritic = define_critic()\n# create the generator\ngenerator = define_generator(latent_dim)\n# create the gan\ngan_model = define_gan(generator, critic)\n# load image data\n#dataset = load_real_samples()\ndataset = dataset_0\nprint(dataset.shape)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T11:07:15.631133Z","iopub.execute_input":"2024-07-12T11:07:15.631538Z","iopub.status.idle":"2024-07-12T11:07:16.868031Z","shell.execute_reply.started":"2024-07-12T11:07:15.631482Z","shell.execute_reply":"2024-07-12T11:07:16.866945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train(generator, critic, gan_model, dataset, latent_dim)","metadata":{"execution":{"iopub.status.busy":"2024-07-12T11:07:19.255413Z","iopub.execute_input":"2024-07-12T11:07:19.255816Z"},"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":"","metadata":{"execution":{"iopub.status.busy":"2024-07-08T09:43:58.146441Z","iopub.execute_input":"2024-07-08T09:43:58.14696Z","iopub.status.idle":"2024-07-08T09:43:58.166558Z","shell.execute_reply.started":"2024-07-08T09:43:58.146882Z","shell.execute_reply":"2024-07-08T09:43:58.165544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:28:30.670368Z","iopub.execute_input":"2024-07-12T09:28:30.670783Z","iopub.status.idle":"2024-07-12T09:28:30.677130Z","shell.execute_reply.started":"2024-07-12T09:28:30.670714Z","shell.execute_reply":"2024-07-12T09:28:30.676022Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-07-12T09:29:00.058864Z","iopub.execute_input":"2024-07-12T09:29:00.059287Z","iopub.status.idle":"2024-07-12T09:29:00.072992Z","shell.execute_reply.started":"2024-07-12T09:29:00.059215Z","shell.execute_reply":"2024-07-12T09:29:00.071812Z"},"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":"","metadata":{"execution":{"iopub.status.busy":"2024-07-08T09:43:58.898661Z","iopub.execute_input":"2024-07-08T09:43:58.898955Z","iopub.status.idle":"2024-07-08T09:43:58.91238Z","shell.execute_reply.started":"2024-07-08T09:43:58.898907Z","shell.execute_reply":"2024-07-08T09:43:58.910934Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-07-08T09:43:58.915256Z","iopub.execute_input":"2024-07-08T09:43:58.915627Z","iopub.status.idle":"2024-07-08T09:43:58.925834Z","shell.execute_reply.started":"2024-07-08T09:43:58.915548Z","shell.execute_reply":"2024-07-08T09:43:58.924834Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-07-08T09:43:58.927532Z","iopub.execute_input":"2024-07-08T09:43:58.92787Z","iopub.status.idle":"2024-07-08T09:43:58.945877Z","shell.execute_reply.started":"2024-07-08T09:43:58.92782Z","shell.execute_reply":"2024-07-08T09:43:58.944848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-07-08T09:43:58.947503Z","iopub.execute_input":"2024-07-08T09:43:58.947872Z","iopub.status.idle":"2024-07-08T09:43:58.963797Z","shell.execute_reply.started":"2024-07-08T09:43:58.947811Z","shell.execute_reply":"2024-07-08T09:43:58.962765Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-07-08T09:43:58.965495Z","iopub.execute_input":"2024-07-08T09:43:58.965922Z","iopub.status.idle":"2024-07-08T09:43:58.982324Z","shell.execute_reply.started":"2024-07-08T09:43:58.965847Z","shell.execute_reply":"2024-07-08T09:43:58.981319Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-07-08T09:43:58.983757Z","iopub.execute_input":"2024-07-08T09:43:58.984079Z"},"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":"","metadata":{"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":[]}]}