diff --git a/.dockerignore b/.dockerignore
index 271516eb50446c9779c3ddec1ef910301cd765ef..4f65c1899ef0a63ef4484ee252f1f911a2649865 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,5 +1,6 @@
 config
 notes
+dist
 .venv
 .vscode
 .idea
diff --git a/Makefile b/Makefile
index 581febaf6d532839c2139656541db13f6c33733b..bfd1bb4c549db22d9d61b6f579b795badb03379a 100644
--- a/Makefile
+++ b/Makefile
@@ -7,5 +7,5 @@ docker-run:
 	docker run -it -p 8888:8888 fairnb
 
 docker-save:
-	docker save -o tmp/fairnb_image.tar fairnb
-	tar -zcvf tmp/fairnb_image.tar.gz tmp/fairnb_image.tar
\ No newline at end of file
+	docker save -o dist/fairnb_image.tar fairnb
+	tar -zcvf dist/fairnb_image.tar.gz tmp/fairnb_image.tar
\ No newline at end of file
diff --git a/README.md b/README.md
index 980c77c825638a65878b899aea46f94c17a8fc27..904f6c65f666c8f34c57ff97efbe4fba407be315 100644
--- a/README.md
+++ b/README.md
@@ -10,19 +10,25 @@ Following packages are additionally needed: git-lfs, libsnfile1 (needed for libr
 Install them with your package manager.
 
 To authenticate with the DBRepo and Invenio servers, rename example-config_<platform>.yml located in the config folder
-to config_<platform>.yml and enter you credentials in the placeholders.
+to config_<platform>.yml and enter your credentials in the placeholders. Credentials are not needed for runs done fully locally.
 
 ## Usage
 The main notebook is located in notebooks/main.ipynb. It executes the full workflow of the project.
 Alternatively, notebooks/standalone.ipynb also contains the full workflow.
 
+
+### Docker
 A docker image is also provided for download on invenio, containing a running jupyter instance with all dependencies installed.
 
+Beware this docker image does not have a config file included and will not be able to authenticate with 
+the DBRepo and Invenio servers.
+Therefore, if one wants to execute the notebooks locally, only_local must be set to true in the execute method.
+
 ## Roadmap & Project Status
 The project is done in the context of a bachelor thesis, extensions are not planned for now.
 
 ## Contributing
-
+Fork the repository and open a pull request.
 
 ## Authors and acknowledgment
 Lukas Mahler
diff --git a/fairnb/api/dbrepo.py b/fairnb/api/dbrepo.py
index f7c4a5ce080f5b232a45b7447571eabcd96ff876..a8cebf8121692052d01b34e1f20b9e6c8d14858d 100644
--- a/fairnb/api/dbrepo.py
+++ b/fairnb/api/dbrepo.py
@@ -1,25 +1,18 @@
 import pathlib
 import logging
+from tusclient import client
 from datetime import datetime
 from functools import wraps
 from typing import Any, Callable
-
-import numpy as np
 import requests
 import pandas as pd
 import csv
 from io import StringIO
-
-from decorator import decorator
 from keycloak import KeycloakOpenID
 
 LOG = logging.getLogger(__name__)
 TIMEOUT = 600
 
-# TODO: add method to automatically delete table content
-# and replace it with given df
-
-
 def re_auth(func: Callable) -> Callable:
     @wraps(func)
     def inner(self, *args, **kwargs):
@@ -58,12 +51,17 @@ class DBRepoConnector:
         self.container_id = container_id
         self.database_id = database_id
         self.__keycloak_openid = KeycloakOpenID(
-            server_url="https://dbrepo1.ec.tuwien.ac.at/api/auth/",
+            server_url=f"{host}/api/auth/",
             client_id="dbrepo-client",
             realm_name="dbrepo",
             client_secret_key=client_secret_key,
         )
         self.authenticate_keycloak()
+        self.tusclient = client.TusClient(
+            f"{self.host}/api/upload/files/",
+            # headers=self.headers
+            headers={'Content-Type': 'application/offset+octet-stream'}
+        )
 
     def get_token_age(self) -> datetime:
         return self.__token_age
@@ -134,13 +132,13 @@ class DBRepoConnector:
 
         mapped_data_types = dataframe.dtypes.astype(str).map(
             {
-                'int64': 'number',
-                'int32': 'number',
-                'object': 'text',
-                'float32': 'decimal',
-                'float64': 'decimal',
-                'bool': 'boolean',
-                'datetime64[ns]': 'timestamp',
+                'int64': {'type': 'int', 'size': 64},
+                'int32': {'type': 'int', 'size': 64},
+                'object': {'type': 'text'},
+                'float32': {'type': 'float', 'size': 24},
+                'float64': {'type': 'float', 'size': 24},
+                'bool': {'type': 'bool'},
+                'datetime64[ns]': {'type': 'timestamp', 'dfid': 1},
             }
         )
 
@@ -150,15 +148,14 @@ class DBRepoConnector:
             "columns": [
                 {
                     "name": column_name,
-                    "type": mapped_data_types[column_name],
-                    # "dfid": 0,
-                    # "unique": False,
+                    "type": mapped_data_types[column_name].get('type'),
+                    "dfid": mapped_data_types[column_name].get('dfid'),
+                    "d": mapped_data_types.get("d"),
+                    "enums": mapped_data_types[column_name].get("enums", []),
                     "primary_key": False,
                     "null_allowed": False,
-                    # "date_format": None if mapped_data_types[column_name] == 'timestamp' else None  # TODO: add date_format
-                    # "check_expression": "string",
-                    # "foreign_key": "string",
-                    # "enum_values": ["string"]
+                    "sets": [],
+                    "size": mapped_data_types[column_name].get("size"),
                 } for column_name in dataframe.columns
             ],
             "constraints": {
@@ -168,10 +165,7 @@ class DBRepoConnector:
             }
         }
 
-        # add date_format
-
         LOG.debug(table)
-
         return table
 
     @re_auth
@@ -179,7 +173,7 @@ class DBRepoConnector:
         """ Returns the metadata for all tables in the database """
 
         response = requests.get(
-            f"{self.host}/api/container/{self.container_id}/database/" 
+            f"{self.host}/api/database/" 
             f"{self.database_id}",
             timeout=TIMEOUT,
         )
@@ -210,10 +204,11 @@ class DBRepoConnector:
     @re_auth
     def create_table(self, dataframe: pd.DataFrame, table_name: str, table_descriptor: str):
         """ Creates a new table """
+
         data = self._create_table_data(dataframe, table_name, table_descriptor)
 
         response = requests.post(
-            f"{self.host}/api/container/{self.container_id}/database/{self.database_id}/table",
+            f"{self.host}/api/database/{self.database_id}/table",
             json=data,
             headers=self.headers
         )
@@ -242,38 +237,37 @@ class DBRepoConnector:
     def upload_data(self, dataframe: pd.DataFrame, table_id: str):
         """ Uploads a Dataframe to specified table """
 
-        split_count = len(dataframe) // 10_000 + 1  # split into chunks of 10k rows
-        dfs = np.array_split(dataframe, split_count)
-
-        for df in dfs:
-            # convert dataframe to a string buffer to make it uploadable
-            df.to_csv(string_io := StringIO(), index=False, quoting=csv.QUOTE_ALL)
-
-            # upload data to 'frontend' middleware
-            response_upload = requests.post(
-                f"{self.host}/server-middleware/upload",
-                files={"file": string_io.getvalue()},
-                headers=self.headers,
-                timeout=TIMEOUT
-            )
-            LOG.debug(response_upload)
-
-            if not response_upload.ok:
-                LOG.warning(f"Upload for table {table_id} failed: {response_upload}")
+        dataframe.to_csv(
+            string_io := StringIO(),
+            index=False,
+            quoting=csv.QUOTE_ALL)
 
-            upload_location = response_upload.json().get("path")
-            LOG.debug(f"Upload location: {upload_location}")
+        uploader = self.tusclient.uploader(
+            file_stream=string_io,
+            chunk_size=1024*2,
+        )
 
-            # move data into table
-            response_move = requests.post(
-                f"{self.host}/api/container/{self.container_id}/database/{self.database_id}/table/{table_id}/data/import",
-                json={"location": upload_location, "quote": '"', "separator": ",", "skip_lines": 1},
-                headers=self.headers
-            )
-            LOG.debug(response_move)
+        upload_url = uploader.create_url()
+        uploader.set_url(upload_url.replace('http', 'https'))   # FIX: wrong location response
+        uploader.upload()
+
+        response_upload_import = requests.post(
+            f"{self.host}/api/database/{self.database_id}/table/{table_id}/data/import",
+            json={
+                "false_element": None,
+                "location": f"/tmp/{upload_url.split('/')[-1]}",
+                "null_element": None,
+                "quote": '"',
+                "separator": ",",
+                "skip_lines": 1,
+                "true_element": None
+            },
+            headers=self.headers
+        )
+        LOG.debug(response_upload_import)
 
-            if not response_move.ok:
-                LOG.warning(f"Move for table {table_id} failed: {response_move}")
+        if not response_upload_import.ok:
+            LOG.warning(f"Move for table {table_id} failed: {response_upload_import}")
 
     @re_auth
     def delete_all_data(self, table_id: str):
@@ -290,7 +284,7 @@ class DBRepoConnector:
     def download_page(self, table_id: str, page: int, size: int = 100):
         """ Downloads a single page of content of a table """
         response = requests.get(
-            f"{self.host}/api/container/{self.container_id}/database/{self.database_id}/table/{table_id}"
+            f"{self.host}/api/database/{self.database_id}/table/{table_id}"
             f"/data?page={page}&size={size}",
             headers=self.headers,
             timeout=TIMEOUT
@@ -304,7 +298,7 @@ class DBRepoConnector:
     def download_table(self, table_id: str):
         """ Downloads a whole table and returns content of downloaded table """
         response = requests.get(
-            f"{self.host}/api/container/{self.container_id}/database/{self.database_id}/table/{table_id}/export",
+            f"{self.host}/api/database/{self.database_id}/table/{table_id}/export",
             headers=self.headers,
             timeout=TIMEOUT
         )
diff --git a/fairnb/entity/dbrepo_entity.py b/fairnb/entity/dbrepo_entity.py
index ae59e9eb8f9464647b871d1086448b760ab39a2e..b54851f4cadd4b74424854af312de9eb99cef521 100644
--- a/fairnb/entity/dbrepo_entity.py
+++ b/fairnb/entity/dbrepo_entity.py
@@ -71,7 +71,7 @@ class DbRepoEntity(Entity):
             self.name,
             self.description,
             executed_file=executed_file,
-            uri=f"{self.dbrepo_connector.host}/api/container/{self.dbrepo_connector.container_id}/database/"
+            uri=f"{self.dbrepo_connector.host}/api/database/"
                 f"{self.dbrepo_connector.database_id}/table/{self.table_id}",
             type=self.type,
             platform="dbrepo",
diff --git a/notebooks/3_aggregate_features.ipynb b/notebooks/3_aggregate_features.ipynb
index 2a1646457063b748a64d7fa7711c8f2ae9686943..791cd6c4597793eeeb74329c83f79a9b945d8a2c 100644
--- a/notebooks/3_aggregate_features.ipynb
+++ b/notebooks/3_aggregate_features.ipynb
@@ -5,10 +5,10 @@
    "id": "f48a4573",
    "metadata": {
     "papermill": {
-     "duration": 0.002709,
-     "end_time": "2023-09-01T11:35:09.037422",
+     "duration": 0.00423,
+     "end_time": "2023-10-08T16:34:18.656322",
      "exception": false,
-     "start_time": "2023-09-01T11:35:09.034713",
+     "start_time": "2023-10-08T16:34:18.652092",
      "status": "completed"
     },
     "tags": []
@@ -30,19 +30,19 @@
     },
     "collapsed": true,
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:09.044339Z",
-     "iopub.status.busy": "2023-09-01T11:35:09.044011Z",
-     "iopub.status.idle": "2023-09-01T11:35:09.306707Z",
-     "shell.execute_reply": "2023-09-01T11:35:09.305772Z"
+     "iopub.execute_input": "2023-10-08T16:34:18.667049Z",
+     "iopub.status.busy": "2023-10-08T16:34:18.665614Z",
+     "iopub.status.idle": "2023-10-08T16:34:19.196786Z",
+     "shell.execute_reply": "2023-10-08T16:34:19.195952Z"
     },
     "jupyter": {
      "outputs_hidden": true
     },
     "papermill": {
-     "duration": 0.268336,
-     "end_time": "2023-09-01T11:35:09.308546",
+     "duration": 0.541237,
+     "end_time": "2023-10-08T16:34:19.201314",
      "exception": false,
-     "start_time": "2023-09-01T11:35:09.040210",
+     "start_time": "2023-10-08T16:34:18.660077",
      "status": "completed"
     },
     "tags": []
@@ -61,16 +61,16 @@
    "id": "26f640e0",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:09.315577Z",
-     "iopub.status.busy": "2023-09-01T11:35:09.314983Z",
-     "iopub.status.idle": "2023-09-01T11:35:09.320056Z",
-     "shell.execute_reply": "2023-09-01T11:35:09.318932Z"
+     "iopub.execute_input": "2023-10-08T16:34:19.217643Z",
+     "iopub.status.busy": "2023-10-08T16:34:19.215509Z",
+     "iopub.status.idle": "2023-10-08T16:34:19.228093Z",
+     "shell.execute_reply": "2023-10-08T16:34:19.226561Z"
     },
     "papermill": {
-     "duration": 0.010186,
-     "end_time": "2023-09-01T11:35:09.321555",
+     "duration": 0.024557,
+     "end_time": "2023-10-08T16:34:19.232363",
      "exception": false,
-     "start_time": "2023-09-01T11:35:09.311369",
+     "start_time": "2023-10-08T16:34:19.207806",
      "status": "completed"
     },
     "tags": [
@@ -94,19 +94,19 @@
   {
    "cell_type": "code",
    "execution_count": 3,
-   "id": "12fd5cf6",
+   "id": "07d5060c",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:09.326762Z",
-     "iopub.status.busy": "2023-09-01T11:35:09.326298Z",
-     "iopub.status.idle": "2023-09-01T11:35:09.329659Z",
-     "shell.execute_reply": "2023-09-01T11:35:09.329117Z"
+     "iopub.execute_input": "2023-10-08T16:34:19.241206Z",
+     "iopub.status.busy": "2023-10-08T16:34:19.240704Z",
+     "iopub.status.idle": "2023-10-08T16:34:19.245612Z",
+     "shell.execute_reply": "2023-10-08T16:34:19.244645Z"
     },
     "papermill": {
-     "duration": 0.007292,
-     "end_time": "2023-09-01T11:35:09.330862",
+     "duration": 0.013855,
+     "end_time": "2023-10-08T16:34:19.250049",
      "exception": false,
-     "start_time": "2023-09-01T11:35:09.323570",
+     "start_time": "2023-10-08T16:34:19.236194",
      "status": "completed"
     },
     "tags": [
@@ -117,10 +117,10 @@
    "source": [
     "# Parameters\n",
     "INPUT_PATHS = {\n",
-    "    \"raw_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/3_aggregate_features/input/raw_features.csv\"\n",
+    "    \"raw_features\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/3_aggregate_features/input/raw_features.csv\"\n",
     "}\n",
     "OUTPUT_PATHS = {\n",
-    "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/3_aggregate_features/output/features.csv\"\n",
+    "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/3_aggregate_features/output/features.csv\"\n",
     "}\n"
    ]
   },
@@ -130,16 +130,16 @@
    "id": "c5d9d980",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:09.335772Z",
-     "iopub.status.busy": "2023-09-01T11:35:09.335118Z",
-     "iopub.status.idle": "2023-09-01T11:35:14.097619Z",
-     "shell.execute_reply": "2023-09-01T11:35:14.096620Z"
+     "iopub.execute_input": "2023-10-08T16:34:19.258150Z",
+     "iopub.status.busy": "2023-10-08T16:34:19.257719Z",
+     "iopub.status.idle": "2023-10-08T16:34:28.144700Z",
+     "shell.execute_reply": "2023-10-08T16:34:28.143756Z"
     },
     "papermill": {
-     "duration": 4.766846,
-     "end_time": "2023-09-01T11:35:14.099543",
+     "duration": 8.894271,
+     "end_time": "2023-10-08T16:34:28.147607",
      "exception": false,
-     "start_time": "2023-09-01T11:35:09.332697",
+     "start_time": "2023-10-08T16:34:19.253336",
      "status": "completed"
     },
     "tags": []
@@ -156,16 +156,16 @@
    "id": "99f75f47",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:14.106862Z",
-     "iopub.status.busy": "2023-09-01T11:35:14.106221Z",
-     "iopub.status.idle": "2023-09-01T11:35:18.117596Z",
-     "shell.execute_reply": "2023-09-01T11:35:18.116970Z"
+     "iopub.execute_input": "2023-10-08T16:34:28.162103Z",
+     "iopub.status.busy": "2023-10-08T16:34:28.161742Z",
+     "iopub.status.idle": "2023-10-08T16:34:33.823035Z",
+     "shell.execute_reply": "2023-10-08T16:34:33.821652Z"
     },
     "papermill": {
-     "duration": 4.018079,
-     "end_time": "2023-09-01T11:35:18.120249",
+     "duration": 5.67462,
+     "end_time": "2023-10-08T16:34:33.826579",
      "exception": false,
-     "start_time": "2023-09-01T11:35:14.102170",
+     "start_time": "2023-10-08T16:34:28.151959",
      "status": "completed"
     },
     "tags": []
@@ -247,10 +247,10 @@
        "      <td>-562.85785</td>\n",
        "      <td>-96.164795</td>\n",
        "      <td>-219.259016</td>\n",
-       "      <td>53.561839</td>\n",
+       "      <td>53.561838</td>\n",
        "      <td>-0.772320</td>\n",
        "      <td>0.029056</td>\n",
-       "      <td>259.63272</td>\n",
+       "      <td>259.63270</td>\n",
        "      <td>215.094182</td>\n",
        "      <td>...</td>\n",
        "      <td>-27.458416</td>\n",
@@ -258,8 +258,8 @@
        "      <td>0.484271</td>\n",
        "      <td>8.660648</td>\n",
        "      <td>-0.479016</td>\n",
-       "      <td>-28.989979</td>\n",
-       "      <td>27.533707</td>\n",
+       "      <td>-28.989983</td>\n",
+       "      <td>27.533710</td>\n",
        "      <td>0.952658</td>\n",
        "      <td>10.477735</td>\n",
        "      <td>-0.185771</td>\n",
@@ -283,7 +283,7 @@
        "      <td>8.185075</td>\n",
        "      <td>0.208425</td>\n",
        "      <td>-38.095375</td>\n",
-       "      <td>31.397882</td>\n",
+       "      <td>31.397880</td>\n",
        "      <td>-1.494916</td>\n",
        "      <td>10.917299</td>\n",
        "      <td>0.020985</td>\n",
@@ -306,8 +306,8 @@
        "      <td>-3.781627</td>\n",
        "      <td>9.191043</td>\n",
        "      <td>0.260886</td>\n",
-       "      <td>-22.667439</td>\n",
-       "      <td>50.992905</td>\n",
+       "      <td>-22.667440</td>\n",
+       "      <td>50.992897</td>\n",
        "      <td>1.600777</td>\n",
        "      <td>10.125545</td>\n",
        "      <td>0.595763</td>\n",
@@ -323,14 +323,14 @@
        "      <td>-0.366586</td>\n",
        "      <td>0.000000</td>\n",
        "      <td>194.26416</td>\n",
-       "      <td>148.226648</td>\n",
+       "      <td>148.226647</td>\n",
        "      <td>...</td>\n",
-       "      <td>-44.843815</td>\n",
+       "      <td>-44.843810</td>\n",
        "      <td>28.490644</td>\n",
        "      <td>-6.242015</td>\n",
        "      <td>10.546545</td>\n",
        "      <td>0.341848</td>\n",
-       "      <td>-25.040886</td>\n",
+       "      <td>-25.040888</td>\n",
        "      <td>46.878204</td>\n",
        "      <td>1.844494</td>\n",
        "      <td>11.160392</td>\n",
@@ -381,7 +381,7 @@
        "      <td>-24.712723</td>\n",
        "      <td>23.410387</td>\n",
        "      <td>-4.502398</td>\n",
-       "      <td>6.687983</td>\n",
+       "      <td>6.687984</td>\n",
        "      <td>0.238807</td>\n",
        "    </tr>\n",
        "    <tr>\n",
@@ -389,21 +389,21 @@
        "      <td>rock_96.mp3</td>\n",
        "      <td>rock</td>\n",
        "      <td>-541.23600</td>\n",
-       "      <td>27.163332</td>\n",
+       "      <td>27.163334</td>\n",
        "      <td>-119.113996</td>\n",
        "      <td>58.420684</td>\n",
        "      <td>-0.957699</td>\n",
-       "      <td>-7.415959</td>\n",
+       "      <td>-7.415961</td>\n",
        "      <td>210.49246</td>\n",
        "      <td>125.453699</td>\n",
        "      <td>...</td>\n",
        "      <td>-37.584858</td>\n",
-       "      <td>28.087940</td>\n",
+       "      <td>28.087936</td>\n",
        "      <td>-9.704238</td>\n",
        "      <td>8.447620</td>\n",
        "      <td>0.112760</td>\n",
        "      <td>-38.147890</td>\n",
-       "      <td>21.814400</td>\n",
+       "      <td>21.814402</td>\n",
        "      <td>-8.249507</td>\n",
        "      <td>7.807756</td>\n",
        "      <td>0.071968</td>\n",
@@ -427,7 +427,7 @@
        "      <td>7.727378</td>\n",
        "      <td>0.207489</td>\n",
        "      <td>-29.497524</td>\n",
-       "      <td>25.410656</td>\n",
+       "      <td>25.410654</td>\n",
        "      <td>-3.356614</td>\n",
        "      <td>8.170526</td>\n",
        "      <td>0.160330</td>\n",
@@ -442,16 +442,16 @@
        "      <td>52.444200</td>\n",
        "      <td>-1.705641</td>\n",
        "      <td>0.000000</td>\n",
-       "      <td>187.04272</td>\n",
+       "      <td>187.04274</td>\n",
        "      <td>96.440874</td>\n",
        "      <td>...</td>\n",
-       "      <td>-26.967852</td>\n",
-       "      <td>8.714736</td>\n",
+       "      <td>-26.967848</td>\n",
+       "      <td>8.714737</td>\n",
        "      <td>-9.511491</td>\n",
        "      <td>5.551820</td>\n",
        "      <td>-0.025604</td>\n",
-       "      <td>-23.020082</td>\n",
-       "      <td>13.948639</td>\n",
+       "      <td>-23.020084</td>\n",
+       "      <td>13.948638</td>\n",
        "      <td>-2.664985</td>\n",
        "      <td>5.051498</td>\n",
        "      <td>-0.258407</td>\n",
@@ -465,17 +465,17 @@
        "      <td>-49.380943</td>\n",
        "      <td>54.045627</td>\n",
        "      <td>-0.863093</td>\n",
-       "      <td>-32.930650</td>\n",
+       "      <td>-32.930653</td>\n",
        "      <td>191.73538</td>\n",
        "      <td>93.971242</td>\n",
        "      <td>...</td>\n",
        "      <td>-21.929403</td>\n",
        "      <td>17.050608</td>\n",
        "      <td>-5.296691</td>\n",
-       "      <td>5.894962</td>\n",
+       "      <td>5.894963</td>\n",
        "      <td>0.390705</td>\n",
        "      <td>-20.983192</td>\n",
-       "      <td>29.312021</td>\n",
+       "      <td>29.312023</td>\n",
        "      <td>-0.321836</td>\n",
        "      <td>6.571660</td>\n",
        "      <td>0.384794</td>\n",
@@ -494,36 +494,36 @@
        "4     classical_12.mp3  classical -562.67523 -148.133560 -270.975406   \n",
        "..                 ...        ...        ...         ...         ...   \n",
        "395        rock_95.mp3       rock -553.11010   -5.218835 -193.506047   \n",
-       "396        rock_96.mp3       rock -541.23600   27.163332 -119.113996   \n",
+       "396        rock_96.mp3       rock -541.23600   27.163334 -119.113996   \n",
        "397        rock_97.mp3       rock -518.49500   58.526745  -66.267744   \n",
        "398        rock_98.mp3       rock -518.64307   53.555115  -45.734517   \n",
        "399        rock_99.mp3       rock -544.70310   75.612130  -49.380943   \n",
        "\n",
        "         0_std    0_skew      1_min      1_max      1_mean  ...     38_min  \\\n",
        "0    51.142183 -0.468374   0.000000  178.75162  111.332342  ... -44.098070   \n",
-       "1    53.561839 -0.772320   0.029056  259.63272  215.094182  ... -27.458416   \n",
+       "1    53.561838 -0.772320   0.029056  259.63270  215.094182  ... -27.458416   \n",
        "2    83.381622 -2.587179   0.000000  190.47589  112.471713  ... -27.335688   \n",
        "3    76.246992 -2.402418   0.000000  159.42575   99.853645  ... -31.774948   \n",
-       "4    52.191182 -0.366586   0.000000  194.26416  148.226648  ... -44.843815   \n",
+       "4    52.191182 -0.366586   0.000000  194.26416  148.226647  ... -44.843810   \n",
        "..         ...       ...        ...        ...         ...  ...        ...   \n",
        "395  76.869437 -0.201055 -89.948746  201.18045  111.724191  ... -27.043941   \n",
-       "396  58.420684 -0.957699  -7.415959  210.49246  125.453699  ... -37.584858   \n",
+       "396  58.420684 -0.957699  -7.415961  210.49246  125.453699  ... -37.584858   \n",
        "397  65.635619 -0.898026 -58.824410  175.20135   99.288265  ... -29.620445   \n",
-       "398  52.444200 -1.705641   0.000000  187.04272   96.440874  ... -26.967852   \n",
-       "399  54.045627 -0.863093 -32.930650  191.73538   93.971242  ... -21.929403   \n",
+       "398  52.444200 -1.705641   0.000000  187.04274   96.440874  ... -26.967848   \n",
+       "399  54.045627 -0.863093 -32.930653  191.73538   93.971242  ... -21.929403   \n",
        "\n",
        "        38_max   38_mean     38_std   38_skew     39_min     39_max   39_mean  \\\n",
        "0    47.308060 -3.713503  16.553984  0.230691 -46.794480  49.352516 -2.282116   \n",
-       "1    29.811110  0.484271   8.660648 -0.479016 -28.989979  27.533707  0.952658   \n",
-       "2    27.610388 -0.333233   8.185075  0.208425 -38.095375  31.397882 -1.494916   \n",
-       "3    31.500881 -3.781627   9.191043  0.260886 -22.667439  50.992905  1.600777   \n",
-       "4    28.490644 -6.242015  10.546545  0.341848 -25.040886  46.878204  1.844494   \n",
+       "1    29.811110  0.484271   8.660648 -0.479016 -28.989983  27.533710  0.952658   \n",
+       "2    27.610388 -0.333233   8.185075  0.208425 -38.095375  31.397880 -1.494916   \n",
+       "3    31.500881 -3.781627   9.191043  0.260886 -22.667440  50.992897  1.600777   \n",
+       "4    28.490644 -6.242015  10.546545  0.341848 -25.040888  46.878204  1.844494   \n",
        "..         ...       ...        ...       ...        ...        ...       ...   \n",
        "395  22.451445 -7.234634   8.471853  0.753855 -24.712723  23.410387 -4.502398   \n",
-       "396  28.087940 -9.704238   8.447620  0.112760 -38.147890  21.814400 -8.249507   \n",
-       "397  26.325895 -5.722825   7.727378  0.207489 -29.497524  25.410656 -3.356614   \n",
-       "398   8.714736 -9.511491   5.551820 -0.025604 -23.020082  13.948639 -2.664985   \n",
-       "399  17.050608 -5.296691   5.894962  0.390705 -20.983192  29.312021 -0.321836   \n",
+       "396  28.087936 -9.704238   8.447620  0.112760 -38.147890  21.814402 -8.249507   \n",
+       "397  26.325895 -5.722825   7.727378  0.207489 -29.497524  25.410654 -3.356614   \n",
+       "398   8.714737 -9.511491   5.551820 -0.025604 -23.020084  13.948638 -2.664985   \n",
+       "399  17.050608 -5.296691   5.894963  0.390705 -20.983192  29.312023 -0.321836   \n",
        "\n",
        "        39_std   39_skew  \n",
        "0    15.285639  0.171462  \n",
@@ -532,7 +532,7 @@
        "3    10.125545  0.595763  \n",
        "4    11.160392  0.503120  \n",
        "..         ...       ...  \n",
-       "395   6.687983  0.238807  \n",
+       "395   6.687984  0.238807  \n",
        "396   7.807756  0.071968  \n",
        "397   8.170526  0.160330  \n",
        "398   5.051498 -0.258407  \n",
@@ -571,16 +571,16 @@
    "id": "4ac5c765",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:18.127758Z",
-     "iopub.status.busy": "2023-09-01T11:35:18.127051Z",
-     "iopub.status.idle": "2023-09-01T11:35:18.220446Z",
-     "shell.execute_reply": "2023-09-01T11:35:18.219871Z"
+     "iopub.execute_input": "2023-10-08T16:34:33.841753Z",
+     "iopub.status.busy": "2023-10-08T16:34:33.841067Z",
+     "iopub.status.idle": "2023-10-08T16:34:33.946723Z",
+     "shell.execute_reply": "2023-10-08T16:34:33.945660Z"
     },
     "papermill": {
-     "duration": 0.100061,
-     "end_time": "2023-09-01T11:35:18.222876",
+     "duration": 0.117637,
+     "end_time": "2023-10-08T16:34:33.949252",
      "exception": false,
-     "start_time": "2023-09-01T11:35:18.122815",
+     "start_time": "2023-10-08T16:34:33.831615",
      "status": "completed"
     },
     "tags": []
@@ -617,24 +617,24 @@
   },
   "papermill": {
    "default_parameters": {},
-   "duration": 10.352537,
-   "end_time": "2023-09-01T11:35:18.542818",
+   "duration": 18.022001,
+   "end_time": "2023-10-08T16:34:34.276071",
    "environment_variables": {},
    "exception": null,
-   "input_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/3_aggregate_features.ipynb",
-   "output_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/3_aggregate_features.ipynb",
+   "input_path": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/notebooks/3_aggregate_features.ipynb",
+   "output_path": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/notebooks/3_aggregate_features.ipynb",
    "parameters": {
     "INPUT_PATHS": {
-     "raw_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/3_aggregate_features/input/raw_features.csv"
+     "raw_features": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/3_aggregate_features/input/raw_features.csv"
     },
     "OUTPUT_PATHS": {
-     "aggregated_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/3_aggregate_features/output/features.csv"
+     "aggregated_features": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/3_aggregate_features/output/features.csv"
     }
    },
-   "start_time": "2023-09-01T11:35:08.190281",
+   "start_time": "2023-10-08T16:34:16.254070",
    "version": "2.4.0"
   }
  },
  "nbformat": 4,
  "nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/notebooks/4_split.ipynb b/notebooks/4_split.ipynb
index e4d2c5b8d040a4d02b422248156afd19de044258..65be4720be3d6404460e2bfc5984cc70a96493af 100644
--- a/notebooks/4_split.ipynb
+++ b/notebooks/4_split.ipynb
@@ -5,10 +5,10 @@
    "id": "e92b4fe9",
    "metadata": {
     "papermill": {
-     "duration": 0.004009,
-     "end_time": "2023-09-01T11:35:21.835314",
+     "duration": 0.063224,
+     "end_time": "2023-10-10T06:44:50.776214",
      "exception": false,
-     "start_time": "2023-09-01T11:35:21.831305",
+     "start_time": "2023-10-10T06:44:50.712990",
      "status": "completed"
     },
     "tags": []
@@ -19,20 +19,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "id": "5f1fae44",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:21.844307Z",
-     "iopub.status.busy": "2023-09-01T11:35:21.844022Z",
-     "iopub.status.idle": "2023-09-01T11:35:22.144905Z",
-     "shell.execute_reply": "2023-09-01T11:35:22.144381Z"
+     "iopub.execute_input": "2023-10-10T06:44:50.886489Z",
+     "iopub.status.busy": "2023-10-10T06:44:50.885646Z",
+     "iopub.status.idle": "2023-10-10T06:44:51.243403Z",
+     "shell.execute_reply": "2023-10-10T06:44:51.242308Z"
     },
     "papermill": {
-     "duration": 0.308442,
-     "end_time": "2023-09-01T11:35:22.147872",
+     "duration": 0.429588,
+     "end_time": "2023-10-10T06:44:51.263594",
      "exception": false,
-     "start_time": "2023-09-01T11:35:21.839430",
+     "start_time": "2023-10-10T06:44:50.834006",
      "status": "completed"
     },
     "tags": []
@@ -46,24 +46,21 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 2,
    "id": "01de1b27",
    "metadata": {
     "collapsed": false,
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:22.156002Z",
-     "iopub.status.busy": "2023-09-01T11:35:22.155641Z",
-     "iopub.status.idle": "2023-09-01T11:35:22.160059Z",
-     "shell.execute_reply": "2023-09-01T11:35:22.159355Z"
-    },
-    "jupyter": {
-     "outputs_hidden": false
+     "iopub.execute_input": "2023-10-10T06:44:51.398032Z",
+     "iopub.status.busy": "2023-10-10T06:44:51.397490Z",
+     "iopub.status.idle": "2023-10-10T06:44:51.409221Z",
+     "shell.execute_reply": "2023-10-10T06:44:51.407303Z"
     },
     "papermill": {
-     "duration": 0.010206,
-     "end_time": "2023-09-01T11:35:22.161506",
+     "duration": 0.102629,
+     "end_time": "2023-10-10T06:44:51.433068",
      "exception": false,
-     "start_time": "2023-09-01T11:35:22.151300",
+     "start_time": "2023-10-10T06:44:51.330439",
      "status": "completed"
     },
     "tags": [
@@ -85,20 +82,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
-   "id": "205bb941",
+   "execution_count": 3,
+   "id": "c22f1f87",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:21.808793Z",
-     "iopub.status.busy": "2023-09-01T11:35:21.808502Z",
-     "iopub.status.idle": "2023-09-01T11:35:21.824152Z",
-     "shell.execute_reply": "2023-09-01T11:35:21.822789Z"
+     "iopub.execute_input": "2023-10-10T06:44:51.547244Z",
+     "iopub.status.busy": "2023-10-10T06:44:51.546629Z",
+     "iopub.status.idle": "2023-10-10T06:44:51.552581Z",
+     "shell.execute_reply": "2023-10-10T06:44:51.551320Z"
     },
     "papermill": {
-     "duration": 0.023269,
-     "end_time": "2023-09-01T11:35:21.827306",
+     "duration": 0.083628,
+     "end_time": "2023-10-10T06:44:51.576083",
      "exception": false,
-     "start_time": "2023-09-01T11:35:21.804037",
+     "start_time": "2023-10-10T06:44:51.492455",
      "status": "completed"
     },
     "tags": [
@@ -109,29 +106,29 @@
    "source": [
     "# Parameters\n",
     "INPUT_PATHS = {\n",
-    "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/input/features.csv\"\n",
+    "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/input/features.csv\"\n",
     "}\n",
     "OUTPUT_PATHS = {\n",
-    "    \"split\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/output/split.csv\"\n",
+    "    \"split\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/output/split.csv\"\n",
     "}\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 4,
    "id": "a4cc6800",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:22.190493Z",
-     "iopub.status.busy": "2023-09-01T11:35:22.190038Z",
-     "iopub.status.idle": "2023-09-01T11:35:22.217115Z",
-     "shell.execute_reply": "2023-09-01T11:35:22.216124Z"
+     "iopub.execute_input": "2023-10-10T06:44:51.698080Z",
+     "iopub.status.busy": "2023-10-10T06:44:51.697602Z",
+     "iopub.status.idle": "2023-10-10T06:44:51.739606Z",
+     "shell.execute_reply": "2023-10-10T06:44:51.738608Z"
     },
     "papermill": {
-     "duration": 0.03203,
-     "end_time": "2023-09-01T11:35:22.218934",
+     "duration": 0.123641,
+     "end_time": "2023-10-10T06:44:51.751878",
      "exception": false,
-     "start_time": "2023-09-01T11:35:22.186904",
+     "start_time": "2023-10-10T06:44:51.628237",
      "status": "completed"
     },
     "tags": []
@@ -143,25 +140,25 @@
     "for path in INPUT_PATHS.values():\n",
     "    assert Path(path).exists()\n",
     "\n",
-    "features = pd.read_csv(INPUT_PATHS[\"features\"])"
+    "features = pd.read_csv(INPUT_PATHS[\"aggregated_features\"])"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 5,
    "id": "a186d0c4",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:22.225158Z",
-     "iopub.status.busy": "2023-09-01T11:35:22.224866Z",
-     "iopub.status.idle": "2023-09-01T11:35:22.233993Z",
-     "shell.execute_reply": "2023-09-01T11:35:22.232970Z"
+     "iopub.execute_input": "2023-10-10T06:44:51.859142Z",
+     "iopub.status.busy": "2023-10-10T06:44:51.858230Z",
+     "iopub.status.idle": "2023-10-10T06:44:51.872631Z",
+     "shell.execute_reply": "2023-10-10T06:44:51.871083Z"
     },
     "papermill": {
-     "duration": 0.014722,
-     "end_time": "2023-09-01T11:35:22.236276",
+     "duration": 0.089311,
+     "end_time": "2023-10-10T06:44:51.889097",
      "exception": false,
-     "start_time": "2023-09-01T11:35:22.221554",
+     "start_time": "2023-10-10T06:44:51.799786",
      "status": "completed"
     },
     "tags": []
@@ -187,20 +184,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 6,
    "id": "091e0641",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:22.248578Z",
-     "iopub.status.busy": "2023-09-01T11:35:22.248298Z",
-     "iopub.status.idle": "2023-09-01T11:35:22.260910Z",
-     "shell.execute_reply": "2023-09-01T11:35:22.260154Z"
+     "iopub.execute_input": "2023-10-10T06:44:52.001080Z",
+     "iopub.status.busy": "2023-10-10T06:44:52.000172Z",
+     "iopub.status.idle": "2023-10-10T06:44:52.020332Z",
+     "shell.execute_reply": "2023-10-10T06:44:52.019247Z"
     },
     "papermill": {
-     "duration": 0.022698,
-     "end_time": "2023-09-01T11:35:22.264468",
+     "duration": 0.098232,
+     "end_time": "2023-10-10T06:44:52.038434",
      "exception": false,
-     "start_time": "2023-09-01T11:35:22.241770",
+     "start_time": "2023-10-10T06:44:51.940202",
      "status": "completed"
     },
     "tags": []
@@ -270,12 +267,12 @@
        "    <tr>\n",
        "      <th>396</th>\n",
        "      <td>rock_96.mp3</td>\n",
-       "      <td>False</td>\n",
+       "      <td>True</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>397</th>\n",
        "      <td>rock_97.mp3</td>\n",
-       "      <td>True</td>\n",
+       "      <td>False</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>398</th>\n",
@@ -285,7 +282,7 @@
        "    <tr>\n",
        "      <th>399</th>\n",
        "      <td>rock_99.mp3</td>\n",
-       "      <td>True</td>\n",
+       "      <td>False</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
@@ -301,15 +298,15 @@
        "4     classical_12.mp3   True\n",
        "..                 ...    ...\n",
        "395        rock_95.mp3   True\n",
-       "396        rock_96.mp3  False\n",
-       "397        rock_97.mp3   True\n",
+       "396        rock_96.mp3   True\n",
+       "397        rock_97.mp3  False\n",
        "398        rock_98.mp3   True\n",
-       "399        rock_99.mp3   True\n",
+       "399        rock_99.mp3  False\n",
        "\n",
        "[400 rows x 2 columns]"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -320,20 +317,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 7,
    "id": "7b11b8bb",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-09-01T11:35:22.274622Z",
-     "iopub.status.busy": "2023-09-01T11:35:22.274234Z",
-     "iopub.status.idle": "2023-09-01T11:35:22.281519Z",
-     "shell.execute_reply": "2023-09-01T11:35:22.280717Z"
+     "iopub.execute_input": "2023-10-10T06:44:52.154737Z",
+     "iopub.status.busy": "2023-10-10T06:44:52.154026Z",
+     "iopub.status.idle": "2023-10-10T06:44:52.164455Z",
+     "shell.execute_reply": "2023-10-10T06:44:52.163224Z"
     },
     "papermill": {
-     "duration": 0.01433,
-     "end_time": "2023-09-01T11:35:22.283192",
+     "duration": 0.075575,
+     "end_time": "2023-10-10T06:44:52.179183",
      "exception": false,
-     "start_time": "2023-09-01T11:35:22.268862",
+     "start_time": "2023-10-10T06:44:52.103608",
      "status": "completed"
     },
     "tags": []
@@ -370,24 +367,24 @@
   },
   "papermill": {
    "default_parameters": {},
-   "duration": 1.989508,
-   "end_time": "2023-09-01T11:35:22.603293",
+   "duration": 3.419231,
+   "end_time": "2023-10-10T06:44:52.564357",
    "environment_variables": {},
    "exception": null,
-   "input_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/4_split.ipynb",
-   "output_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/4_split.ipynb",
+   "input_path": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/notebooks/4_split.ipynb",
+   "output_path": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/notebooks/4_split.ipynb",
    "parameters": {
     "INPUT_PATHS": {
-     "aggregated_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/input/features.csv"
+     "aggregated_features": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/input/features.csv"
     },
     "OUTPUT_PATHS": {
-     "split": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/output/split.csv"
+     "split": "/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/output/split.csv"
     }
    },
-   "start_time": "2023-09-01T11:35:20.613785",
+   "start_time": "2023-10-10T06:44:49.145126",
    "version": "2.4.0"
   }
  },
  "nbformat": 4,
  "nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/notebooks/main.ipynb b/notebooks/main.ipynb
index 4423d8fd3fa3102931720057d4efc77f74652ae0..a33fb8264fac0ef9da7dd9d1bb0065218e25a21d 100644
--- a/notebooks/main.ipynb
+++ b/notebooks/main.ipynb
@@ -14,15 +14,24 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": 19,
    "metadata": {
     "collapsed": true,
     "ExecuteTime": {
-     "end_time": "2023-09-01T11:23:33.535665313Z",
-     "start_time": "2023-09-01T11:23:33.530568931Z"
+     "end_time": "2023-10-10T06:39:16.744169438Z",
+     "start_time": "2023-10-10T06:39:15.778267163Z"
     }
    },
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "The autoreload extension is already loaded. To reload it, use:\n",
+      "  %reload_ext autoreload\n"
+     ]
+    }
+   ],
    "source": [
     "%load_ext autoreload\n",
     "%autoreload 2"
@@ -30,18 +39,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "metadata": {
     "collapsed": false,
     "ExecuteTime": {
-     "end_time": "2023-09-01T11:23:34.729822Z",
-     "start_time": "2023-09-01T11:23:33.531052936Z"
+     "end_time": "2023-10-10T06:44:40.271224151Z",
+     "start_time": "2023-10-10T06:44:37.215835196Z"
     }
    },
    "outputs": [],
    "source": [
     "import yaml\n",
     "\n",
+    "import logging\n",
+    "\n",
     "from definitions import CONFIG_PATH, BASE_PATH, RESOURCE_PATH\n",
     "from fairnb.entity.dbrepo_entity import DbRepoEntity\n",
     "from fairnb.entity.invenio_entity import InvenioEntity\n",
@@ -52,17 +63,32 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 2,
    "metadata": {
     "collapsed": false,
     "lines_to_next_cell": 2,
     "ExecuteTime": {
-     "end_time": "2023-09-01T11:23:34.865162022Z",
-     "start_time": "2023-09-01T11:23:34.735219145Z"
+     "end_time": "2023-10-10T06:44:40.633271315Z",
+     "start_time": "2023-10-10T06:44:40.276976283Z"
     }
    },
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "DEBUG:urllib3.util.retry:Converted retries value: 1 -> Retry(total=1, connect=None, read=None, redirect=None, status=None)\n",
+      "DEBUG:urllib3.util.retry:Converted retries value: 1 -> Retry(total=1, connect=None, read=None, redirect=None, status=None)\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"POST /api/auth/realms/dbrepo/protocol/openid-connect/token HTTP/1.1\" 200 4289\n"
+     ]
+    }
+   ],
    "source": [
+    "logging.basicConfig(\n",
+    "    level=logging.DEBUG\n",
+    ")\n",
+    "\n",
     "# experiment executor setup\n",
     "executor = Executor()\n",
     "util = Util.get_instance()              # util caches loaded credentials -> via Singleton\n",
@@ -80,8 +106,8 @@
    "metadata": {
     "collapsed": false,
     "ExecuteTime": {
-     "end_time": "2023-09-01T11:23:34.884649912Z",
-     "start_time": "2023-09-01T11:23:34.868201423Z"
+     "end_time": "2023-10-08T18:41:21.244795111Z",
+     "start_time": "2023-10-08T18:41:21.212056124Z"
     }
    },
    "outputs": [],
@@ -195,12 +221,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 24,
    "metadata": {
     "collapsed": false,
     "ExecuteTime": {
-     "end_time": "2023-09-01T11:35:20.553848667Z",
-     "start_time": "2023-09-01T11:35:07.385204844Z"
+     "end_time": "2023-10-08T16:34:34.861181245Z",
+     "start_time": "2023-10-08T16:34:12.246060215Z"
     }
    },
    "outputs": [
@@ -210,11 +236,29 @@
       "application/vnd.jupyter.widget-view+json": {
        "version_major": 2,
        "version_minor": 0,
-       "model_id": "33d92d07cc024b7d85cdcd4a27e7e5d4"
+       "model_id": "f24cd53114664594bbc0ff11b086ca0f"
       }
      },
      "metadata": {},
      "output_type": "display_data"
+    },
+    {
+     "ename": "Exception",
+     "evalue": "Table creation failed for table aggregated_features",
+     "output_type": "error",
+     "traceback": [
+      "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
+      "\u001B[0;31mException\u001B[0m                                 Traceback (most recent call last)",
+      "Cell \u001B[0;32mIn[24], line 31\u001B[0m\n\u001B[1;32m      3\u001B[0m     raw_features_entity \u001B[38;5;241m=\u001B[39m DbRepoEntity\u001B[38;5;241m.\u001B[39mnew(\n\u001B[1;32m      4\u001B[0m         location\u001B[38;5;241m=\u001B[39mLOCAL_PATH \u001B[38;5;241m/\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m2_generate_features\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;241m/\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124moutput\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;241m/\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mraw_features.csv\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m      5\u001B[0m         dbrepo_connector\u001B[38;5;241m=\u001B[39mconnector,\n\u001B[0;32m   (...)\u001B[0m\n\u001B[1;32m     10\u001B[0m         \u001B[38;5;28mtype\u001B[39m\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mraw_features\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m     11\u001B[0m     )\n\u001B[1;32m     13\u001B[0m nb_config_aggregate_features \u001B[38;5;241m=\u001B[39m NbConfig(\n\u001B[1;32m     14\u001B[0m     nb_location\u001B[38;5;241m=\u001B[39mNOTEBOOK_PATH \u001B[38;5;241m/\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m3_aggregate_features.ipynb\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m     15\u001B[0m     entities\u001B[38;5;241m=\u001B[39m[\n\u001B[0;32m   (...)\u001B[0m\n\u001B[1;32m     28\u001B[0m     ]\n\u001B[1;32m     29\u001B[0m )\n\u001B[0;32m---> 31\u001B[0m \u001B[43mexecutor\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mexecute\u001B[49m\u001B[43m(\u001B[49m\u001B[43mnb_config_aggregate_features\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43monly_local\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m)\u001B[49m\n",
+      "File \u001B[0;32m~/Programming/uni/bachelorarbeit/fairnb/fairnb/executor.py:31\u001B[0m, in \u001B[0;36mExecutor.execute\u001B[0;34m(cls, nb_config, require_download, only_local, **kwargs)\u001B[0m\n\u001B[1;32m     28\u001B[0m \u001B[38;5;28mcls\u001B[39m\u001B[38;5;241m.\u001B[39mexecute_notebook(nb_config)\n\u001B[1;32m     30\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m only_local:\n\u001B[0;32m---> 31\u001B[0m     \u001B[38;5;28;43mcls\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mupload_entities\u001B[49m\u001B[43m(\u001B[49m\u001B[43mnb_config\u001B[49m\u001B[43m)\u001B[49m\n",
+      "File \u001B[0;32m~/Programming/uni/bachelorarbeit/fairnb/fairnb/executor.py:52\u001B[0m, in \u001B[0;36mExecutor.upload_entities\u001B[0;34m(nb_config)\u001B[0m\n\u001B[1;32m     47\u001B[0m \u001B[38;5;129m@staticmethod\u001B[39m\n\u001B[1;32m     48\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mupload_entities\u001B[39m(nb_config: NbConfig):\n\u001B[1;32m     49\u001B[0m     \u001B[38;5;66;03m# load generated entity and upload it\u001B[39;00m\n\u001B[1;32m     50\u001B[0m     \u001B[38;5;28;01mfor\u001B[39;00m entity \u001B[38;5;129;01min\u001B[39;00m nb_config\u001B[38;5;241m.\u001B[39mentities:\n\u001B[1;32m     51\u001B[0m         \u001B[38;5;66;03m# use inspect to get path of caller\u001B[39;00m\n\u001B[0;32m---> 52\u001B[0m         \u001B[43mentity\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mupload\u001B[49m\u001B[43m(\u001B[49m\u001B[43mnb_config\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mnb_location\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mnb_config\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdependencies\u001B[49m\u001B[43m)\u001B[49m\n",
+      "File \u001B[0;32m~/Programming/uni/bachelorarbeit/fairnb/fairnb/entity/dbrepo_entity.py:65\u001B[0m, in \u001B[0;36mDbRepoEntity.upload\u001B[0;34m(self, executed_file, dependencies)\u001B[0m\n\u001B[1;32m     60\u001B[0m df[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mentity_id\u001B[39m\u001B[38;5;124m\"\u001B[39m] \u001B[38;5;241m=\u001B[39m \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m1\u001B[39m  \u001B[38;5;66;03m# temporary, needed for easy table schema retrieval\u001B[39;00m\n\u001B[1;32m     62\u001B[0m \u001B[38;5;66;03m# create table if not exists\u001B[39;00m\n\u001B[1;32m     63\u001B[0m \u001B[38;5;66;03m# update uri etc\u001B[39;00m\n\u001B[1;32m     64\u001B[0m \u001B[38;5;66;03m# create table if it not already exists\u001B[39;00m\n\u001B[0;32m---> 65\u001B[0m table \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdbrepo_connector\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mcreate_table_if_not_exists\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m     66\u001B[0m \u001B[43m    \u001B[49m\u001B[43mdf\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mtable_name\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mtable_description\u001B[49m\n\u001B[1;32m     67\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m     68\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtable_id \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mint\u001B[39m(table[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mid\u001B[39m\u001B[38;5;124m\"\u001B[39m])\n\u001B[1;32m     70\u001B[0m metadata \u001B[38;5;241m=\u001B[39m EntityProvenance\u001B[38;5;241m.\u001B[39mnew(\n\u001B[1;32m     71\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mname,\n\u001B[1;32m     72\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mdescription,\n\u001B[0;32m   (...)\u001B[0m\n\u001B[1;32m     77\u001B[0m     platform\u001B[38;5;241m=\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mdbrepo\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m     78\u001B[0m )\n",
+      "File \u001B[0;32m~/Programming/uni/bachelorarbeit/fairnb/fairnb/api/dbrepo.py:35\u001B[0m, in \u001B[0;36mre_auth.<locals>.inner\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m     33\u001B[0m     LOG\u001B[38;5;241m.\u001B[39mwarning(\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mRe-login due to expired token\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[1;32m     34\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mauthenticate_keycloak()\n\u001B[0;32m---> 35\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n",
+      "File \u001B[0;32m~/Programming/uni/bachelorarbeit/fairnb/fairnb/api/dbrepo.py:242\u001B[0m, in \u001B[0;36mDBRepoConnector.create_table_if_not_exists\u001B[0;34m(self, dataframe, table_name, table_descriptor)\u001B[0m\n\u001B[1;32m    235\u001B[0m \u001B[38;5;129m@re_auth\u001B[39m\n\u001B[1;32m    236\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mcreate_table_if_not_exists\u001B[39m(\u001B[38;5;28mself\u001B[39m,\n\u001B[1;32m    237\u001B[0m                                dataframe: pd\u001B[38;5;241m.\u001B[39mDataFrame,\n\u001B[1;32m    238\u001B[0m                                table_name: \u001B[38;5;28mstr\u001B[39m,\n\u001B[1;32m    239\u001B[0m                                table_descriptor: \u001B[38;5;28mstr\u001B[39m\n\u001B[1;32m    240\u001B[0m                                ):\n\u001B[1;32m    241\u001B[0m     table \u001B[38;5;241m=\u001B[39m table \u001B[38;5;28;01mif\u001B[39;00m (table \u001B[38;5;241m:=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mget_table(table_name)) \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;28;01melse\u001B[39;00m \\\n\u001B[0;32m--> 242\u001B[0m         \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mcreate_table\u001B[49m\u001B[43m(\u001B[49m\u001B[43mdataframe\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtable_name\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtable_descriptor\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m    244\u001B[0m     \u001B[38;5;28;01mreturn\u001B[39;00m table\n",
+      "File \u001B[0;32m~/Programming/uni/bachelorarbeit/fairnb/fairnb/api/dbrepo.py:35\u001B[0m, in \u001B[0;36mre_auth.<locals>.inner\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m     33\u001B[0m     LOG\u001B[38;5;241m.\u001B[39mwarning(\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mRe-login due to expired token\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[1;32m     34\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mauthenticate_keycloak()\n\u001B[0;32m---> 35\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n",
+      "File \u001B[0;32m~/Programming/uni/bachelorarbeit/fairnb/fairnb/api/dbrepo.py:231\u001B[0m, in \u001B[0;36mDBRepoConnector.create_table\u001B[0;34m(self, dataframe, table_name, table_descriptor)\u001B[0m\n\u001B[1;32m    228\u001B[0m table \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mget_table(table_name)\n\u001B[1;32m    230\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m table:\n\u001B[0;32m--> 231\u001B[0m     \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mException\u001B[39;00m(\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mTable creation failed for table \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mtable_name\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m\"\u001B[39m)\n\u001B[1;32m    233\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m table\n",
+      "\u001B[0;31mException\u001B[0m: Table creation failed for table aggregated_features"
+     ]
     }
    ],
    "source": [
@@ -253,26 +297,226 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 3,
    "metadata": {
     "collapsed": false,
     "ExecuteTime": {
-     "end_time": "2023-09-01T11:35:24.012990794Z",
-     "start_time": "2023-09-01T11:35:20.562862853Z"
+     "end_time": "2023-10-10T06:47:15.707557690Z",
+     "start_time": "2023-10-10T06:44:48.435988977Z"
     }
    },
    "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Input Notebook:  /home/lukas/Programming/uni/bachelorarbeit/fairnb/notebooks/4_split.ipynb\n",
+      "INFO:papermill:Output Notebook: /home/lukas/Programming/uni/bachelorarbeit/fairnb/notebooks/4_split.ipynb\n",
+      "DEBUG:blib2to3.pgen2.driver:NAME 'INPUT_PATHS' (prefix='# Parameters\\n')\n",
+      "DEBUG:blib2to3.pgen2.driver:EQUAL '=' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:LBRACE '{' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"aggregated_features\"' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:COLON ':' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/input/features.csv\"' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:RBRACE '}' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:NEWLINE '\\n' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:NAME 'OUTPUT_PATHS' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:EQUAL '=' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:LBRACE '{' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"split\"' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:COLON ':' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/output/split.csv\"' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:RBRACE '}' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:NEWLINE '\\n' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:ENDMARKER '' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:Stop.\n",
+      "DEBUG:blib2to3.pgen2.driver:NAME 'INPUT_PATHS' (prefix='# Parameters\\n')\n",
+      "DEBUG:blib2to3.pgen2.driver:EQUAL '=' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:LBRACE '{' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"aggregated_features\"' (prefix='\\n    ')\n",
+      "DEBUG:blib2to3.pgen2.driver:COLON ':' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/input/features.csv\"' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:RBRACE '}' (prefix='\\n')\n",
+      "DEBUG:blib2to3.pgen2.driver:NEWLINE '\\n' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:NAME 'OUTPUT_PATHS' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:EQUAL '=' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:LBRACE '{' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"split\"' (prefix='\\n    ')\n",
+      "DEBUG:blib2to3.pgen2.driver:COLON ':' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:STRING '\"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/output/split.csv\"' (prefix=' ')\n",
+      "DEBUG:blib2to3.pgen2.driver:RBRACE '}' (prefix='\\n')\n",
+      "DEBUG:blib2to3.pgen2.driver:NEWLINE '\\n' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:ENDMARKER '' (prefix='')\n",
+      "DEBUG:blib2to3.pgen2.driver:Stop.\n"
+     ]
+    },
     {
      "data": {
-      "text/plain": "Executing:   0%|          | 0/10 [00:00<?, ?cell/s]",
+      "text/plain": "Executing:   0%|          | 0/8 [00:00<?, ?cell/s]",
       "application/vnd.jupyter.widget-view+json": {
        "version_major": 2,
        "version_minor": 0,
-       "model_id": "5656b2363a5b4d96b583125f5ebbc234"
+       "model_id": "49e65ec8c902437cbc7a6c0d006902f5"
       }
      },
      "metadata": {},
      "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "DEBUG:asyncio:Using selector: EpollSelector\n",
+      "DEBUG:asyncio:Using selector: EpollSelector\n",
+      "INFO:papermill:Executing notebook with kernel: python3\n",
+      "DEBUG:papermill:Skipping non-executing cell 0\n",
+      "DEBUG:papermill:Executing cell:\n",
+      "import pandas as pd\n",
+      "from pathlib import Path\n",
+      "from definitions import BASE_PATH\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'busy'}\n",
+      "DEBUG:papermill:msg_type: execute_input\n",
+      "DEBUG:papermill:content: {'code': 'import pandas as pd\\nfrom pathlib import Path\\nfrom definitions import BASE_PATH', 'execution_count': 1}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'idle'}\n",
+      "DEBUG:papermill:Executing cell:\n",
+      "# Tagged with 'parameters'\n",
+      "from definitions import BASE_PATH\n",
+      "\n",
+      "INPUT_PATHS: dict[str, str] = {\n",
+      "    \"features\": (BASE_PATH / \"tmp\" / \"4_split\" / \"input\" / \"features.csv\").__str__()\n",
+      "}\n",
+      "OUTPUT_PATHS: dict[str, str] = {\n",
+      "    \"split\": (BASE_PATH / \"tmp\" / \"4_split\" / \"output\" / \"split.csv\").__str__()\n",
+      "}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'busy'}\n",
+      "DEBUG:papermill:msg_type: execute_input\n",
+      "DEBUG:papermill:content: {'code': '# Tagged with \\'parameters\\'\\nfrom definitions import BASE_PATH\\n\\nINPUT_PATHS: dict[str, str] = {\\n    \"features\": (BASE_PATH / \"tmp\" / \"4_split\" / \"input\" / \"features.csv\").__str__()\\n}\\nOUTPUT_PATHS: dict[str, str] = {\\n    \"split\": (BASE_PATH / \"tmp\" / \"4_split\" / \"output\" / \"split.csv\").__str__()\\n}', 'execution_count': 2}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'idle'}\n",
+      "DEBUG:papermill:Executing cell:\n",
+      "# Parameters\n",
+      "INPUT_PATHS = {\n",
+      "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/input/features.csv\"\n",
+      "}\n",
+      "OUTPUT_PATHS = {\n",
+      "    \"split\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/output/split.csv\"\n",
+      "}\n",
+      "\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'busy'}\n",
+      "DEBUG:papermill:msg_type: execute_input\n",
+      "DEBUG:papermill:content: {'code': '# Parameters\\nINPUT_PATHS = {\\n    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/input/features.csv\"\\n}\\nOUTPUT_PATHS = {\\n    \"split\": \"/home/lukas/Programming/uni/bachelorarbeit/fairnb/tmp/4_split/output/split.csv\"\\n}\\n', 'execution_count': 3}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'idle'}\n",
+      "DEBUG:papermill:Executing cell:\n",
+      "# INPUT\n",
+      "\n",
+      "for path in INPUT_PATHS.values():\n",
+      "    assert Path(path).exists()\n",
+      "\n",
+      "features = pd.read_csv(INPUT_PATHS[\"aggregated_features\"])\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'busy'}\n",
+      "DEBUG:papermill:msg_type: execute_input\n",
+      "DEBUG:papermill:content: {'code': '# INPUT\\n\\nfor path in INPUT_PATHS.values():\\n    assert Path(path).exists()\\n\\nfeatures = pd.read_csv(INPUT_PATHS[\"aggregated_features\"])', 'execution_count': 4}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'idle'}\n",
+      "DEBUG:papermill:Executing cell:\n",
+      "train = features.sample(frac=0.8).sort_index()\n",
+      "test = features.drop(train.index)\n",
+      "\n",
+      "split_true = pd.DataFrame({\n",
+      "    \"filename\": train.filename,\n",
+      "    \"train\": True\n",
+      "})\n",
+      "split_false = pd.DataFrame({\n",
+      "    \"filename\": test.filename,\n",
+      "    \"train\": False\n",
+      "})\n",
+      "\n",
+      "split_concat = pd.concat([split_true, split_false])\\\n",
+      "    .sort_values(\"filename\")\\\n",
+      "    .reset_index(drop=True)\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'busy'}\n",
+      "DEBUG:papermill:msg_type: execute_input\n",
+      "DEBUG:papermill:content: {'code': 'train = features.sample(frac=0.8).sort_index()\\ntest = features.drop(train.index)\\n\\nsplit_true = pd.DataFrame({\\n    \"filename\": train.filename,\\n    \"train\": True\\n})\\nsplit_false = pd.DataFrame({\\n    \"filename\": test.filename,\\n    \"train\": False\\n})\\n\\nsplit_concat = pd.concat([split_true, split_false])\\\\\\n    .sort_values(\"filename\")\\\\\\n    .reset_index(drop=True)', 'execution_count': 5}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'idle'}\n",
+      "DEBUG:papermill:Executing cell:\n",
+      "split_concat\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'busy'}\n",
+      "DEBUG:papermill:msg_type: execute_input\n",
+      "DEBUG:papermill:content: {'code': 'split_concat', 'execution_count': 6}\n",
+      "DEBUG:papermill:msg_type: execute_result\n",
+      "DEBUG:papermill:content: {'data': {'text/plain': '              filename  train\\n0      classical_1.mp3   True\\n1     classical_10.mp3   True\\n2    classical_100.mp3   True\\n3     classical_11.mp3   True\\n4     classical_12.mp3   True\\n..                 ...    ...\\n395        rock_95.mp3   True\\n396        rock_96.mp3   True\\n397        rock_97.mp3  False\\n398        rock_98.mp3   True\\n399        rock_99.mp3  False\\n\\n[400 rows x 2 columns]', 'text/html': '<div>\\n<style scoped>\\n    .dataframe tbody tr th:only-of-type {\\n        vertical-align: middle;\\n    }\\n\\n    .dataframe tbody tr th {\\n        vertical-align: top;\\n    }\\n\\n    .dataframe thead th {\\n        text-align: right;\\n    }\\n</style>\\n<table border=\"1\" class=\"dataframe\">\\n  <thead>\\n    <tr style=\"text-align: right;\">\\n      <th></th>\\n      <th>filename</th>\\n      <th>train</th>\\n    </tr>\\n  </thead>\\n  <tbody>\\n    <tr>\\n      <th>0</th>\\n      <td>classical_1.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>1</th>\\n      <td>classical_10.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>2</th>\\n      <td>classical_100.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>3</th>\\n      <td>classical_11.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>4</th>\\n      <td>classical_12.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>...</th>\\n      <td>...</td>\\n      <td>...</td>\\n    </tr>\\n    <tr>\\n      <th>395</th>\\n      <td>rock_95.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>396</th>\\n      <td>rock_96.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>397</th>\\n      <td>rock_97.mp3</td>\\n      <td>False</td>\\n    </tr>\\n    <tr>\\n      <th>398</th>\\n      <td>rock_98.mp3</td>\\n      <td>True</td>\\n    </tr>\\n    <tr>\\n      <th>399</th>\\n      <td>rock_99.mp3</td>\\n      <td>False</td>\\n    </tr>\\n  </tbody>\\n</table>\\n<p>400 rows × 2 columns</p>\\n</div>'}, 'metadata': {}, 'execution_count': 6}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'idle'}\n",
+      "DEBUG:papermill:Executing cell:\n",
+      "# output\n",
+      "OUTPUT_PATH = Path(OUTPUT_PATHS[\"split\"])\n",
+      "OUTPUT_PATH.parent.mkdir(parents=True, exist_ok=True)\n",
+      "\n",
+      "output = split_concat\n",
+      "output.to_csv(OUTPUT_PATH, index=False)\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'busy'}\n",
+      "DEBUG:papermill:msg_type: execute_input\n",
+      "DEBUG:papermill:content: {'code': '# output\\nOUTPUT_PATH = Path(OUTPUT_PATHS[\"split\"])\\nOUTPUT_PATH.parent.mkdir(parents=True, exist_ok=True)\\n\\noutput = split_concat\\noutput.to_csv(OUTPUT_PATH, index=False)', 'execution_count': 7}\n",
+      "DEBUG:papermill:msg_type: status\n",
+      "DEBUG:papermill:content: {'execution_state': 'idle'}\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"GET /api/database/3 HTTP/1.1\" 200 None\n",
+      "DEBUG:fairnb.api.dbrepo:<Response [200]>\n",
+      "DEBUG:git.cmd:Popen(['git', 'cat-file', '--batch-check'], cwd=/home/lukas/Programming/uni/bachelorarbeit/fairnb, universal_newlines=False, shell=None, istream=<valid stream>)\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"GET /api/database/3 HTTP/1.1\" 200 None\n",
+      "DEBUG:fairnb.api.dbrepo:<Response [200]>\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"GET /api/database/3 HTTP/1.1\" 200 None\n",
+      "DEBUG:fairnb.api.dbrepo:<Response [200]>\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"POST /api/upload/files/ HTTP/1.1\" 201 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/38d250ca9d0ed66dc8d8439be6051010 HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"POST /api/database/3/table/10/data/import HTTP/1.1\" 202 0\n",
+      "DEBUG:fairnb.api.dbrepo:<Response [202]>\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"GET /api/database/3/table/10/export HTTP/1.1\" 200 None\n",
+      "DEBUG:fairnb.api.dbrepo:<Response [200]>\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"POST /api/upload/files/ HTTP/1.1\" 201 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/00994936fc7b5796e64d7ba92024eb7b HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/00994936fc7b5796e64d7ba92024eb7b HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/00994936fc7b5796e64d7ba92024eb7b HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/00994936fc7b5796e64d7ba92024eb7b HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/00994936fc7b5796e64d7ba92024eb7b HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/00994936fc7b5796e64d7ba92024eb7b HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/00994936fc7b5796e64d7ba92024eb7b HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"POST /api/database/3/table/9/data/import HTTP/1.1\" 202 0\n",
+      "DEBUG:fairnb.api.dbrepo:<Response [202]>\n",
+      "WARNING:fairnb.entity.entity:Dependency has no id, skipping dependency upload\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"POST /api/upload/files/ HTTP/1.1\" 201 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"PATCH /api/upload/files/de7b11fb11fd15feea509d9686152ff8 HTTP/1.1\" 204 0\n",
+      "DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): dbrepo2.ec.tuwien.ac.at:443\n",
+      "DEBUG:urllib3.connectionpool:https://dbrepo2.ec.tuwien.ac.at:443 \"POST /api/database/3/table/11/data/import HTTP/1.1\" 202 0\n",
+      "DEBUG:fairnb.api.dbrepo:<Response [202]>\n"
+     ]
     }
    ],
    "source": [
diff --git a/notebooks/standalone.ipynb b/notebooks/standalone.ipynb
index 8052009cb2607b44e77034d4eea255218768766f..1d152ffc115a8ed93d5c92d579b3f86ca39d8ed2 100644
--- a/notebooks/standalone.ipynb
+++ b/notebooks/standalone.ipynb
@@ -13,7 +13,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": null,
    "outputs": [],
    "source": [
     "import pickle\n",
@@ -46,10 +46,7 @@
    ],
    "metadata": {
     "collapsed": false,
-    "ExecuteTime": {
-     "end_time": "2023-09-06T16:23:50.320823230Z",
-     "start_time": "2023-09-06T16:23:48.109782272Z"
-    }
+    "is_executing": true
    }
   },
   {
diff --git a/poetry.lock b/poetry.lock
index ec0ac84a1a9a340a45edc6e02435118355d5bc48..89579b7508b20613f50cd27b8936489c3949a46c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,9 +1,134 @@
-# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
+
+[[package]]
+name = "aiohttp"
+version = "3.8.6"
+description = "Async http client/server framework (asyncio)"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+files = [
+    {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"},
+    {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"},
+    {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"},
+    {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"},
+    {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"},
+    {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"},
+    {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"},
+    {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"},
+    {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"},
+    {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"},
+    {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"},
+    {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"},
+    {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"},
+    {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"},
+    {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"},
+    {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"},
+    {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"},
+    {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"},
+    {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"},
+    {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"},
+    {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"},
+    {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"},
+    {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"},
+    {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"},
+    {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"},
+    {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"},
+    {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"},
+    {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"},
+    {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"},
+    {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"},
+    {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"},
+    {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"},
+    {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"},
+    {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"},
+    {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"},
+    {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"},
+    {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"},
+    {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"},
+    {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"},
+    {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"},
+    {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"},
+    {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"},
+    {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"},
+    {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"},
+    {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"},
+    {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"},
+    {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"},
+    {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"},
+    {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"},
+    {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"},
+    {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"},
+    {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"},
+    {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"},
+    {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"},
+    {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"},
+    {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"},
+    {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"},
+    {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"},
+    {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"},
+    {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"},
+    {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"},
+    {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"},
+    {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"},
+]
+
+[package.dependencies]
+aiosignal = ">=1.1.2"
+async-timeout = ">=4.0.0a3,<5.0"
+attrs = ">=17.3.0"
+charset-normalizer = ">=2.0,<4.0"
+frozenlist = ">=1.1.1"
+multidict = ">=4.5,<7.0"
+yarl = ">=1.0,<2.0"
+
+[package.extras]
+speedups = ["Brotli", "aiodns", "cchardet"]
+
+[[package]]
+name = "aiosignal"
+version = "1.3.1"
+description = "aiosignal: a list of registered asynchronous callbacks"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
+    {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
+]
+
+[package.dependencies]
+frozenlist = ">=1.1.0"
 
 [[package]]
 name = "annotated-types"
 version = "0.5.0"
 description = "Reusable constraint types to use with typing.Annotated"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -15,6 +140,7 @@ files = [
 name = "ansiwrap"
 version = "0.8.4"
 description = "textwrap, but savvy to ANSI colors and styles"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -29,6 +155,7 @@ textwrap3 = ">=0.9.2"
 name = "anyio"
 version = "4.0.0"
 description = "High level compatibility layer for multiple asynchronous event loop implementations"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -50,6 +177,7 @@ trio = ["trio (>=0.22)"]
 name = "appnope"
 version = "0.1.3"
 description = "Disable App Nap on macOS >= 10.9"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -61,6 +189,7 @@ files = [
 name = "argon2-cffi"
 version = "23.1.0"
 description = "Argon2 for Python"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -81,6 +210,7 @@ typing = ["mypy"]
 name = "argon2-cffi-bindings"
 version = "21.2.0"
 description = "Low-level CFFI bindings for Argon2"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -118,6 +248,7 @@ tests = ["pytest"]
 name = "arrow"
 version = "1.2.3"
 description = "Better dates & times for Python"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -132,6 +263,7 @@ python-dateutil = ">=2.7.0"
 name = "asttokens"
 version = "2.2.1"
 description = "Annotate AST trees with source code positions"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -149,6 +281,7 @@ test = ["astroid", "pytest"]
 name = "async-lru"
 version = "2.0.4"
 description = "Simple LRU cache for asyncio"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -159,10 +292,23 @@ files = [
 [package.dependencies]
 typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""}
 
+[[package]]
+name = "async-timeout"
+version = "4.0.3"
+description = "Timeout context manager for asyncio programs"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"},
+    {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"},
+]
+
 [[package]]
 name = "attrs"
 version = "23.1.0"
 description = "Classes Without Boilerplate"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -181,6 +327,7 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte
 name = "audioread"
 version = "3.0.0"
 description = "multi-library, cross-platform audio decoding"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -191,6 +338,7 @@ files = [
 name = "babel"
 version = "2.12.1"
 description = "Internationalization utilities"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -202,6 +350,7 @@ files = [
 name = "backcall"
 version = "0.2.0"
 description = "Specifications for callback functions passed in to an API"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -213,6 +362,7 @@ files = [
 name = "beautifulsoup4"
 version = "4.12.2"
 description = "Screen-scraping library"
+category = "main"
 optional = false
 python-versions = ">=3.6.0"
 files = [
@@ -231,6 +381,7 @@ lxml = ["lxml"]
 name = "black"
 version = "23.7.0"
 description = "The uncompromising code formatter."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -276,6 +427,7 @@ uvloop = ["uvloop (>=0.15.2)"]
 name = "bleach"
 version = "6.0.0"
 description = "An easy safelist-based HTML-sanitizing tool."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -294,6 +446,7 @@ css = ["tinycss2 (>=1.1.0,<1.2)"]
 name = "certifi"
 version = "2023.7.22"
 description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -305,6 +458,7 @@ files = [
 name = "cffi"
 version = "1.15.1"
 description = "Foreign Function Interface for Python calling C code."
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -381,6 +535,7 @@ pycparser = "*"
 name = "charset-normalizer"
 version = "3.2.0"
 description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+category = "main"
 optional = false
 python-versions = ">=3.7.0"
 files = [
@@ -465,6 +620,7 @@ files = [
 name = "click"
 version = "8.1.7"
 description = "Composable command line interface toolkit"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -479,6 +635,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
 name = "colorama"
 version = "0.4.6"
 description = "Cross-platform colored terminal text."
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 files = [
@@ -490,6 +647,7 @@ files = [
 name = "comm"
 version = "0.1.4"
 description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc."
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -509,6 +667,7 @@ typing = ["mypy (>=0.990)"]
 name = "contourpy"
 version = "1.1.0"
 description = "Python library for calculating contours of 2D quadrilateral grids"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -567,6 +726,7 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"]
 name = "cryptography"
 version = "41.0.3"
 description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -612,6 +772,7 @@ test-randomorder = ["pytest-randomly"]
 name = "cycler"
 version = "0.11.0"
 description = "Composable style cycles"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -623,6 +784,7 @@ files = [
 name = "debugpy"
 version = "1.6.7.post1"
 description = "An implementation of the Debug Adapter Protocol for Python"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -650,6 +812,7 @@ files = [
 name = "decorator"
 version = "5.1.1"
 description = "Decorators for Humans"
+category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -661,6 +824,7 @@ files = [
 name = "defusedxml"
 version = "0.7.1"
 description = "XML bomb protection for Python stdlib modules"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -672,6 +836,7 @@ files = [
 name = "deprecation"
 version = "2.1.0"
 description = "A library to handle automated deprecations"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -686,6 +851,7 @@ packaging = "*"
 name = "ecdsa"
 version = "0.18.0"
 description = "ECDSA cryptographic signature library (pure python)"
+category = "main"
 optional = false
 python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
 files = [
@@ -704,6 +870,7 @@ gmpy2 = ["gmpy2"]
 name = "entrypoints"
 version = "0.4"
 description = "Discover and load entry points from installed packages."
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -715,6 +882,7 @@ files = [
 name = "exceptiongroup"
 version = "1.1.3"
 description = "Backport of PEP 654 (exception groups)"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -729,6 +897,7 @@ test = ["pytest (>=6)"]
 name = "executing"
 version = "1.2.0"
 description = "Get the currently executing AST node of a frame, and other information"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -743,6 +912,7 @@ tests = ["asttokens", "littleutils", "pytest", "rich"]
 name = "fastjsonschema"
 version = "2.18.0"
 description = "Fastest Python implementation of JSON schema"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -757,6 +927,7 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc
 name = "fonttools"
 version = "4.42.1"
 description = "Tools to manipulate font files"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -814,6 +985,7 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
 name = "fqdn"
 version = "1.5.1"
 description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4"
 files = [
@@ -821,10 +993,82 @@ files = [
     {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"},
 ]
 
+[[package]]
+name = "frozenlist"
+version = "1.4.0"
+description = "A list-like structure which implements collections.abc.MutableSequence"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"},
+    {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"},
+    {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"},
+    {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"},
+    {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"},
+    {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"},
+    {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"},
+    {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"},
+    {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"},
+    {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"},
+    {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"},
+    {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"},
+    {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"},
+    {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"},
+    {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"},
+    {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"},
+    {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"},
+    {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"},
+    {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"},
+    {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"},
+    {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"},
+    {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"},
+    {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"},
+    {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"},
+    {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"},
+    {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"},
+    {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"},
+    {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"},
+    {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"},
+    {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"},
+    {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"},
+    {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"},
+    {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"},
+    {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"},
+    {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"},
+    {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"},
+    {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"},
+    {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"},
+    {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"},
+    {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"},
+    {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"},
+    {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"},
+    {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"},
+    {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"},
+    {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"},
+    {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"},
+    {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"},
+    {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"},
+    {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"},
+    {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"},
+    {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"},
+    {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"},
+    {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"},
+    {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"},
+    {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"},
+    {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"},
+    {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"},
+    {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"},
+    {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"},
+    {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"},
+    {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"},
+]
+
 [[package]]
 name = "future"
 version = "0.18.3"
 description = "Clean single-source support for Python 3 and 2"
+category = "main"
 optional = false
 python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
 files = [
@@ -835,6 +1079,7 @@ files = [
 name = "git-python"
 version = "1.0.3"
 description = "combination and simplification of some useful git commands"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -849,6 +1094,7 @@ gitpython = "*"
 name = "gitdb"
 version = "4.0.10"
 description = "Git Object Database"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -863,6 +1109,7 @@ smmap = ">=3.0.1,<6"
 name = "gitpython"
 version = "3.1.33"
 description = "GitPython is a Python library used to interact with Git repositories"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -877,6 +1124,7 @@ gitdb = ">=4.0.1,<5"
 name = "idna"
 version = "3.4"
 description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -888,6 +1136,7 @@ files = [
 name = "iniconfig"
 version = "2.0.0"
 description = "brain-dead simple config-ini parsing"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -899,6 +1148,7 @@ files = [
 name = "ipykernel"
 version = "6.25.1"
 description = "IPython Kernel for Jupyter"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -912,7 +1162,7 @@ comm = ">=0.1.1"
 debugpy = ">=1.6.5"
 ipython = ">=7.23.1"
 jupyter-client = ">=6.1.12"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 matplotlib-inline = ">=0.1"
 nest-asyncio = "*"
 packaging = "*"
@@ -932,6 +1182,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio"
 name = "ipynb"
 version = "0.5.1"
 description = "Package / Module importer for importing code from Jupyter Notebook files (.ipynb)"
+category = "main"
 optional = false
 python-versions = ">=3.4"
 files = [
@@ -943,6 +1194,7 @@ files = [
 name = "ipython"
 version = "8.14.0"
 description = "IPython: Productive Interactive Computing"
+category = "main"
 optional = false
 python-versions = ">=3.9"
 files = [
@@ -981,6 +1233,7 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa
 name = "ipython-genutils"
 version = "0.2.0"
 description = "Vestigial utilities from IPython"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -992,6 +1245,7 @@ files = [
 name = "ipywidgets"
 version = "8.1.0"
 description = "Jupyter interactive widgets"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1013,6 +1267,7 @@ test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"]
 name = "isoduration"
 version = "20.11.0"
 description = "Operations with ISO 8601 durations"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1027,6 +1282,7 @@ arrow = ">=0.15.0"
 name = "jedi"
 version = "0.19.0"
 description = "An autocompletion tool for Python that can be used for text editors."
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1046,6 +1302,7 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
 name = "jinja2"
 version = "3.1.2"
 description = "A very fast and expressive template engine."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1063,6 +1320,7 @@ i18n = ["Babel (>=2.7)"]
 name = "joblib"
 version = "1.3.2"
 description = "Lightweight pipelining with Python functions"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1074,6 +1332,7 @@ files = [
 name = "json5"
 version = "0.9.14"
 description = "A Python implementation of the JSON5 data format."
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1088,6 +1347,7 @@ dev = ["hypothesis"]
 name = "jsonpointer"
 version = "2.4"
 description = "Identify specific nodes in a JSON document (RFC 6901)"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
 files = [
@@ -1099,6 +1359,7 @@ files = [
 name = "jsonschema"
 version = "4.19.0"
 description = "An implementation of JSON Schema validation for Python"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1128,6 +1389,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-
 name = "jsonschema-specifications"
 version = "2023.7.1"
 description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1142,6 +1404,7 @@ referencing = ">=0.28.0"
 name = "jupyter"
 version = "1.0.0"
 description = "Jupyter metapackage. Install all the Jupyter components in one go."
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -1162,6 +1425,7 @@ qtconsole = "*"
 name = "jupyter-client"
 version = "8.3.1"
 description = "Jupyter protocol implementation and client libraries"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1170,7 +1434,7 @@ files = [
 ]
 
 [package.dependencies]
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 python-dateutil = ">=2.8.2"
 pyzmq = ">=23.0"
 tornado = ">=6.2"
@@ -1184,6 +1448,7 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt
 name = "jupyter-console"
 version = "6.6.3"
 description = "Jupyter terminal console"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1195,7 +1460,7 @@ files = [
 ipykernel = ">=6.14"
 ipython = "*"
 jupyter-client = ">=7.0.0"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 prompt-toolkit = ">=3.0.30"
 pygments = "*"
 pyzmq = ">=17"
@@ -1208,6 +1473,7 @@ test = ["flaky", "pexpect", "pytest"]
 name = "jupyter-core"
 version = "5.3.1"
 description = "Jupyter core package. A base package on which Jupyter projects rely."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1228,6 +1494,7 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"]
 name = "jupyter-events"
 version = "0.7.0"
 description = "Jupyter Event System library"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1253,6 +1520,7 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p
 name = "jupyter-lsp"
 version = "2.2.0"
 description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1267,6 +1535,7 @@ jupyter-server = ">=1.1.2"
 name = "jupyter-server"
 version = "2.7.3"
 description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1279,7 +1548,7 @@ anyio = ">=3.1.0"
 argon2-cffi = "*"
 jinja2 = "*"
 jupyter-client = ">=7.4.4"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 jupyter-events = ">=0.6.0"
 jupyter-server-terminals = "*"
 nbconvert = ">=6.4.4"
@@ -1303,6 +1572,7 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-sc
 name = "jupyter-server-terminals"
 version = "0.4.4"
 description = "A Jupyter Server Extension Providing Terminals."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1322,6 +1592,7 @@ test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov",
 name = "jupyterlab"
 version = "4.0.5"
 description = "JupyterLab computational environment"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1353,6 +1624,7 @@ test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-cons
 name = "jupyterlab-pygments"
 version = "0.2.2"
 description = "Pygments theme using JupyterLab CSS variables"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1364,6 +1636,7 @@ files = [
 name = "jupyterlab-server"
 version = "2.24.0"
 description = "A set of server components for JupyterLab and JupyterLab like applications."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1389,6 +1662,7 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida
 name = "jupyterlab-widgets"
 version = "3.0.8"
 description = "Jupyter interactive widgets for JupyterLab"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1400,6 +1674,7 @@ files = [
 name = "kiwisolver"
 version = "1.4.5"
 description = "A fast implementation of the Cassowary constraint solver"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1513,6 +1788,7 @@ files = [
 name = "librosa"
 version = "0.9.2"
 description = "Python module for audio and music processing"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -1535,13 +1811,14 @@ soundfile = ">=0.10.2"
 
 [package.extras]
 display = ["matplotlib (>=3.3.0)"]
-docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (<0.50)", "numpydoc", "presets", "sphinx (!=1.3.1)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (==1.*)", "sphinxcontrib-svg2pdfconverter"]
+docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (<0.50)", "numpydoc", "presets", "sphinx (!=1.3.1)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (>=1.0.0,<2.0.0)", "sphinxcontrib-svg2pdfconverter"]
 tests = ["contextlib2", "matplotlib (>=3.3.0)", "pytest", "pytest-cov", "pytest-mpl", "samplerate", "soxr"]
 
 [[package]]
 name = "llvmlite"
 version = "0.39.1"
 description = "lightweight wrapper around basic LLVM functionality"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1579,6 +1856,7 @@ files = [
 name = "mako"
 version = "1.2.4"
 description = "A super-fast templating language that borrows the best ideas from the existing templating languages."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1598,6 +1876,7 @@ testing = ["pytest"]
 name = "markupsafe"
 version = "2.1.3"
 description = "Safely add untrusted strings to HTML/XML markup."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1657,6 +1936,7 @@ files = [
 name = "matplotlib"
 version = "3.7.2"
 description = "Python plotting package"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1718,6 +1998,7 @@ python-dateutil = ">=2.7"
 name = "matplotlib-inline"
 version = "0.1.6"
 description = "Inline Matplotlib backend for Jupyter"
+category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -1732,6 +2013,7 @@ traitlets = "*"
 name = "mistune"
 version = "3.0.1"
 description = "A sane and fast Markdown parser with useful plugins and renderers"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1739,10 +2021,95 @@ files = [
     {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"},
 ]
 
+[[package]]
+name = "multidict"
+version = "6.0.4"
+description = "multidict implementation"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"},
+    {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"},
+    {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"},
+    {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"},
+    {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"},
+    {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"},
+    {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"},
+    {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"},
+    {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"},
+    {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"},
+    {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"},
+    {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"},
+    {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"},
+    {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"},
+    {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"},
+    {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"},
+    {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"},
+    {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"},
+    {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"},
+    {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"},
+    {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"},
+    {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"},
+    {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"},
+    {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"},
+    {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"},
+    {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"},
+    {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"},
+    {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"},
+    {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"},
+    {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"},
+    {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"},
+    {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"},
+    {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"},
+    {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"},
+    {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"},
+    {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"},
+    {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"},
+    {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"},
+    {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"},
+    {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"},
+    {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"},
+    {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"},
+    {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"},
+    {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"},
+    {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"},
+    {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"},
+    {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"},
+    {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"},
+    {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"},
+    {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"},
+    {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"},
+    {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"},
+    {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"},
+    {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"},
+    {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"},
+    {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"},
+    {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"},
+    {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"},
+    {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"},
+    {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"},
+    {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"},
+    {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"},
+    {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"},
+    {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"},
+    {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"},
+    {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"},
+    {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"},
+    {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"},
+    {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"},
+    {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"},
+    {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"},
+    {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"},
+    {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"},
+    {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"},
+]
+
 [[package]]
 name = "mypy-extensions"
 version = "1.0.0"
 description = "Type system extensions for programs checked with the mypy type checker."
+category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -1754,6 +2121,7 @@ files = [
 name = "nbclient"
 version = "0.8.0"
 description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
+category = "main"
 optional = false
 python-versions = ">=3.8.0"
 files = [
@@ -1763,7 +2131,7 @@ files = [
 
 [package.dependencies]
 jupyter-client = ">=6.1.12"
-jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 nbformat = ">=5.1"
 traitlets = ">=5.4"
 
@@ -1776,6 +2144,7 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=
 name = "nbconvert"
 version = "7.8.0"
 description = "Converting Jupyter Notebooks"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1813,6 +2182,7 @@ webpdf = ["playwright"]
 name = "nbformat"
 version = "5.9.2"
 description = "The Jupyter Notebook format"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1834,6 +2204,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"]
 name = "nest-asyncio"
 version = "1.5.7"
 description = "Patch asyncio to allow nested event loops"
+category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
@@ -1845,6 +2216,7 @@ files = [
 name = "notebook"
 version = "7.0.3"
 description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1868,6 +2240,7 @@ test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4
 name = "notebook-shim"
 version = "0.2.3"
 description = "A shim layer for notebook traits and config"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1885,6 +2258,7 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"
 name = "numba"
 version = "0.56.4"
 description = "compiling Python code using LLVM"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -1919,7 +2293,7 @@ files = [
 ]
 
 [package.dependencies]
-llvmlite = "==0.39.*"
+llvmlite = ">=0.39.0dev0,<0.40"
 numpy = ">=1.18,<1.24"
 setuptools = "*"
 
@@ -1927,6 +2301,7 @@ setuptools = "*"
 name = "numpy"
 version = "1.23.5"
 description = "NumPy is the fundamental package for array computing with Python."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -1964,6 +2339,7 @@ files = [
 name = "oic"
 version = "1.6.1"
 description = "Python implementation of OAuth2 and OpenID Connect"
+category = "main"
 optional = false
 python-versions = "~=3.7"
 files = [
@@ -1993,6 +2369,7 @@ types = ["types-requests"]
 name = "overrides"
 version = "7.4.0"
 description = "A decorator to automatically detect mismatch when overriding a method."
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2004,6 +2381,7 @@ files = [
 name = "packaging"
 version = "23.1"
 description = "Core utilities for Python packages"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2015,6 +2393,7 @@ files = [
 name = "pandas"
 version = "1.5.3"
 description = "Powerful data structures for data analysis, time series, and statistics"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2059,6 +2438,7 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
 name = "pandocfilters"
 version = "1.5.0"
 description = "Utilities for writing pandoc filters in python"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2070,6 +2450,7 @@ files = [
 name = "papermill"
 version = "2.4.0"
 description = "Parametrize and run Jupyter and nteract Notebooks"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2103,6 +2484,7 @@ test = ["attrs (>=17.4.0)", "azure-datalake-store (>=0.0.30)", "azure-storage-bl
 name = "parso"
 version = "0.8.3"
 description = "A Python Parser"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2118,6 +2500,7 @@ testing = ["docopt", "pytest (<6.0.0)"]
 name = "pathspec"
 version = "0.11.2"
 description = "Utility library for gitignore style pattern matching of file paths."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2129,6 +2512,7 @@ files = [
 name = "pexpect"
 version = "4.8.0"
 description = "Pexpect allows easy control of interactive console applications."
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2143,6 +2527,7 @@ ptyprocess = ">=0.5"
 name = "pickleshare"
 version = "0.7.5"
 description = "Tiny 'shelve'-like database with concurrency support"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2154,6 +2539,7 @@ files = [
 name = "pillow"
 version = "10.0.0"
 description = "Python Imaging Library (Fork)"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2175,7 +2561,6 @@ files = [
     {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"},
     {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"},
     {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"},
-    {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"},
     {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"},
     {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"},
     {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"},
@@ -2185,7 +2570,6 @@ files = [
     {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"},
     {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"},
     {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"},
-    {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"},
     {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"},
     {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"},
     {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"},
@@ -2223,6 +2607,7 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa
 name = "pip"
 version = "23.2.1"
 description = "The PyPA recommended tool for installing Python packages."
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2234,6 +2619,7 @@ files = [
 name = "platformdirs"
 version = "3.10.0"
 description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2249,6 +2635,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co
 name = "pluggy"
 version = "1.3.0"
 description = "plugin and hook calling mechanisms for python"
+category = "dev"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2264,6 +2651,7 @@ testing = ["pytest", "pytest-benchmark"]
 name = "pooch"
 version = "1.7.0"
 description = "\"Pooch manages your Python library's sample data files: it automatically downloads and stores them in a local directory, with support for versioning and corruption checks.\""
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2285,6 +2673,7 @@ xxhash = ["xxhash (>=1.4.3)"]
 name = "prometheus-client"
 version = "0.17.1"
 description = "Python client for the Prometheus monitoring system."
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2299,6 +2688,7 @@ twisted = ["twisted"]
 name = "prompt-toolkit"
 version = "3.0.39"
 description = "Library for building powerful interactive command lines in Python"
+category = "main"
 optional = false
 python-versions = ">=3.7.0"
 files = [
@@ -2313,6 +2703,7 @@ wcwidth = "*"
 name = "psutil"
 version = "5.9.5"
 description = "Cross-platform lib for process and system monitoring in Python."
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2339,6 +2730,7 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
 name = "ptyprocess"
 version = "0.7.0"
 description = "Run a subprocess in a pseudo terminal"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2350,6 +2742,7 @@ files = [
 name = "pure-eval"
 version = "0.2.2"
 description = "Safely evaluate AST nodes without side effects"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2364,6 +2757,7 @@ tests = ["pytest"]
 name = "pyasn1"
 version = "0.5.0"
 description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
 files = [
@@ -2375,6 +2769,7 @@ files = [
 name = "pycparser"
 version = "2.21"
 description = "C parser in Python"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -2386,6 +2781,7 @@ files = [
 name = "pycryptodomex"
 version = "3.18.0"
 description = "Cryptographic library for Python"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -2427,6 +2823,7 @@ files = [
 name = "pydantic"
 version = "2.3.0"
 description = "Data validation using Python type hints"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2446,6 +2843,7 @@ email = ["email-validator (>=2.0.0)"]
 name = "pydantic-core"
 version = "2.6.3"
 description = ""
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2564,6 +2962,7 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
 name = "pydantic-settings"
 version = "2.0.3"
 description = "Settings management using Pydantic"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2579,6 +2978,7 @@ python-dotenv = ">=0.21.0"
 name = "pygments"
 version = "2.16.1"
 description = "Pygments is a syntax highlighting package written in Python."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2593,6 +2993,7 @@ plugins = ["importlib-metadata"]
 name = "pyjwkest"
 version = "1.4.2"
 description = "Python implementation of JWT, JWE, JWS and JWK"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2609,6 +3010,7 @@ six = "*"
 name = "pyparsing"
 version = "3.0.9"
 description = "pyparsing module - Classes and methods to define and execute parsing grammars"
+category = "main"
 optional = false
 python-versions = ">=3.6.8"
 files = [
@@ -2623,6 +3025,7 @@ diagrams = ["jinja2", "railroad-diagrams"]
 name = "pytest"
 version = "7.4.0"
 description = "pytest: simple powerful testing with Python"
+category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2645,6 +3048,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no
 name = "python-dateutil"
 version = "2.8.2"
 description = "Extensions to the standard Python datetime module"
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
 files = [
@@ -2659,6 +3063,7 @@ six = ">=1.5"
 name = "python-dotenv"
 version = "1.0.0"
 description = "Read key-value pairs from a .env file and set them as environment variables"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2673,6 +3078,7 @@ cli = ["click (>=5.0)"]
 name = "python-jose"
 version = "3.3.0"
 description = "JOSE implementation in Python"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2694,6 +3100,7 @@ pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"]
 name = "python-json-logger"
 version = "2.0.7"
 description = "A python library adding a json log formatter"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2705,6 +3112,7 @@ files = [
 name = "python-keycloak"
 version = "3.3.0"
 description = "python-keycloak is a Python package providing access to the Keycloak API."
+category = "main"
 optional = false
 python-versions = ">=3.7,<4.0"
 files = [
@@ -2725,6 +3133,7 @@ docs = ["Sphinx (>=5.3.0,<6.0.0)", "alabaster (>=0.7.12,<0.8.0)", "commonmark (>
 name = "pytz"
 version = "2023.3"
 description = "World timezone definitions, modern and historical"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2736,6 +3145,7 @@ files = [
 name = "pywin32"
 version = "306"
 description = "Python for Window Extensions"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -2759,6 +3169,7 @@ files = [
 name = "pywinpty"
 version = "2.0.11"
 description = "Pseudo terminal support for Windows from Python."
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2773,6 +3184,7 @@ files = [
 name = "pyyaml"
 version = "6.0.1"
 description = "YAML parser and emitter for Python"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2822,6 +3234,7 @@ files = [
 name = "pyzmq"
 version = "25.1.1"
 description = "Python bindings for 0MQ"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -2927,6 +3340,7 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""}
 name = "qtconsole"
 version = "5.4.3"
 description = "Jupyter Qt console"
+category = "main"
 optional = false
 python-versions = ">= 3.7"
 files = [
@@ -2953,6 +3367,7 @@ test = ["flaky", "pytest", "pytest-qt"]
 name = "qtpy"
 version = "2.4.0"
 description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2970,6 +3385,7 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"]
 name = "referencing"
 version = "0.30.2"
 description = "JSON Referencing + Python"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -2985,6 +3401,7 @@ rpds-py = ">=0.7.0"
 name = "requests"
 version = "2.31.0"
 description = "Python HTTP for Humans."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3006,6 +3423,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 name = "requests-toolbelt"
 version = "1.0.0"
 description = "A utility belt for advanced users of python-requests"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 files = [
@@ -3020,6 +3438,7 @@ requests = ">=2.0.1,<3.0.0"
 name = "resampy"
 version = "0.4.2"
 description = "Efficient signal resampling"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3040,6 +3459,7 @@ tests = ["pytest (<8)", "pytest-cov", "scipy (>=1.0)"]
 name = "rfc3339-validator"
 version = "0.1.4"
 description = "A pure python RFC3339 validator"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -3054,6 +3474,7 @@ six = "*"
 name = "rfc3986-validator"
 version = "0.1.1"
 description = "Pure python rfc3986 validator"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 files = [
@@ -3065,6 +3486,7 @@ files = [
 name = "rpds-py"
 version = "0.10.0"
 description = "Python bindings to Rust's persistent data structures (rpds)"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3171,6 +3593,7 @@ files = [
 name = "rsa"
 version = "4.9"
 description = "Pure-Python RSA implementation"
+category = "main"
 optional = false
 python-versions = ">=3.6,<4"
 files = [
@@ -3185,6 +3608,7 @@ pyasn1 = ">=0.1.3"
 name = "scikit-learn"
 version = "1.3.0"
 description = "A set of python modules for machine learning and data mining"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3227,6 +3651,7 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (
 name = "scipy"
 version = "1.11.2"
 description = "Fundamental algorithms for scientific computing in Python"
+category = "main"
 optional = false
 python-versions = "<3.13,>=3.9"
 files = [
@@ -3269,6 +3694,7 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo
 name = "send2trash"
 version = "1.8.2"
 description = "Send file to trash natively under Mac OS X, Windows and Linux"
+category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
 files = [
@@ -3285,6 +3711,7 @@ win32 = ["pywin32"]
 name = "setuptools"
 version = "68.1.2"
 description = "Easily download, build, install, upgrade, and uninstall Python packages"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3301,6 +3728,7 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
 name = "six"
 version = "1.16.0"
 description = "Python 2 and 3 compatibility utilities"
+category = "main"
 optional = false
 python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
 files = [
@@ -3312,6 +3740,7 @@ files = [
 name = "smmap"
 version = "5.0.0"
 description = "A pure Python implementation of a sliding window memory map manager"
+category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
@@ -3323,6 +3752,7 @@ files = [
 name = "sniffio"
 version = "1.3.0"
 description = "Sniff out which async library your code is running under"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3334,6 +3764,7 @@ files = [
 name = "soundfile"
 version = "0.12.1"
 description = "An audio library based on libsndfile, CFFI and NumPy"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3357,6 +3788,7 @@ numpy = ["numpy"]
 name = "soupsieve"
 version = "2.4.1"
 description = "A modern CSS selector implementation for Beautiful Soup."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3368,6 +3800,7 @@ files = [
 name = "stack-data"
 version = "0.6.2"
 description = "Extract data from python stack frames and tracebacks for informative displays"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3387,6 +3820,7 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
 name = "tenacity"
 version = "8.2.3"
 description = "Retry code until it succeeds"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3401,6 +3835,7 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"]
 name = "terminado"
 version = "0.17.1"
 description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3421,6 +3856,7 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"]
 name = "textwrap3"
 version = "0.9.2"
 description = "textwrap from Python 3.6 backport (plus a few tweaks)"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3432,6 +3868,7 @@ files = [
 name = "threadpoolctl"
 version = "3.2.0"
 description = "threadpoolctl"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3443,6 +3880,7 @@ files = [
 name = "tinycss2"
 version = "1.2.1"
 description = "A tiny CSS parser"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3457,10 +3895,23 @@ webencodings = ">=0.4"
 doc = ["sphinx", "sphinx_rtd_theme"]
 test = ["flake8", "isort", "pytest"]
 
+[[package]]
+name = "tinydb"
+version = "4.8.0"
+description = "TinyDB is a tiny, document oriented database optimized for your happiness :)"
+category = "main"
+optional = false
+python-versions = ">=3.7,<4.0"
+files = [
+    {file = "tinydb-4.8.0-py3-none-any.whl", hash = "sha256:30c06d12383d7c332e404ca6a6103fb2b32cbf25712689648c39d9a6bd34bd3d"},
+    {file = "tinydb-4.8.0.tar.gz", hash = "sha256:6dd686a9c5a75dfa9280088fd79a419aefe19cd7f4bd85eba203540ef856d564"},
+]
+
 [[package]]
 name = "tomli"
 version = "2.0.1"
 description = "A lil' TOML parser"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3472,6 +3923,7 @@ files = [
 name = "tornado"
 version = "6.3.3"
 description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
+category = "main"
 optional = false
 python-versions = ">= 3.8"
 files = [
@@ -3492,6 +3944,7 @@ files = [
 name = "tqdm"
 version = "4.66.1"
 description = "Fast, Extensible Progress Meter"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3512,6 +3965,7 @@ telegram = ["requests"]
 name = "traitlets"
 version = "5.9.0"
 description = "Traitlets Python configuration system"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3523,10 +3977,34 @@ files = [
 docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"]
 test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"]
 
+[[package]]
+name = "tuspy"
+version = "1.0.1"
+description = "A Python client for the tus resumable upload protocol ->  http://tus.io"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+    {file = "tuspy-1.0.1-py3-none-any.whl", hash = "sha256:4c136bb97593367376e77f1d9580c1990bd535698f86765c80db9b9d3864f35f"},
+    {file = "tuspy-1.0.1.tar.gz", hash = "sha256:09a4ef6e20b05c6f83c53c5839892ead141947afb2f6b7dea5cca45f8d120793"},
+]
+
+[package.dependencies]
+aiohttp = ">=3.6.2"
+future = ">=0.16.0"
+requests = ">=2.18.4"
+six = ">=1.11.0"
+tinydb = ">=3.5.0"
+
+[package.extras]
+dev = ["Sphinx (==1.7.1)", "sphinx-autobuild (==2021.3.14)", "tox (>=2.3.1)"]
+test = ["aioresponses (>=0.6.2)", "coverage (>=4.2)", "pytest (>=3.0.3)", "pytest-cov (>=2.3.1,<2.6)", "responses (>=0.5.1)"]
+
 [[package]]
 name = "typing-extensions"
 version = "4.7.1"
 description = "Backported and Experimental Type Hints for Python 3.7+"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3538,6 +4016,7 @@ files = [
 name = "uri-template"
 version = "1.3.0"
 description = "RFC 6570 URI Template Processor"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3552,6 +4031,7 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake
 name = "urllib3"
 version = "2.0.4"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3569,6 +4049,7 @@ zstd = ["zstandard (>=0.18.0)"]
 name = "wcwidth"
 version = "0.2.6"
 description = "Measures the displayed width of unicode strings in a terminal"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3580,6 +4061,7 @@ files = [
 name = "webcolors"
 version = "1.13"
 description = "A library for working with the color formats defined by HTML and CSS."
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3595,6 +4077,7 @@ tests = ["pytest", "pytest-cov"]
 name = "webencodings"
 version = "0.5.1"
 description = "Character encoding aliases for legacy web content"
+category = "main"
 optional = false
 python-versions = "*"
 files = [
@@ -3606,6 +4089,7 @@ files = [
 name = "websocket-client"
 version = "1.6.2"
 description = "WebSocket client for Python with low level API options"
+category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
@@ -3622,6 +4106,7 @@ test = ["websockets"]
 name = "widgetsnbextension"
 version = "4.0.8"
 description = "Jupyter interactive widgets for Jupyter Notebook"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -3629,7 +4114,95 @@ files = [
     {file = "widgetsnbextension-4.0.8.tar.gz", hash = "sha256:9ec291ba87c2dfad42c3d5b6f68713fa18be1acd7476569516b2431682315c17"},
 ]
 
+[[package]]
+name = "yarl"
+version = "1.9.2"
+description = "Yet another URL library"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82"},
+    {file = "yarl-1.9.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8"},
+    {file = "yarl-1.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9"},
+    {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560"},
+    {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac"},
+    {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea"},
+    {file = "yarl-1.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608"},
+    {file = "yarl-1.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5"},
+    {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0"},
+    {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4"},
+    {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095"},
+    {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3"},
+    {file = "yarl-1.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528"},
+    {file = "yarl-1.9.2-cp310-cp310-win32.whl", hash = "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3"},
+    {file = "yarl-1.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde"},
+    {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6"},
+    {file = "yarl-1.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb"},
+    {file = "yarl-1.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0"},
+    {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2"},
+    {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191"},
+    {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d"},
+    {file = "yarl-1.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7"},
+    {file = "yarl-1.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6"},
+    {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8"},
+    {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9"},
+    {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be"},
+    {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7"},
+    {file = "yarl-1.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a"},
+    {file = "yarl-1.9.2-cp311-cp311-win32.whl", hash = "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8"},
+    {file = "yarl-1.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051"},
+    {file = "yarl-1.9.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74"},
+    {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367"},
+    {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef"},
+    {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3"},
+    {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938"},
+    {file = "yarl-1.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc"},
+    {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33"},
+    {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45"},
+    {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185"},
+    {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04"},
+    {file = "yarl-1.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582"},
+    {file = "yarl-1.9.2-cp37-cp37m-win32.whl", hash = "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b"},
+    {file = "yarl-1.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368"},
+    {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac"},
+    {file = "yarl-1.9.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4"},
+    {file = "yarl-1.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574"},
+    {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb"},
+    {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59"},
+    {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e"},
+    {file = "yarl-1.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417"},
+    {file = "yarl-1.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78"},
+    {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333"},
+    {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c"},
+    {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5"},
+    {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc"},
+    {file = "yarl-1.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b"},
+    {file = "yarl-1.9.2-cp38-cp38-win32.whl", hash = "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7"},
+    {file = "yarl-1.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72"},
+    {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9"},
+    {file = "yarl-1.9.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8"},
+    {file = "yarl-1.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7"},
+    {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716"},
+    {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a"},
+    {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3"},
+    {file = "yarl-1.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955"},
+    {file = "yarl-1.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1"},
+    {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4"},
+    {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6"},
+    {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf"},
+    {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3"},
+    {file = "yarl-1.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80"},
+    {file = "yarl-1.9.2-cp39-cp39-win32.whl", hash = "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623"},
+    {file = "yarl-1.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18"},
+    {file = "yarl-1.9.2.tar.gz", hash = "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571"},
+]
+
+[package.dependencies]
+idna = ">=2.0"
+multidict = ">=4.0"
+
 [metadata]
 lock-version = "2.0"
 python-versions = "3.10.*"
-content-hash = "186a8d97c06e3cfd7299c00562f52d9f7e6774f4e16e49dddf10813ab56be4a1"
+content-hash = "0821c482ad42cd1b32b3a6dc4f836986f50ece1207603ac165337971c32ff626"
diff --git a/pyproject.toml b/pyproject.toml
index 3f2b05f1dea29207ede75eb1d201de910d34e4e1..a38b16056a8863c00f6c5f468c0a7579ff5188a4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -23,6 +23,7 @@ papermill = "^2.4.0"
 black = "^23.7.0"
 oic = "^1.6.1"
 python-keycloak = "^3.3.0"
+tuspy = "^1.0.1"
 
 
 [tool.poetry.group.dev.dependencies]